Lector de Memorias: obteniendo las claves de acceso de los dispositivos IoT
Tabla de contenidos
Los dispositivos IoT cada vez están más extendidos y asentados en los entornos domésticos. Nos ayudan en nuestro día a día y permiten realizar numerosas funciones que hasta hace unos años eran impensables. Controlar la calefacción a distancia, las luces desde el móvil o interactuar con un altavoz o una televisión inteligente para que pongan la música o la serie que queremos escuchar o ver.
Atendiendo a las distintas funcionalidades de los dispositivos IoT, su diseño puede ser más o menos complejo. No obstante, todos ellos comparten un elemento común, hacen uso de pequeñas memorias para almacenar el firmware que gobierna su funcionamiento. Por desgracia, la anatomía de estas memorias no es genérica. Si bien es cierto que la mayoría de los dispositivos implementan memorias estandarizadas, existen algunos fabricantes que hacen uso de memorias con factores de forma particulares y cuya lectura no es una tarea trivial al no ser posible conseguir un adaptador para la misma.
En esta entrada del blog se introducirá una herramienta indispensable y muy común en el contexto del hardware hacking: los lectores de memoria. Además, se presentarán también unas conclusiones sobre la importancia de securizar correctamente los datos contenidos en las memorias y los peligros asociados a las malas prácticas durante el proceso de bastionado de los dispositivos IoT.
La tendencia dominante en el sector IoT actualmente es implementar memorias de tipo flash en los dispositivos, principalmente por su bajo coste y simplicidad de uso. Se pueden distinguir tres familias de memoria dependiendo del tipo de interfaz de comunicación que implementen: I2C o SPI además del estándar eMMC.
Memoria | Capacidad | Precio |
I2C | Máximo 1Mbit | Las más económicas de las tres |
SPI | 1 Mbit a 4 Gbit | Mejor ratio en relación capacidad/precio de las tres |
eMMC | 256 Mbits – 16 Gbits (pueden tener más capacidad, aunque no es lo usual) | Mayor precio de las tres |
En la actualidad, la tendencia en los dispositivos IoT se está orientando cada vez más hacia las memorias de tipo eMMC dado que los desarrollos son cada vez más complejos y necesitan almacenar software más complejo y que no cabe en memorias de baja capacidad de almacenamiento.
Si bien es cierto que la única forma para comprobar el tipo de memoria que equipa un dispositivo pasa por abrirlo y revisarlo de forma visual, a continuación se exponen algunas aproximaciones que pueden ayudar a intuir con antelación el tipo de memoria que se espera encontrar:
- Los dispositivos más económicos suelen necesitar menos cantidad de memoria y equipan normalmente memorias más baratas del tipo I2C o SPI.
- Cuando los dispositivos necesitan menos de 1 Gigabit de datos suelen equipar casi siempre memorias del tipo SPI
- Si la capacidad de memoria demandada por el dispositivo supera 1 Gigabit, dependiendo de la estimación de costes que haga el fabricante, el número de lotes a fabricar y la cantidad de unidades por lote, pueden equipar memorias del tipo SPI o eMMC. No obstante, la tendencia actual de los fabricantes se orienta a memorias eMMC debido a que su factor de forma está más estandarizado y permiten realizar actualizaciones hardware (ampliación de la memoria del dispositivo) sin interferir ni impactar en el resto de los componentes del mismo.
Tras exponer los tipos de memorias que existen, uno podría plantearse ¿qué riesgos tiene acceder al contenido de estas memorias? y ¿cómo se puede acceder a las mismas?
Riesgos devenidos por el acceso a la información de las memorias
Determinar los riesgos asociados a acceder de forma no autorizada a la información contenida en las memorias no es una tarea trivial y depende de muchos factores que se enumerarán a continuación.
Por un lado, desde el punto de vista de los fabricantes del dispositivo, que un tercero pueda acceder al contenido de la memoria es peligroso ya que, si la memoria no se securiza adecuadamente, un atacante podría tener acceso a los binarios que ejecuta el dispositivo. Una vez conocidas las versiones de los binarios que implementa el dispositivo, se acota en gran medida la búsqueda de potenciales vulnerabilidades asociadas al mismo.
Además, tener un acceso directo a los binarios del firmware permite abrir otra vía de ataque para un potencial atacante, la ingeniería inversa. En caso de no encontrar ninguna vulnerabilidad pública que afecte a las versiones de los binarios que ejecuta el dispositivo IoT, poder hacer ingeniería inversa de los mismos facilita el descubrimiento de vulnerabilidades 0-day. Es importante enfatizar que facilita su descubrimiento, pero no necesariamente lo garantiza.
Otro punto importante a tener en cuenta es que si es fácil la lectura de estas memorias, también lo será la escritura, de manera que si no está securizada, será posible modificar o alterar total o parcialmente el software que ejecuta el dispositivo de manera que se pueda tener el control total de lo que hace con una simple modificación.
En lo referente a las tendencias actuales del sector IoT, desde el equipo de Innovación de Tarlogic se ha encontrado fabricantes que cifran el firmware (el contenido de la memoria) y lo desempaquetan y descifran en tiempo de ejecución durante el proceso de carga. Y otros muchos que directamente no le añaden esta capa de seguridad. Otros fabricantes por el contrario hacen uso de soluciones híbridas y cifran únicamente algunos sectores y/o particiones de la memoria.
Por otro lado, en lo referente al usuario, más allá del riesgo que entraña que se puedan descubrir El primero de ellos está relacionado con la privacidad de los datos de los usuarios. Si el dispositivo no cifra el contenido de la memoria y el usuario lo pierde, es posible extraer información sensible del mismo como: credenciales de acceso a determinados servicios, usuarios y contraseñas, claves de las redes Wifi a las que se ha conectado, etc. A priori, el impacto de tener acceso a este tipo de datos puede parecer bajo o casi despreciable ya que implica la sustracción del dispositivo y en entornos domésticos no suele ser común este tipo de casuísticas. Sin embargo, cuando el dispositivo IoT se encuentra en un entorno empresarial todo cambia. Tener acceso a este tipo de datos puede suponer una brecha de seguridad importante y peligrosa para la empresa. El segundo de los riesgos es que se puedan incluir de forma maliciosa otras funcionalidades en el dispositivo. Hace tiempo salió una noticia que tuvo mucha difusión sobre una red de personas que utilizaban los ordenadores de demostración expuestos en distintas tiendas y cadenas comerciales de España para minar criptomonedas. Si bien es cierto que los dispositivos IoT por regla general son de bajas prestaciones y no pueden ser utilizados para este tipo de propósitos, si las memorias no se cifran y no se implementa ningún control de integridad de la misma, no existe ningún impedimento para que un atacante extraiga la memoria, la modifique para incorporar algún servicio/funcionalidad ilícita, y después la vuelva a cargar. El usuario no sería consciente de esta funcionalidad nueva y el atacante podría sacar provecho de la misma. Por último, el tercer riesgo de los dispositivos IoT se encuentra relacionado con los movimientos laterales. Al estar conectados a Internet, si uno de estos dispositivos es vulnerable a un ataque es posible que el atacante pueda pivotar dentro de la red y atacar en un segundo momento a otros dispositivos de dicha red. Como contramedidas para prevenir este tipo de comportamientos, hoy en día existen routers que cuentan con una red aislada para los dispositivos IoT (aunque no siempre es así). Para terminar con esta sección, se presentan a continuación situaciones bastante comunes a las que ha tenido que hacer frente el equipo de Innovación de Tarlogic Security durante sus auditorías de seguridad IoT y que suponen un gran riesgo para la seguridad: Tras evaluar los riesgos asociados al acceso del firmware (contenido de la memoria), es lícito preguntarse qué procedimiento habría que seguir para poder leer la memoria. Existen distintas soluciones comerciales para leer memorias. El principal problema de este tipo de lectores es que se encuentran estrechamente ligados al tipo de memoria que se desea leer y en numerosas ocasiones no se comercializan adaptadores para formatos de memoria específicos poco comunes. De hecho, es bastante común tener que comprar distintos modelos de lectores de memoria solo porque el que se posee no es compatible con un formato de memoria determinado. El equipo de Innovación de Tarlogic ha desarrollado un adaptador de memorias que permite leer memorias que hagan uso de las tres interfaces comentadas al principio del artículo (I2C, SPI y eMMC). Actualmente soporta los protocolos I2C y SPI, y próximamente incorporará una interfaz hardware y software para eMMC Gracias a esta herramienta, se evita tener dependencia de lectores de memoria comerciales, aportando una mayor flexibilidad especialmente cuando se tiene que trabajar con memorias que están fuera de los estándares más utilizados. El factor de forma de la herramienta desarrollada permite conectarla a una Raspberry Pi (modelos 3 y 4). Si bien es cierto que está pensada para usarla como complemento a la Raspberry, es posible utilizarla con otras placas de desarrollo y soluciones mainstream como por ejemplo un Arduino. Para ello, la herramienta se ha diseñado con conectores de tipo headers macho / hembra para garantizar la compatibilidad con el mayor número de sistemas de adquisición posibles, incrementando la flexibilidad de la herramienta. El hardware desarrollado tiene soporte para memorias Flash de los tipos SPI e I2C y cuentan con soporte de lectura en la gama 25 (SPI), se está mejorando la gama 24 (I2C) y el soporte al estándar eMMC se encuentra en la fase de pruebas. Para garantizar el modularidad de la solución hardware propuesta, se ha diseñado una placa intermedia para adaptar el lector de memorias a la Raspberry y alimentar a ambos. Esta placa posee conectores de alimentación y adaptación para la lectura de memorias. En las siguientes imágenes se puede observar en vista superior y lateral la placa intermedia (o placa madre): Pensando en la modularidad se han equipado conectores header para la conexión con la Raspberry. Cuenta con dos conectores de alimentación que permitirá alimentar desde un alimentador de 12V y 2,5 mm o con cargador de móvil con clavija USB C (tanto la Raspberry como la lectora de memorias). Los elementos principales que conforman la placa son: A la placa madre se conecta una placa hija mediante conectores de borde de placa. Sobre esta placa secundaria o hija se dispone la memoria a leer. En el supuesto de necesitar leer memorias con factores de forma diferentes únicamente es necesario diseñar una placa secundaria para leer dichas memorias, pudiendo reutilizarse la placa primaria. Se puede ver el diseño del adaptador actual para memorias SPI e I2C y un modelo para memorias en formato poco común en las imágenes inferiores. Los elementos más significativos de la misma: El principal beneficio de utilizar soluciones propias es la flexibilidad que te aportan frente a las soluciones comerciales en las que se limitan los adaptadores de memorias que dan soporte las empresas dedicadas a la fabricación y venta de lectores y que principalmente únicamente cubren los más utilizados y que tienen interés comercial. Gracias a las herramientas hardware/software desarrolladas por Tarlogic se puede leer cualquier tipo de memoria. Únicamente hay que diseñar la nueva placa hija con la huella necesaria, acelerando los trabajos de investigación y auditoría. Además, al integrarse de una forma transparente con dispositivos accesibles y comunes hoy en día como la Raspberry Pi, su potencial se incrementa exponencialmente. Descubre nuestro trabajo y nuestros servicios de ciberseguridad en www.tarlogic.com/es/Brecha de seguridad relevante en dispositivos IoT
Extracción del firmware: los lectores de memoria
Descripción de la herramienta
¿Qué beneficios aportan los diseños propios frente a las soluciones comerciales?