El primer capítulo lo dedicamos a identificar componentes presentes en la carcasa y la placa del router Technicolor TD5130. Ahora utilizaremos ese análisis previo para extraer el firmware interactuando de manera directa con la memoria flash. En los puntos en los que sea necesario ampliar teoría básica, introduciremos apartados específicos para ello.
La entrada actual busca desarrollar un método de acceso al dispositivo que, si bien no es el más sencillo, resulta útil y no requiere un nivel muy elevado de conocimientos.
Si todavía te estás preguntando si es el mejor sitio para empezar, tengo la razón definitiva: dime que no queda cojonudo tener en la mesa de trabajo una placa con un montón de clips y cables conectados, y que no haya – esperemos – nada en llamas.
¿Firmware?
El firmware es un elemento de software que controla y monitoriza el hardware a bajo nivel. Está presente en prácticamente todos los equipos, y, en el caso de los sistemas operativos embebidos, en muchas ocasiones es todo el software que incluye. Se almacena en memoria no volátil, persistente ante pérdidas de corriente, apagado, etc.
Entre los elementos que componen el firmware podemos encontrar el kernel, uno o más bootloaders, y un sistema de archivos que sirva de base para las aplicaciones de usuario.
Herramientas necesarias
Para llevar a cabo este trabajo, dispondremos de las siguientes herramientas:
- Router Technicolor TD5130: evidentemente, necesitamos acceso físico al router.
- BusPirate v3: interfaz de comunicación USB a distintos puertos y protocolos, desarrollado por Dangerous Prototypes (https://www.seeedstudio.com/Bus-Pirate-v3-6-universal-serial-interface-p-609.html – 27.15$)
- BusPirate Snake Cable: cable compatible con BusPirate v3 y terminales tipo DuPont (https://www.seeedstudio.com/Bus-Pirate-Cable-p-932.html – 4.39$)
- Microclips de conexión IC de 0.13mm de diámetro: para conectar a cada pin de la memoria flash. Sería posible utilizar otros métodos, como una pinza IC formato SOP8, pero lo he probado y no he conseguido que funcione. Además, creo que los clips son más apropiados, ya que no requieren una herramienta específica para cada formato (https://www.amazon.es/gp/product/B07TJ73ZXF/ref=ppx_yo_dt_b_asin_title_o03_s00?ie=UTF8&psc=1 – 19.30€)
- Flashrom: software que permite identificar, leer, escribir y borrar contenido de diversos chips flash mediante interfaces SPI (https://www.flashrom.org/Flashrom).
Recolección de información
Hasta el momento tenemos identificados los componentes principales del circuito. Para entender su papel en el sistema, y las posibilidades que nos ofrecen para su análisis, es de vital importancia conocer las especificaciones técnicas, o datasheets. Unos buenos recursos online para buscar esta información son, además de Google, https://www.datasheets360.com/ o https://www.alldatasheet.com/.
En el caso de la CPU resulta un tanto complicado, ya que el datasheet de Realtek no es de dominio público. Sin embargo, encontramos fácilmente el de la memoria RAM (https://esmt.com.tw/upload/pdf/ESMT/datasheets/M12L64164A(2Y).pdf) y, el que nos interesa para este trabajo, el de la memoria flash. Inspeccionando el chip a fondo se puede observar que se trata de la variante M2I-12G:
Descargamos el datasheet (https://www.datasheets360.com/pdf/- 6775360815599092023?query=25L3206E&pqid=103332876) y comprobamos que se trata de una memoria flash de 4MB (1024 sectores de 4KB), compatible con Serial Peripherial Interface (SPI). Además, de entre todas las opciones propuestas por el fabricante, en nuestro caso la configuración de pines del dispositivo es SOP8, lo que quiere decir que expone, de manera más o menos accesible, 8 pines a los que conectarnos siguiendo una disposición prácticamente estándar de los mismos.
Chip packaging
Los chips a menudo tienen varios modelos que, pese a compartir caracterísiticas y diseño lógico, presentan diferentes formatos para acomodarse a diferentes tipos y tamaños de placas. Esto se define como «packaging«, y existen ciertos esquemas estandarizados, como Small-Outline Package (SOP), Dual In-line Package (DIP), Column Grid Array (CGA), Pin Grid Array (PGA), etc.
Para más información (cómo no), Wikipedia: https://en.wikipedia.org/wiki/List_of_integrated_circuit_packaging_types
De todos modos, para evitar provocar daños al componente, comprobaremos en el datasheet si se especifica la funcionalidad de cada PIN:
El punto negro que se ve en la esquina superior izquierda del esquema indica la posición del primer pin, y se corresponde con una pequeña muesca en el propio chip.
Pero, espera un segundo… ¿qué era eso de SPI?
Serial Peripherial Interface
SPI es un protocolo de comunicación síncrono full-duplex, utilizado en esquemas con dispositivos cercanos (como componentes en una placa, o puertos de depuración de sistemas embebidos). Fue desarrollado por Motorola en los años 80, y se ha convertido en un estándar.
Se basa en un modelo Maestro-Esclavo, con un sólo maestro y uno o más esclavos conectados en el mismo bus. Utiliza un esquema de 4 hilos con señales distintas:
Las señales lógicas son las siguientes:
– SCLK: Serial Clock (output desde el Master)
– MOSI: Master Output Serial Input (data output desde master)
– MISO: Master Input Serial Output (data output desde slave)
– SS/CS: Slave Select / Chip Select (output desde master).
En configuraciones con un sólo dispositivo esclavo, el pin SS puede enviar únicamente una señal plana si el esclavo lo permite. Otros dispositivos requieren que se use una señal específica para iniciar su funcionamiento (por ejemplo, el covertidor ADC Maxim MAX1242, que requiere una caída de señal en el pin SS para iniciar la conversión).
Más info: https://en.wikipedia.org/wiki/Serial_Peripheral_Interface
Ya tenemos la base teórica para conectarnos de manera segura al chip . En nuestro caso, ya que queremos conseguir el firmware y la configuración del dispositivo, con leer será suficiente, pero si lo quisiéramos modificar y grabar sería posible siguiendo un proceso muy similar (aunque, dependiendo del sistema y de sus protecciones, puede ser relativamente complejo y con el riesgo de dejar el dispositivo inutilizable total o parcialmente).
Conexión con la memoria flash
Si atendemos a las recomendaciones de conexión propuestas por flashrom entre BusPirate y el chip compatible SPI, necesitaremos acceder a los siguientes pines:
- 2 (Direct/Serial Output)
- 4 (ground)
- 5 (Direct/Serial Input)
- 6 (Clock)
- 8 (VCC)
Conectamos los clips siguiendo las indicaciones:
Ahora, los clips al snake de BusPirate. Este cable sigue un código de colores, como indican en su web:
Es importante, en este punto, tener muy claros los pines de entrada y salida, y el punto desde el que los “miramos”. Como se puede ver en el cuadro de la documentación de flashrom, el pin “Serial Input” del chip se corresponde con el cable “Master Output Serial Input” de BusPirate, y el pin “Serial Output” con el cable “Master Input Serial Output”:
En la foto anterior hay que interpretar el código de colores de los cables, no de los clips (no tengo clips con tantos colores, por desgracia). Con los terminales de los clips tan pequeños es muy poco probable, pero, aun así, es importante en este punto asegurarse que ningún clip hace puente entre dos pines del chip, ya que lo podríamos dañar.
Dump del contenido de la memoria flash
Ha llegado, por fin, el momento de conectar el BusPirate al ordenador, y comprobar que podemos comunicarnos correctamente con la flash. Conectamos el cable USB, y lanzamos flashrom en modo escáner, que realiza una lista de pruebas para intentar detectar automáticamente el modelo de chip utilizando la interfaz SPI de BusPirate:
No ha habido suerte. Flashrom no ha sido capaz de detectar el chip al que estamos conectados.
En este punto, hay varias cosas que podemos comprobar. Ya que conocemos el modelo de chip al que estamos conectados, podemos probar la opción verbose del programa, que lista cada una de las pruebas que realiza, filtrando por nuestro identificador de chip, a ver si lo encontramos entre los tests lanzados:
Efectivamente, es capaz de detectar dicha memoria. Por tanto, puede tratarse de un problema en la conexión de los pines. Tras revisar que cada clip está correctamente conectado y repetir la prueba (con el mismo resultado), probamos a añadir el pin “Chip Select”, conectamos un nuevo clip y lo enchufamos al cable blanco de BusPirate. Tras esto, relanzamos la prueba inicial y…
Los más avispados ya se habrán dado cuenta de lo que ha pasado (yo no lo hice). Atendiendo a la especificación de SPI, el pin Chip Select es utilizado para que el dispositivo maestro envíe una señal de activación al dispositivo esclavo con el que quiere interactuar en esquemas de bus compartido.
Si comprobamos el datasheet del chip de memoria, en la descripción del modo de operación encontramos lo siguiente:
Por lo tanto, el pin Serial Output de la flash permanece en un estado de alta impedancia (a efectos prácticos, como si estuviera desconectado) hasta que se envía una caída de voltaje en el pin Chip Select. En la primera prueba, al tener el pin desconectado, no devolvía ninguna señal como respuesta a las pruebas enviadas por flashrom. Igual deberíamos leernos la especificación antes de lanzar las pruebas, ¿no?
Y, finalmente, vamos a intentar leer el contenido de la memoria flash. Para esto, utilizamos las opciones “-c” para especificar el modelo de chip y “-r” para indicar operación de lectura de toda la memoria, pasando como parámetro el nombre del archivo de salida:
Este proceso es extremadamente lento (aproximadamente 12 minutos en mi caso), así que damos las gracias al monstruo espagueti volador por que se traten sólo de 4MB, nos preparamos un café, y esperamos que termine de volcar la memoria.
Una vez completado, podemos comprobar que el contenido que hemos descargado tiene un formato conocido, en el que podemos encontrar de un primer vistazo, al menos, el sistema de archivos del router:
8 – Conclusiones
Llegados a este punto hemos cumplido el objetivo inicial propuesto, y tenemos lo necesario para realizar un análisis en profundidad del contenido del router. Para próximas entregas quedarán otros métodos de conseguir esta misma información (dump mediante JTAG, acceso mediante interfaz serial al sistema de archivos y volcado del mismo, etc), así como qué hacer con ella una vez se ha conseguido (reversing de aplicaciones, modificación del firmware, etc).
Como pequeño cliffhanger, algo de información que se puede extraer directamente en este punto:
Espero que no haya sido demasiado espeso, y que no os carguéis nada intentando repetirlo.
¡Hasta la próxima!
Eriatarka.