Cabecera blog ciberseguridad

Hardware hacking – Chip-off para principiantes

Introducción al hardware hacking

Antes de empezar manos a la obra con hardware hacking vamos a hacer una pequeña introducción sobre las memorias flash, un elemento que vamos a encontrar en casi cualquier placa objeto de análisis. Las memorias flash son memorias principalmente de lectura (read-mostly memory), creada como una variación de las memorias EEPROM tradicionales. Son utilizadas como memoria ROM en las BIOS de los computadores y en diversos productos electrónicos, incluidos los pendrives USB. Uno de sus usos más habituales es contener el firmware que será ejecutado por el microcontrolador en muchos productos electrónicos, por lo que su volcado en un archivo binario será útil para el estudio de su funcionamiento.

Existen varias técnicas de hardware hacking para efectuar el volcado de la memoria flash. Si tenemos suerte, la placa a analizar podría contener puertos de depuración (JTAG, SWD…) con los que poder interactuar, realizando incluso una ejecución paso a paso del firmware y volcarlo. En otros casos estos puertos podrían no existir, pero la memoria flash podría ser externa y estar expuesta. En estos casos, algunas programadoras EEPROM incluyen unas pinzas que se pueden conectar directamente a la memoria flash soldada en la placa, sin tener que extraerla.

Sin embargo, en muchos otros casos puede suceder que no quede más remedio que tener que extraer la memoria en cuestión. Estas memorias son en su práctica totalidad de montaje superficial (SMD) por lo que el empleo de un desoldador de succión no suele ser de mucha utilidad. Aunque se ha documentado el empleo de malla de soldar y un estañador para eliminar el estaño de este tipo de componentes y extraerlos, esta técnica está limitada por el tamaño de la soldadura y de la punta del estañador, siendo indicada para casos en los que la cantidad de estaño es grande, o cuando los componentes están soldados a la placa mediante agujeros pasantes (THT). En el resto de los casos, el empleo de una estación de aire caliente suele ser una solución mucho más adecuada.

