Cabecera blog ciberseguridad

OWASP FSTM, etapa 2: Obtención del firmware de dispositivos IoT

La obtención del firmware de dispositivos IoT se puede llevar a cabo de distintas formas

Durante la fase de análisis, hacerse con el firmware es fundamental. En este artículo se explican los posibles mecanismos para proceder a la obtención del firmware de dispositivos IoT y para recolectar otros datos de interés de la placa base del sistema empotrado

En la anterior etapa de la metodología se han recolectado datos sobre el dispositivo sin acceder al mismo (haciendo uso de fuentes abiertas). El objetivo de la etapa 2 de la metodología OWASP FSTM (Firmware Security Testing Metholodogy), es proceder a la obtención del firmware de dispositivos IoT en caso de que no se haya logrado en el paso anterior (obteniéndolo, por ejemplo, a partir de la web del fabricante).

No existe un único método válido para lograr la extracción de un firmware. Por ello, en este artículo se presentan diversas alternativas analizando sus pros y sus contras. El proceso de obtención del firmware de dispositivos IoT puede ser sencillo o muy costoso dependiendo del dispositivo a analizar.

Una de las fases clave durante esta etapa de la metodología OWASP FSTM es la identificación de puertos físicos de depuración y de chips de memoria ya que constituyen las vías más interesantes para la extracción del firmware. A lo largo del artículo se presentarán algunas recomendaciones y buenas prácticas para abordar este tipo de acciones.

Es importante comprender el flujo de trabajo que hay detrás de la extracción del firmware a todos los niveles. En ocasiones, aparecen limitaciones en el número de herramientas disponibles, ya que no siempre existen adaptadores para leer todas las memorias hardware. Por ello, comprender bien las bases que hay detrás de cada una de las acciones realizadas permitirá subsanar la carencia de ciertas herramientas y fabricar algunas propias si fuese necesario.

El foco de la etapa 2 de la metodología OWASP FSTM se centra en la obtención del firmware de dispositivos IoT para su posterior análisis. No existe un único camino comodín para la extracción del firmware que aplique a todos los dispositivos. Por ello, este tipo de acciones suele requerir en ocasiones un esfuerzo de creatividad y pensamiento lateral por parte del investigador.

Recomendaciones y buenas prácticas

  • Siempre es interesante disponer de más de un dispositivo físico del modelo que se quiere analizar ya que existe la posibilidad de que se dañe total/parcialmente durante la extracción del firmware (por ejemplo, al desoldar la memoria). También puede darse el caso de que sea necesario hacer uso de la misma placa del dispositivo IoT como placa de prototipado electrónico (asumiendo su posible perdida en función de la naturaleza de las pruebas).
  • En la mayoría de los casos las técnicas presentadas en este artículo serán suficientes para la extracción del firmware, no obstante, pueden existir dispositivos en el mercado que requieran de otro tipo de técnicas para la obtención de este.

Durante una auditoría de seguridad IoT, obtener el firmware es prioritario para poder realizar la mayor parte de las tareas posteriores.

Comprobación del funcionamiento del dispositivo

En primer lugar, antes de comenzar con la extracción, es necesario comprobar que el dispositivo funciona correctamente. Parece algo trivial, pero en ocasiones los dispositivos (incluso nuevos) pueden tener algún problema cuando se reciben. Los golpes y exposición al calor o la humedad pueden causar daños en los aparatos electrónicos durante su transporte y almacenamiento.

El investigador es responsable de decidir si este paso es adecuado para el tipo de análisis que se está realizando. Es importante resaltar que, en el caso de una investigación forense, conectar o desconectar el dispositivo puede llevar a la eliminación o modificación de evidencias…

Descarga del firmware de la página del fabricante

Como ya se trató en el artículo anterior, la manera más sencilla de obtener el firmware es desde la página web del fabricante. Si el fabricante no lo ha puesto a nuestra disposición, a continuación, se presentan otras alternativas.

Descarga directa del firmware

Siempre que se pueda, se debe revisar si el dispositivo es actualizable de manera remota. Esta suele ser una de las maneras más fáciles y rápidas de conseguir una copia del software interno de un dispositivo. En algunos casos se permite la descarga del firmware directamente vía web.

A modo de ejemplo, en el caso de este router la solución más rápida es acceder al menú de configuración y comprobar si hay actualizaciones pendientes.

