Reverse engineering NOR Flash (VI)

Analizar el contenido de la memoria NOR y NAND Flash nos permitirá conocer mejor el sistema y sus posibles modificaciones. Para ello vamos a realizar ingeniería inversa en ambas memorias.

El primer análisis que podemos realizar, es utilizar el comando file con cada una de las partes del contenido de la memoria NOR flash, de esta manera conoceremos el tipo y formato de cada archivo en cuestión.

sergio@N130:~/proyectos/STB7007/flash_dev/NOR_Flash$ file cfe.bin
cfe.bin:        data
sergio@N130:~/proyectos/STB7007/flash_dev/NOR_Flash$ 

Repetimos el mismo comando con el resto de archivos.

cfe_config.bin: data

hdcp:           data

MAC_address:    data

reserve:        DOS executable (device driver)

secure_storage: DOS executable (device driver)

Para obtener más información acerca del contenido, utilizaremos los comandos hexdump y strings.

Con hexdump realiza un volcado completo del archivo a formato hexadecimal. Mientras que strings, busca e imprime secuencias de caracteres imprimibles del contenido del archivo.

Volcar el contenido del archivo a formato hexadecimal y guardar la información en un fichero la salida.

sergio@N130:~/proyectos/STB7007/flash_dev/NOR_Flash$ hexdump -C cfe.bin > cfe.dump
sergio@N130:~/proyectos/STB7007/flash_dev/NOR_Flash$ 

Buscar y extraer cadenas de texto y guardar en un fichero la salida.

sergio@N130:~/proyectos/STB7007/flash_dev/NOR_Flash$ strings -n 10 cfe.bin > cfe_strings.out
sergio@N130:~/proyectos/STB7007/flash_dev/NOR_Flash$ 

cfe

Mediante los strings de cfe, se puede apreciar gran parte del texto de la secuencia de arranque, la petición de un reset después de cargar el splash y el punto más importante. El cifrado del bootloader mediante un certificado público.

-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA2PBIzgmzEKfPNYiXy1b4OLI8Ji2wpqOY3BMsgWvCKjIc9LViwi5q
Al+z0vLd3LPR04Blw+lwERak6Hvt5cKNU9iVN2/VY2xZZjrK5uwbgyezFJU7cV04
W9rewsLsl/yv71W+fjhNwI0/KHxDh3ajr7nEjjmTC12wlp8+EOZGvu19jNUj2crd
ycRvudeMQ5r9c64b3QYZC2JOl12FdQjmLkMiXpTUhXrCeBc6IzAeKX096jLSO3qX
MOdbEu+7sdWPLW4QFnjDX4/+M0Joz3NWfMU+Lz9pYiUONA/nZ/PwTh36pgZgKAqK
u2cdZi4R9zoPwLAaHJM+ommn7P/czkgI6QIDAQAB
-----END RSA PUBLIC KEY-----

Descarga el certificado certificado.cer

Repetimos el proceso con cada uno de los archivos, en algunos casos la salida de strings es 0, quiere decir que no ha encontrado caracteres imprimibles.

cfe_config.bin

Cuando arranca el bootloader, identifica 5 particiones mtd11 a mtd15 que son las utilizadas por el sistema.

BOOT_IMAGE=0
PACKAGE0_NAME=Flash - Image - Usr - NAND - Telefonica - Broadcom - ComtrendCT7007
PACKAGE0_FILENAME=/[nandwrite]/dev/mtd12
PACKAGE1_NAME=Flash - Image - Usr - Local - NAND - Telefonica - Broadcom - ComtrendCT7007
PACKAGE1_FILENAME=/[nandwrite]/dev/mtd13
PACKAGE2_NAME=Flash - Image - Usr - MediaBrowser - NAND - Telefonica - Broadcom - ComtrendCT7007
PACKAGE2_FILENAME=/[nandwrite]/dev/mtd14
PACKAGE3_NAME=Flash - Image - Usr - MediaServer - NAND - Telefonica - Broadcom - ComtrendCT7007
PACKAGE3_FILENAME=/[nandwrite]/dev/mtd15
PACKAGE4_NAME=Flash - Image - RomFS - NAND - Telefonica - Broadcom - ComtrendCT7007
PACKAGE4_FILENAME=/[nandwrite]/dev/mtd11
PACKAGE4_EXTENT=3798205
PACKAGE_COUNT=5
FIRST_BOOT=0
PACKAGE0_VERSION=1000026
PACKAGE0_ID=Flash-Image-Usr-NAND-Telefonica-Broadcom-ComtrendCT7007-1.0.0r26
PACKAGE0_SIZE=3395584
PACKAGE0_EXTENT=3396792
PACKAGE1_VERSION=1000020
PACKAGE1_ID=Flash-Image-Usr-Local-NAND-Telefonica-Broadcom-ComtrendCT7007-1.0.0r20
PACKAGE1_SIZE=12828672
PACKAGE1_EXTENT=12829894
PACKAGE2_VERSION=4111812
PACKAGE2_ID=Flash-Image-Usr-MediaBrowser-NAND-Telefonica-Broadcom-ComtrendCT7007-4.11.18r12
PACKAGE2_SIZE=11804672
PACKAGE2_EXTENT=11805910
PACKAGE3_VERSION=1000030
PACKAGE3_ID=Flash-Image-Usr-MediaServer-NAND-Telefonica-Broadcom-ComtrendCT7007-1.0.0r30
PACKAGE3_SIZE=1015808
PACKAGE3_EXTENT=1017042
PACKAGE4_VERSION=2061836
PACKAGE4_ID=Flash-Image-RomFS-NAND-Telefonica-Broadcom-ComtrendCT7007-2.6.18r36
PACKAGE4_SIZE=3796297

