Tabla de contenidos:
—El hardware hacking: qué es y para qué se utiliza
—Para qué extraer y analizar el firmware de un dispositivo
—Técnicas para extraer el firmware de un dispositivo
—Extracción de firmware de dispositivos usando JTAG:
—Cómo funciona la interfaz JTAG
—Qué podemos hacer en la práctica con JTAG
—Cómo extraemos un firmware utilizando JTAG
—Conclusión
El hardware hacking: qué es y para qué se utiliza
Si bien hace un tiempo hablamos de los gadgets más utilizados en el hardware hacking, es importante destacar que en el mundo de la ciberseguridad el hardware hacking no se limita al uso de dispositivos electrónicos para realizar pruebas ofensivas sobre distintos sistemas. También está vinculado con el uso de técnicas para explotar fallos de seguridad y manipular el hardware de un dispositivo electrónico para alterar su funcionamiento, agregar nuevas funcionalidades, obtener información del equipo o vulnerar su seguridad.
Las técnicas de hardware hacking sirven para realizar ingeniería inversa y manipular el dispositivo que se quiere analizar. Pueden ser utilizadas por investigadores de seguridad para descubrir vulnerabilidades en dispositivos electrónicos y mejorar su seguridad, pero también por atacantes para acceder a sistemas o información protegida.
El hardware hacking puede involucrar la manipulación física de componentes electrónicos, la ingeniería inversa de circuitos y dispositivos, la soldadura de componentes, la creación de interfaces personalizadas y la extracción de datos de dispositivos de almacenamiento. Todas estas técnicas requieren conocimientos especializados en electrónica y programación, y pueden ser peligrosas si no se realizan con cuidado, ya que pueden dañar los dispositivos que se deseen analizar o poner en peligro la seguridad de la persona que lo realiza.
En el hardware hacking también se utilizan técnicas asociadas al hardware forense como parte del proceso de ingeniera inversa sobre componentes electrónicos de un dispositivo. Esto significa que se utilizan herramientas y técnicas especializadas para recuperar, analizar y preservar datos de dispositivos electrónicos. Esto puede incluir la extracción de datos de discos duros, el análisis de datos en la memoria RAM y la recuperación de datos eliminados.
Sin lugar a dudas, estas técnicas más específicas son importantes a la hora de investigar delitos informáticos. Por ejemplo, en casos donde es necesario obtener datos de un dispositivo para la investigación, para recuperar de datos perdidos debido a fallos de hardware o software, o cuando la utilización de las técnicas del hardware forense deben seguir las normas y procedimientos adecuados para garantizar la integridad y autenticidad de los datos recuperados, y evitar la alteración de la evidencia digital.
A la hora de analizar un dispositivo electrónico es necesario estudiar su funcionamiento y cada una de las partes que lo componen, pero es un hecho que cada dispositivo electrónico tiene su propia naturaleza y estructura de funcionamiento. Si bien el objetivo de este artículo no es abordar todas las posibles variantes tecnológicas que existen y sus técnicas de análisis asociadas, es un hecho que hoy día la mayor parte de dispositivos electrónicos contienen componentes comunes. Un ejemplo de estos componentes comunes son los microcontroladores, que a través del firmware se encargan de controlar y administrar la operabilidad de los dispositivos electrónicos y también gran parte de sus funciones.
Siguiendo en esta línea, a continuación veremos algunas cuestiones vinculadas al análisis del firmware de microcontroladores que son fundamentales a la hora de aplicar hardware hacking.
Para qué extraer y analizar el firmware de un dispositivo
Un firmware es un programa que se ejecuta de manera dedicada y con un propósito específico en un microcontrolador o microprocesador. Generalmente, se almacena en un dispositivo de memoria persistente, como una NAND/NOR flash o EEPROM, y el proceso de extracción implicara leer y copiar la imagen del firmware almacenada en la memoria del dispositivo a un archivo en nuestra computadora.
Este proceso de extracción de la imagen del firmware también se denomina dumping o snarfing y es de vital importancia para comprender cómo funciona un dispositivo, ya sea un disco duro, un router, una cámara IP o cualquier otro dispositivo que utilice microcontroladores (algo que ocurre en la mayoría de dispositivos electrónicos).
En este sentido, extraer y analizar la imagen del firmware del microcontrolador de un dispositivo electrónico nos permite comprender su funcionamiento y por lo tanto, nos ayuda en nuestro objetivo de estudio que, como dijimos anteriormente, puede ser desde detectar vulnerabilidades, mejorar o cambiar el comportamiento del dispositivo, entre otras.
Técnicas para extraer el firmware de un dispositivo
Para la extracción del firmware de un dispositivo electrónico se pueden utilizar varias técnicas. Antes de decidir que vía tomar para comenzar este proceso, uno de los puntos esenciales es asegúrese de que la imagen del firmware no esté disponible en el sitio web del fabricante.
Muchos fabricantes de dispositivos publican imágenes de firmware actualizadas en sus sitios web para que los clientes puedan descargar y actualizar el dispositivo. En este caso, el esfuerzo para extraer el firmware es nulo, ya que no tendremos que hacer otra cosa que descargarlo del sitio web del fabricante.
Ahora bien, una vez que tenemos acceso físico al dispositivo, una técnica para extraer el firmware es leer directamente la memoria de almacenamiento del dispositivo. Para ello podemos identificar el chip de memoria de la placa, retirarlo, soldarlo en otra placa y extraer el firmware. Si bien funciona, puede ser bastante engorroso y quizás un poco arriesgado, ya que existe la posibilidad de quemar el chip de memoria durante el proceso de extracción.
Una técnica menos riesgosa es leer la memoria de almacenamiento del dispositivo a través de una conexión al gestor de arranque o al sistema operativo del dispositivo. Por ejemplo, con acceso al gestor de arranque (a través de una conexión serie), podemos intentar leer la memoria del dispositivo y enviar los datos a nuestra máquina. Asimismo, con acceso a una terminal de línea de comandos en el sistema operativo (serial, ssh, etc.) y con privilegios, podemos intentar volcar la memoria de almacenamiento del dispositivo y enviarla a nuestra máquina.
Como podemos observar, dependiendo de la situación se pueden utilizar diferentes técnicas para extraer el firmware de un dispositivo. Si ninguna de estas técnicas es viable, la interfaz JTAG puede ser nuestra mejor aliada. A continuación explicamos qué es esta interfaz.
Extracción de firmware de dispositivos usando JTAG:
JTAG (Joint Test Action Group) es una interfaz de hardware físico que permite, entre otras cosas, extraer la imagen del firmware de los dispositivos electrónicos. Fue creada en 1985 para reemplazar a los antiguos sistemas de testing para las placas de circuitos impresos (PCB), conocidos como bed-of-nails, y es parte del estándar IEEE 1149.1 para probar las placas de circuito impreso durante el proceso de fabricación.
Con el tiempo, JTAG se ha convertido en una de las interfaces más populares para probar circuitos electrónicos. También fue añadiendo otras funciones, como la depuración y la grabación de dispositivos flash. Actualmente, esta interfaz está disponible en la mayoría de los procesadores y microcontroladores de diferentes arquitecturas, como ARM, x86, MIPS y PowerPC.
Cómo funciona la interfaz JTAG
Ahora bien, veamos a continuación un poco más en detalle cómo funciona la interfaz JTAG a bajo nivel .
Aunque hay algunas variaciones del estándar, los fabricantes de los chips suelen implementar la interfaz JTAG a través de cuatro pines obligatorios (TDI , TDO , TCK , TMS) y un pin opcional (TRST):
- TDI (Entrada de datos de prueba): entrada de datos.
- TDO (Test Data Out): salida de datos.
- TCK (Test Clock): reloj cuya frecuencia máxima depende del chip (normalmente de 10MHz a 100MHz).
- TMS (Test Mode Select): pin para controlar la máquina de estado JTAG.
- TRST (Test Reset): pin opcional para resetear la máquina de estados JTAG.
Los pines de la interfaz JTAG están conectados internamente al chip a través de un módulo llamado TAP (Test Access Port).
La interfaz TAP implementa el protocolo de comunicación JTAG básico y varios TAP se pueden conectar simultáneamente en una arquitectura de tipo Daisy Chain.
La interfaz TAP implementa una máquina de estados finitos (16 estados) que permiten acceder a un grupo de registros (IR, DR) para instrumentar el chip. El control de esta máquina de estados se realiza a través de los pines TMS y TCK. A través de esta máquina de estados, es posible seleccionar una operación a través del registro IR (Registro de Instrucciones) y pasar parámetros o verificar el resultado a través del registro DR (Registro de Datos).
Normalmente el fabricante del chip define el tamaño del registro IR y el número de instrucciones admitidas. Por ejemplo, un registro IR de 5 bits admitirá hasta 32 instrucciones.
Cada instrucción tiene su propio DR (Data Register), que tiene un tamaño variable. Tres instrucciones están definidas por el estándar JTAG y deben ser implementadas por el fabricante (BYPASS, EXTEST, SAMPLE/PRELOAD). Otras instrucciones son opcionales, pero también suelen implementarse (p. ej., IDCODE).
- BYPASS: instrucción que selecciona un registro de 1 bit que rota de TDI a TDO. Muy útil para probar la interfaz JTAG.
- EXTEST: instrucción que selecciona el BSR (Boundary Scan Register) para leer y cambiar el estado de los pines.
- SAMPLE/PRELOAD: instrucción que selecciona el registro BSR (Boundary Scan Register) para leer el estado de los pines.
- IDCODE: instrucción que selecciona el registro de identificación del dispositivo (32 bits) que contiene la identificación del chip.
Además de las instrucciones definidas por el estándar, el fabricante del chip puede implementar otras instrucciones según sea necesario. De esta forma, muchos fabricantes amplían la interfaz JTAG con funciones de depuración y acceso a memoria.
La información sobre las instrucciones JTAG admitidas y los pines en un chip generalmente se documentan en un archivo llamado BSDL (Lenguaje de descripción de exploración de límites), y también en un subconjunto llamado VHDL (Lenguaje de descripción de hardware).
Qué podemos hacer en la práctica con JTAG
Veamos que podemos hacer en la práctica con esta interfaz sobre el firmware de un dispositivo.
Si bien con JTAG podemos controlar la ejecución del firmware (detener la ejecución, inspeccionar la memoria, configurar puntos de interrupción, ejecutar el código paso a paso, etc). También podemos inspeccionar el estado del procesador y sus registros, leer y escribir en la memoria y acceder a cualquier dispositivo de E/S conectado al procesador.
A través de una función llamada Boundary Scan, la interfaz JTAG permite el acceso a todos los pines del chip y de esta forma podemos leer y escribir individualmente en cada pin y en consecuencia manipular los periféricos conectados al procesador/microcontrolador (GPIO, memoria, flash, etc.).
Concretamente, en la práctica con la interfaz JTAG podemos:
- Identificar información sobre el hardware (procesador, memoria, etc).
- Realizar volcado de la memoria RAM y obtener acceso a datos confidenciales, como contraseñas y claves criptográficas.
- Cambiar el comportamiento de los programas en tiempo de ejecución para obtener acceso privilegiado al sistema.
- Capturar datos confidenciales de dispositivos de hardware, como información almacenada en una EEPROM.
- Activar los periféricos y cambiar su comportamiento, como establecer o restablecer un pin de E/S.
- Y el punto central: volcar la memoria flash para extraer el firmware del dispositivo
Como vemos, la interfaz JTAG es perfecta para inspeccionar la ejecución del firmware, encontrar vulnerabilidades y explotar el dispositivo.
Y si a estas alturas te estas preguntando ¿por qué muchos fabricantes de hardware no eliminan o deshabilitan el acceso a ella si es tan insegura? La respuesta es concreta: porque es muy útil en la etapa de desarrollo y producción de hardware, ya que con este tipo de interfaz los desarrolladores pueden depurar el firmware que se ejecuta en el dispositivo de una manera práctica y sencilla y también pueden utilizarla como herramienta para programar y probar el dispositivos en producción.
Aunque también es un hecho que algunos fabricantes pueden adoptar contramedidas para dificultar el uso de la interfaz JTAG en el producto final, que incluyen ofuscación (como cortar pistas, quitar resistencias, etc.), reconfiguración de los pines JTAG en software, cifrado y validación de firma de la imagen del firmware, muchos otros fabricantes van más allá y deshabilitan por completo la interfaz JTAG a través de unos fusibles (bits internos del chip que, una vez programados, ya no se pueden cambiar). Pese a todas estas medidas, aun así es posible volver a habilitar la interfaz JTAG con técnicas como silicon die attack, lo cual demuestra que la seguridad es siempre una cuestión que está atada al tiempo, conocimiento y los recursos disponibles.
Cómo extraemos un firmware utilizando JTAG
En cuanto a los requisitos para la extracción del firmware utilizando JTAG, en la práctica es importante que tengamos algunos puntos presentes. Si bien esta publicación no incluye una prueba de concepto real, veamos los cuatro principales pasos que debemos tener en cuenta para extraer el firmware de un dispositivo usando JTAG:
- Identifica los pines de conexión JTAG.
- Prueba la conexión con un adaptador JTAG.
- Recopila información sobre el mapeo de memoria del chip.
- Extrae el firmware de la memoria flash.
Conclusión
Luego de esta introducción al hardware hacking creo que nos queda claro que estamos hablando de un universo amplio que involucra conocimientos interdisciplinarios entre electrónica, programación y otras áreas de conocimiento a fines. También queda claro que está lejos de limitarse al uso de dispositivos electrónicos para llevar a cabo ciberataques.
Si te gustó esta introducción, te alentamos a profundizar en el tema y por qué no, a llevar a la práctica esta información y extraer el firmwar