Dependiendo de la tecnología usada, a veces este truco solo da resultado si hay actualizaciones pendientes. En algunos casos, si las peticiones de comprobación se hacen mediante Javascript, se pueden capturar las URLs y las respuestas a las peticiones de comprobación para obtener el firmware aun cuando nuestra versión de software sea la última.

La descarga directa es a veces la mejor opción para la obtención del firmware de dispositivos IoT

Interceptar comunicaciones para la obtención del firmware de dispositivos IoT

Otra posible opción, evitando la manipulación física del dispositivo, es auditar las comunicaciones. El objetivo es capturar las posibles actualizaciones de firmware / software en las comunicaciones.

En estos casos la guía OWASP ISVS (IoT Security Vertification Standard) es una gran aliada. Una posible forma de analizar las comunicaciones del dispositivo es Wireshark, ya que proporciona varias capas de filtrado que permiten agilizar gran parte del trabajo.

Una vez localizado el proceso de actualización, se podrían volcar los objetos de la comunicación a un archivo de firmware si este proceso no ha sido realizado con la encriptación adecuada.

La guía OWASP ISVS (IoT Security Vertification Standard) es una gran aliada

En algunos casos, los dispositivos usan comunicaciones inalámbricas para el proceso de actualización. Mediante el uso de un SDR (o radio definida por software) se pueden interceptar comunicaciones inalámbricas y proceder a su estudio.

Dependiendo del caso de estudio, existirá o no la posibilidad de demodular estas señales y extraer el firmware durante el proceso de actualización. Dos posibles programas que nos pueden facilitar esta tarea son GNU-Radio y SigDigger.

Mediante el uso de un SDR (o radio definida por software) se pueden interceptar comunicaciones inalámbricas

Acceso al hardware del dispositivo

Si los puntos anteriores han fallado, todavía se dispone de alternativas para obtener el firmware, pero será obligatorio analizar el hardware del dispositivo. El objetivo será identificar posibles medios para comunicarnos con este sin restricciones a la hora de leer su firmware.

En primer lugar, se procede a buscar la forma de desmontar el dispositivo. No existe un método único para esto. Algunas veces hay que localizar un tornillo escondido bajo una etiqueta, detrás de las patas de goma o incluso tendremos que desmontar el cristal de una pantalla… El objetivo es tener la placa disponible de manera que nos permita identificar todas sus partes.

Vista de la placa, útil para analizar el dispositivo

Identificación de candidatos de puertos de comunicación

Existen multitud de puertos de interés a la hora de leer el firmware de un dispositivo. A continuación, se lista en una tabla algunos ejemplos y guías generales que sirven como resumen de los puertos más comunes en dispositivos empotrados.

Las configuraciones mostradas en la tabla inferior son las más comunes. No obstante, cada fabricante puede optar por adoptar soluciones adaptadas a sus necesidades particulares. Por ello, la tarea de identificar estas conexiones no siempre se puede clasificar en una simple tabla y requiere un conocimiento más profundo de las herramientas que se puedan usar y de los protocolos en sí.

Cada fabricante puede optar por adoptar soluciones adaptadas a sus necesidades particulares

Algunos fabricantes optan por no exponer los puertos directamente. En algunos casos, no etiquetarlos se percibe como una medida de seguridad y en otros, la restricción de espacio simplemente no lo permite. En estos casos es probable encontrarse con testpoints que podrían contener algunos de estos puertos.

Utensilios para realizar la verificación de los puertos

Algunas de las herramientas más comunes que pueden ayudar a identificar los tipos de puertos se listan a continuación con algunos de sus usos.

Identificar los puertos de un dispositivo obligará a conocer como son los protocolos que se usan en esos puertos. A continuación, se dan algunas de las pistas que permiten simplificar este proceso, no una guía detallada de cómo hacerlo.

Multímetro multimetro

Puede medir tensiones, corrientes, continuidad y valores resistivos y capacitivos. En el modo de medición de continuidad nos permite identificar fácilmente los puntos de tierra (0 V). Muchos dispositivos ponen los trozos metálicos expuestos a tierra por motivos de regulación y muchos conectores tienen los contactos de tierra marcados y serigrafiados. Conociendo un punto de tierra podemos identificar que pines de un puerto están a tierra con el modo de continuidad.