En este artículo se detalla la extracción de las memorias flash de dos decodificadores de televisión por satélite previamente analizados durante las investigaciones de Tarlogic sobre   protocolos IKS (https://www.youtube.com/watch?v=dCkUN5gojT8), empleando la técnica de aire caliente. Para ello será necesario:

  • Estación de aire caliente: incluye una pistola de aire caliente y una plataforma de precalentamiento.
  • Material de soldadura: pinzas, una lupa y flux de soldadura para limpiar los circuitos.
  • Programador de memorias EEPROM.
Estación de soldadura hardware con precalentador
Estación de soldadura con precalentador
Programadora de memorias EEPROM
Programadora EEPROM

Hardware hacking – Chip-off

Localización de memorias flash

El primer paso de nuestro hardware hacking es siempre identificar el circuito integrado correspondiente a la memoria flash.

hardware con Memoria Winbond W25Q128FVFG
Memoria Winbond W25Q128FVFG
placa con Memoria GigaDevice GD25Q32B
Memoria GigaDevice GD25Q32B

Puesto que a simple vista estas suelen ser indistinguibles de cualquier otro circuito integrado, es conveniente buscar los datasheets de aquellos componentes sospechosos de ser una memoria flash haciendo una simple búsqueda en Google de la numeración impresa en el encapsulado.

Operación de la estación de aire caliente

La operativa de estas estaciones es sencilla: se dirige un chorro de aire a una temperatura elevada (del orden de los 200º C) hacia el componente que se desea extraer, de modo que las soldaduras se funden y se puede extraer el componente con pinzas. No obstante, parámetros como la temperatura del aire, su velocidad o la distancia de la boquilla deben ajustarse en base al componente que se quiere extraer.

Otro aspecto importante a tener en cuenta es el efecto del calentamiento diferencial en la placa. Cuando se aplica un chorro de aire caliente a una placa a temperatura ambiente, gran parte del calor se distribuye por las zonas más frías, haciendo que el calentamiento de la zona de interés sea poco eficiente.  Puede ser tentador elevar la temperatura del chorro, pero esto peligroso: se somete al componente a un mayor estrés térmico y aumenta del gradiente de temperaturas en la placa. La diferencia de temperaturas en la placa provoca que la dilatación térmica sea diferente en distintos puntos, generando tensiones que podrían dañarla.

La solución es el precalentamiento de la placa, para lo que existen diferentes técnicas. En este ejemplo se emplea una estación de aire caliente MLINK H6, que cuenta con una placa de infrarrojos bajo el circuito.

Para desoldar un componente de una placa de circuito impreso, se coloca la placa sobre la plataforma de precalentamiento y se ajusta su posición, de forma que quede fijo bajo la pistola de aire caliente.

Pistola sobre circuito integrado
Pistola sobre circuito integrado

Se inicia el precalentamiento, y se espera a que la plataforma alcance la temperatura indicada. La temperatura óptima de operación depende del tamaño del componente, del material de soldadura y del estado del circuito. En este caso, se han realizado algunas pruebas con placas antiguas extrayendo componentes pequeños y circuitos integrados.

Para la mayoría de componentes pequeños, una temperatura de 240ºC es suficiente, aunque los condensadores suelen costar algo más de tiempo. En placas antiguas o con diferente material, puede ser necesario aumentar la temperatura hasta los 280ºC. En cualquier caso, el uso de flux puede ayudar a bajar la temperatura necesaria y prevenir daños.

Los circuitos integrados más grandes requieren una temperatura algo más alta, entorno a los 280ºC y hasta los 300ºC. El uso de boquillas con la forma y orientación adecuadas para la pistola suele ser de gran ayuda. Además, se ha encontrado útil bajar la altura de la pistola para los circuitos integrados de mayor superficie, aunque con precaución para no dañar ningún componente hardware. En casos en los que la densidad de componentes sea demasiado alta y sea imposible dirigir el chorro de aire caliente a un único componente, se pueden cubrir los componentes circundantes con cinta térmica para evitar su sobrecalentamiento.

Cinta térmica
Cinta térmica

Extracción de los componentes hardware

Cuando la plataforma indique que se ha alcanzado la temperatura, se enciende la pistola de aire caliente sobre el componente. Se debe mantener el calor un máximo de 20 o 30 segundos, según se ha podido comprobar en las pruebas, hasta que la extracción con las pinzas pueda realizarse sin esfuerzo.

Para componentes y circuitos integrados pequeños, se colocan las pinzas verticalmente sobre el componente y se sujeta sin tocar los pines. Para componentes de mayor tamaño, en los que las pinzas no puedan ejercer una sujeción segura, se colocan en posición horizontal en uno de los laterales, sin interferir con los pines, y se ejerce una leve presión. El resultado debe ser limpio, sin dejar restos de pista sobre los pines del componente.

Memoria Winbond extraída
Memoria Winbond extraída

Hardware hacking – Volcado de Memoria de un producto IoT

Elección de Programador en la auditoría de seguridad hardware

Para el volcado de la memoria flash, se ha elegido un programador de EEPROM EZP2019+, debido a su sencillez y bajo coste. En función del encapsulado de la memoria, se debe disponer de un adaptador adecuado al programador. En este caso, se utiliza un adaptador SOP16 300mil para la memoria Winbond (16 pines) y uno SOP8 209mil para la memoria GigaDevice (8 pines). El programador dispone también de un CD con los controladores y el software necesario en un fichero ZIP.

Realizando el volcado del firmware para hacer ingeniería inversa

Cada programador tiene sus propias particularidades, y no existe un software que valga para todos. En el caso del EZP2019, además de la instalación del software del CD, fue necesario instalar los controladores correspondientes. La herramienta (contenida en el ejecutable EZP2019+.exe) recuerda a un editor hexadecimal con distintas opciones extra para manipular el programador:

Programador EZP2019
Programador EZP2019

Afortunadamente, las memorias extraídas son soportadas directamente por la aplicación, lo cual ahorra el trabajo de establecer sus parámetros manualmente. Para este caso, sólo ha sido necesario especificar:

  • Tipo de memoria: puede ser EEPROM, de las series 24, 25 o 93, o memoria flash, que es la utilizada en este ejemplo.
  • Fabricante: Winbond y GigaDevice.
  • Modelo: W25Q128 y GD25Q32B respectivamente.

Por otro lado, la falta de documentación de estos dispositivos es un gran obstáculo para su utilización.  Además del correspondiente folleto de garantía y una serie de manuales en PDF del software de volcado (y no del programador), no se encontraron indicaciones sobre el procedimiento para conectar el integrado al programador. En particular, aunque se puede intuir la aplicación de los adaptadores (en el caso de la WinBond , necesitaremos el único adaptador disponible de 16 pines), la orientación adecuada ha tenido que deducirse mediante pruebas, con el riesgo de dañar el componente.

Orientación del circuito en el adaptador
Orientación del circuito en el adaptador

La conclusión ha sido que el primer pin, indicado comúnmente por un círculo en el encapsulado, debe situarse en la esquina marcada con un círculo similar en el adaptador, y el adaptador debe conectarse al programador de forma que el círculo quede orientado hacia arriba. Se puede comprobar que la orientación es la correcta haciendo clic en el botón “Test” del software de volcado, el cual mostrará un error en caso contrario.

Si bien la herramienta hace un buen trabajo configurando los parámetros de lectura del dispositivo, es buena idea comprobar que el tamaño de la memoria, el tamaño de página y la velocidad de lectura y escritura son correctos. Estos parámetros se pueden encontrar en el datasheet correspondiente. En este caso, la memoria Winbond tiene una capacidad de 16MB y un tamaño de página de 256 bytes, mientras que la memoria GigaDevice tiene una capacidad de 4MB y un tamaño de página  también de 256 bytes. En ambos casos se ha comprobado que una velocidad de 12MHz no produce errores en la lectura.

Para leer la memoria conectada, simplemente se pulsa sobre Read en la barra de herramientas y, si todo es correcto, comenzará a leer mostrando el progreso en la barra inferior.

Lectura de la memoria Winbond
Lectura de la memoria Winbond

En caso de que la frecuencia sea demasiado alta, la lectura puede fallar y mostrar datos erróneos. Terminada la lectura, se puede verificar su corrección con el botón Verify en la barra de tareas y visualizar el contenido de la memoria en el panel central. Para guardar el volcado de memoria, se pulsa sobre Save y se indica el nombre del fichero.

Últimas consideraciones

Aunque se podría pensar que el volcado del contenido de la memoria a un fichero es la fase final antes de realizar la ingeniería inversa del firmware, un pequeño preanálisis de los datos puede ser deseable.

Una de las primeras cosas que nos gustaría verificar es si el firmware está comprimido o cifrado, algo que podemos hacer lanzando un análisis de entropía con herramientas como binwalk. Si la entropía es baja en general, también podría ser interesante comprobar el orden de los bytes (también conocido como endianness), puesto que las palabras pueden estar invertidas si el orden de los bytes de la memoria no es el del procesador embebido. Esto se puede hacer buscando cadenas ASCII en el firmware e intentar leerlas. En particular, si el texto imprimible es ilegible, pero se caracteriza por palabras con alguna letra mayúscula fuera de lugar (cosas como “nihTl sg eokisiht.”), es posible que el orden de bytes de las palabras de cierta potencia de 2 esté invertido.

Descubre nuestro trabajo y nuestros servicios de ciberseguridad en www.tarlogic.com/es/

En TarlogicTeo y en TarlogicMadrid.