Con el sistema iniciado y en la consola, si utilizamos el comando "cfe_config -p" aparece la misma información.

[root@stb:/] $ cfe_config -p
Variable Name        Value
-------------------- --------------------------------------------------
          BOOT_IMAGE 0
       PACKAGE0_NAME Flash - Image - Usr - NAND - Telefonica - Broadcom - ComtrendCT7007
   PACKAGE0_FILENAME /[nandwrite]/dev/mtd12
       PACKAGE1_NAME Flash - Image - Usr - Local - NAND - Telefonica - Broadcom - ComtrendCT7007
   PACKAGE1_FILENAME /[nandwrite]/dev/mtd13
       PACKAGE2_NAME Flash - Image - Usr - MediaBrowser - NAND - Telefonica - Broadcom - ComtrendCT7007
   PACKAGE2_FILENAME /[nandwrite]/dev/mtd14
       PACKAGE3_NAME Flash - Image - Usr - MediaServer - NAND - Telefonica - Broadcom - ComtrendCT7007
   PACKAGE3_FILENAME /[nandwrite]/dev/mtd15
       PACKAGE4_NAME Flash - Image - RomFS - NAND - Telefonica - Broadcom - ComtrendCT7007
   PACKAGE4_FILENAME /[nandwrite]/dev/mtd11
     PACKAGE4_EXTENT 3798205
       PACKAGE_COUNT 5
          FIRST_BOOT 0
    PACKAGE0_VERSION 1000026
         PACKAGE0_ID Flash-Image-Usr-NAND-Telefonica-Broadcom-ComtrendCT7007-1.0.0r26
       PACKAGE0_SIZE 3395584
     PACKAGE0_EXTENT 3396792
    PACKAGE1_VERSION 1000020
         PACKAGE1_ID Flash-Image-Usr-Local-NAND-Telefonica-Broadcom-ComtrendCT7007-1.0.0r20
       PACKAGE1_SIZE 12828672
     PACKAGE1_EXTENT 12829894
    PACKAGE2_VERSION 4111812
         PACKAGE2_ID Flash-Image-Usr-MediaBrowser-NAND-Telefonica-Broadcom-ComtrendCT7007-4.11.18r12
       PACKAGE2_SIZE 11804672
     PACKAGE2_EXTENT 11805910
    PACKAGE3_VERSION 1000030
         PACKAGE3_ID Flash-Image-Usr-MediaServer-NAND-Telefonica-Broadcom-ComtrendCT7007-1.0.0r30
       PACKAGE3_SIZE 1015808
     PACKAGE3_EXTENT 1017042
    PACKAGE4_VERSION 2061836
         PACKAGE4_ID Flash-Image-RomFS-NAND-Telefonica-Broadcom-ComtrendCT7007-2.6.18r36
       PACKAGE4_SIZE 3796297
[root@stb:/] $ 

hdcp

No aparecen strings que permitan identificar algún contenido.

MAC_address

Tiene grabada la dirección MAC Address 4 veces.

00000000  00 00 00 00 00 00 00 84  00 00 00 00 64 68 0c 99  |............dh..|
00000010  88 77 00 00 64 68 0c 99  88 77 00 00 64 68 0c 99  |.|..dh...|..dh..|
*
00000040  88 77 00 00 64 68 0c 99  88 77 00 00 ff ff ff ff  |.|..dh...|......|
00000050  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00000080  ff ff ff ff ff ff ff ff  ff ff ff ff c4 c4 ff ff  |................|
00000090  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
0001f800

reserve

Todo el contenido esta a ff.

secure_storage

Input configuration: 544C464E 335A7A6F 71324334 61313945 32343739

Data Section Value:    000000000000000000000000544c464e335a7a6f713243346131394532343739

CRC for DS =    5d7bc48e

Se trata de una comprobación de CRC para una entrada determinada, esta entrada podría ser los diferentes CRC de cada archivo, pero no es así.

CRC de cada archivo.

72fa09c4    cfe.bin
a702aa51    cfe_config.bin
cf63d352    hdcp
bb12aaf8    MAC_address
d64cd5de    reserve
0d2d27ed    secure_storage

Después de este análisis, parece complicado realizar modificaciones en el bootloader, está deshabilitado el prompt del CFE y cifrado. Tal vez se pueda hacer alguna cosa con la configuración cfe_config y el comando cfe_config