En el modo de medida de tensión nos permite identificar qué pines de alimentación y a qué tensión operan. Podría servir como indicador si en algún punto de comunicación hay actividad (algunos puertos en reposo se encuentran en tensión y otros fluctúan) pero no es un uso totalmente fiable de esta herramienta.

Osciloscopio vista de un multímetro

Esta es una herramienta mucho más compleja y cara que el multímetro. Permite no solo medir la tensión en un puerto sino visualizar cómo esta tensión cambia en el tiempo. Gracias a esta herramienta se puede visualizar la evolución de una señal para tratar de identificar un protocolo concreto de los mencionados en la sección anterior.

El osciloscopio es una herramienta destinada a hacer análisis de señales analógicas. Si ya se conocen los voltajes de operación del protocolo gracias al uso del multímetro, dado que prácticamente todas las señales que se tratan este tipo de dispositivos son digitales, se recomienda usar un analizador lógico por motivos de coste y facilidad de análisis.

Analizador lógico analizador lógico

Al igual que el osciloscopio, un analizador lógico permite ver la evolución de una señal en el tiempo. El analizador lógico se distingue en que este último no permite hacer una medición directa de la tensión, solo permite hacer medidas digitales de una señal y transmitirá si la señal medida está en un valor lógico bajo o alto (0 o 1).

Esta reducción de funcionalidad con respecto al osciloscopio aporta grandes beneficios a este caso de uso. Reduce costes y dado que se trabaja con señales digitales, hacer el análisis del posible protocolo que encontrado se simplifica enormemente. Muchos de estos dispositivos traen software asociado que permite hacer un reconocimiento semi automático de los protocolos mencionados.

Conversor USB-UART Vista de un conversor USB-UART

Una vez hemos identificado un candidato para este protocolo, una manera de verificar la suposición es conectarse al puerto mediante un conversor. Su coste es muy bajo y simplifica interactuar con el puerto.

Depurador J-Link Vista de un Depurador J-Link

Al igual que con la UART, para otros protocolos podemos usar otros adaptadores. Muchos de estos depuradores soportan distintos protocolos como ICSP / JTAG / J-Link. Existen multitud de formatos en cuanto a pines, pero todos se basan en las mismas 6 señales de control y son los puertos que se usan para escribir o leer el firmware y depurarlo.

Ejemplo de identificación de puerto

En un dispositivo de pruebas se ha realizado una inspección visual de la placa. Se ha localizado un puerto que incluso se encuentra serigrafiado y que parece indicar que es un puerto serie.

Inspección visual de una placa

En esta ocasión, el mismo fabricante ha dispuesto leyenda para identificar los pines, que está situada junto al conector. Igualmente se procede a comprobar si el bus está alimentado y por tanto en funcionamiento.

Se pueden observar que entre el pin 2 y el 4 del puerto se miden 3,3 V (nótese que en los conectores el pin 1 siempre es el que tiene la marca exterior, en este caso el pin 1 está a la derecha del todo y coincide con la leyenda de positivo de alimentación). Esto coincide con la leyenda TX y GND respectivamente.

Se comprueba que entre GND y TX (envío de datos) existen 3,347 V durante el arranque. Concluyendo que es una UART-TTL y conectando al adaptador correspondiente con ayuda de las pinzas.

 

placa hardware iot con multímetroEn este punto se podría hacer un análisis y verificación del hallazgo de un puerto UART mediante el analizador lógico. Esto arrojaría la seguridad de que se trata de uno y se podría hacer un análisis de a qué velocidad está operando.

Dado que el fabricante ha serigrafiado el uso de cada pin y que se conoce que la tensión de operación es compatible con el adaptador USB-UART se procede a su conexión sin el análisis lógico intermedio para ahorrar tiempo.

adaptador usb uart para extraer el firmware

A recordar dos detalles en los buses UART-TTL:

  1. Las señales TX / RX necesitan una referencia común entre el circuito estudiado y el adaptador. Por eso es necesario conectar el negativo de alimentación (GND) en común a los dos circuitos.
  2. Las señales TX / RX se conectan cruzadas, o lo que es lo mismo, el TX del circuito escritor se conecta al RX del dispositivo lector y viceversa.

Una vez conectados se procede a detectar la velocidad del puerto, esto se puede hacer con un proceso de autodetección, generalmente las tasas más usadas son 9600, 57600 y 115200 bps. Docklight, Realterm o Coolterm son algunos de los programas más usados para interactuar con los adaptadores a UART.

En Realterm se configuró como se puede ver en la captura el interfaz USB / UART-TTL.

captura el interfaz USB / UART-TTL

Tras unos instantes se ve que el sistema de arranque del sistema es U-Boot.

cadena de arranque en u-boot firmware

En algunos casos, el cargador de arranque permite interrumpir el proceso de carga y pone a disposición del usuario una shell. Una de las funcionalidades comunes de los cargadores de arranque es permitir el volcado de memoria.

Si no se interrumpe el proceso de carga, en este caso de estudio, el dispositivo expone una Shell con este mensaje de bienvenida:

shell de firmware busybox

El investigador podría evaluar distintas medidas para hacer un volcado del firmware desde esta Shell. En este caso el firmware está basado en busybox y da permisos de administración. Una opción sería hacer un “cat” de los dispositivos de bloque en la carpeta “/dev” y expulsar el resultado en formato hexadecimal con “printf” para posteriormente reconstruir la imagen en nuestro PC.

Leer el firmware directamente de un componente del circuito

En otras ocasiones no se podrá acceder a ningún puerto. Será momento de disponerse a estudiar en profundidad la placa del dispositivo para explorar la obtención del firmware de dispositivos IoT. Se recomienda realizar un reconocimiento equivalente al que se muestra.

Estudio en profundidad de la placa del dispositivo IoT

Tras identificar la memoria flash se confirma que es el dispositivo de 8 pines con paso 1,27 mm (SOIC8). Este tipo de memorias se pueden leer con un lector EEPROM estándar con las pinzas para dispositivos en este formato.

lector EEPROM soic8

Su uso es sencillo como se mostró en este artículo.

La realidad en cuanto a memorias EEPROM es que existen infinidad de formatos, aunque los formatos más comunes se detallan en la tabla siguiente.

detalle de memorias eprom

Muchos lectores/programadores de EEPROM se controlan con un software bastante homogéneo. Normalmente dispone de un menú de selección de dispositivo. En algunos modelos el modelo de fabricante es crítico y en otros no. Por ello es relevante identificar el fabricante del chip de memoria a ser leído.

software de lectura de memoria eprom para obtener el firmware

En algunos casos los modelos de memoria no son estándares o no tienen soporte por el fabricante del lector de EEPROM. En estos casos una de las opciones es el diseño de un adaptador a medida.

Definitivamente no existe un único camino para realizar este trabajo. Disponer de herramientas y conocimientos específicos en electrónica facilita el proceso y la búsqueda de métodos alternativos.

Conclusiones

Siempre que sea posible, usar la opción software aunque el firmware descargado sea una actualización es posible que sea suficiente para conseguir realizar un análisis de seguridad.

Cuando el camino para obtener el firmware sea vía hardware, es necesario conocer la metodología, herramientas y dispositivos con los que se va a interactuar. Estos trabajos además de ser técnicamente más complejos requieren material y herramientas específicas para su consecución.

Con las técnicas expuestas, casi siempre es posible extraer un firmware, aunque no siempre será razonable el esfuerzo y coste material para según que dispositivo.

Referencias:

Más artículos de la serie OWASP

Este artículo forma parte de una serie de articulos sobre OWASP

  1. Metodología OWASP, el faro que ilumina los cíber riesgos
  2. OWASP: Top 10 de vulnerabilidades en aplicaciones web
  3. Análisis de seguridad en IoT y embebidos siguiendo OWASP
  4. OWASP FSTM, etapa 1: Reconocimiento y búsqueda de información
  5. OWASP FSTM, etapa 2: Obtención del firmware de dispositivos IoT
  6. OWASP FSTM, etapa 3: Análisis del firmware
  7. OWASP FSTM, etapa 4: Extracción del sistema de ficheros
  8. OWASP FSTM, etapa 5: Análisis del sistema de ficheros
  9. OWASP FSTM etapa 6: emulación del firmware
  10. OWASP FSTM, etapa 7: Análisis dinámico
  11. OWASP FSTM, etapa 8: Análisis en tiempo de ejecución
  12. OWASP FSTM, Etapa 9: Explotación de ejecutables
  13. Análisis de seguridad IOT con OWASP FSTM
  14. OWASP SAMM: Evaluar y mejorar la seguridad del software empresarial
  15. OWASP: Top 10 de riesgos en aplicaciones móviles