Seguridad en dispositivos IoT.
|
IoT, el Internet de las cosas: red de dispositivos que están conectados a Internet, controlados a través de él y pueden comunicarse entre sí. Pero a veces el dispositivo se puede clasificar como parte de internet de cosas sin conexión a internet. El número total de dispositivos conectados a Internet es de 23 mil millones con la perspectiva de aumentar a 30 mil millones para 2020. Una parte importante de los dispositivos tiene problemas de seguridad. Ignorar estos problemas conduce a la creación de botnets (Mirai, Satori) y a la fuga de datos personales.
Debido al enfoque irresponsable hacia la seguridad de IoT, han aparecido motores de búsqueda para IoT: Shodan, Censys, ZoomEye…
Muchas de sus vulnerabilidades son debidas a violaciones de los principios del desarrollo:
- Uso de credenciales de servicio ocultas y codificadas.
- Uso de las mismas claves y códigos PIN.
- Falta de control de acceso al acceder a una página de configuración conocida.
- Procesamiento incorrecto de los datos recibidos que causa el desbordamiento del búfer.
En este tipo de dispositivos se deben controlar tres aspectos en base a la seguridad de los mismos:
- Seguridad de hardware.
- Seguridad del software.
- Seguridad de radio.
La superficie de ataque por componentes, de dispositivos IoT se puede dividir en tres o cuatro áreas principales (si incluimos la comunicación como superficie de ataque) de la siguiente manera:
- Móvil
- Nube
- Comunicación
- Dispositivo
Móvil:
Es una de las interfaces de usuario importantes para IoT a través de la cual los usuarios finales obtienen información sobre el estado del mundo físico. Dado que la aplicación móvil se comunica con el ecosistema de IoT para enviar comandos y leer datos, se convierte en uno de los puntos de entrada al ecosistema de IoT.
Nube:
La nube es una de las piezas muy importantes de IoT, ya que generalmente los datos de todas las instancias de la línea de productos convergen aquí. Esto lo convierte en un punto de ataque muy interesante. La razón es que la nube contendrá los datos de todas las instancias de IoT implementadas y tiene los privilegios para enviar comandos a todas ellas. Bueno, generalmente es iniciado por el usuario, pero si se ve comprometido, los atacantes obtendrán el control de los dispositivos (y sus datos) desplegados en todo el mundo, lo cual es peligroso
Comunicación:
Aunque esta no es una superficie de ataque tangible, idealmente la superficie de ataque tangible serían las interfaces de comunicación y los respectivos controladores/firmware responsables de la comunicación. Sin embargo, esto necesita una sección separada por sí sola porque hay una lista interminable de protocolos de comunicación que el ecosistema de IoT puede usar en un medio cableado e inalámbrico.
Dispositivo:
Interactúa con el mundo físico y también se comunica con el mundo virtual. Es la primera parada para los datos del mundo físico. Existe un debate completo sobre la privacidad del usuario dados los datos confidenciales sobre el usuario que almacena (por ejemplo, estadísticas de inicio, estadísticas corporales, información personal). En el futuro, los dispositivos pueden usar las monedas criptográficas del usuario directamente a través de su billetera o una billetera temporal separada para comprar artículos, reparaciones, etc.
En este articulo se citan varias herramientas para test de penetración de dispositos IoT y para conocer las principales vulnerabilidades de dispositivo IoT: IoTSecFuzz (ISF), EXPLIoT, IoTGoat y Binwalk.
IoTSecFuzz (ISF) se creó con el objetivo de combinar el número máximo de utilidades para realizar pruebas integrales de seguridad de dispositivos IoT en todos los niveles de implementación. Tiene una consola para usarla como una aplicación independiente, así como la capacidad de poder importarla como una biblioteca.
Los aspectos clave de la herramienta se han convertido en un sistema modular flexible con la capacidad de agregar sus propios módulos y combinarlos.
Tiene la capacidad de operar con el dispositivo probado en tres niveles:
- Hardware (interfaces de depuración)
- Firmware (ingeniería inversa del sistema operativo del dispositivo)
- Comunicación (NRF24, Bluetooth, Wifi, redes IP).
Los siguientes módulos están disponibles en el marco (10.08.2019):
- avrloader: módulo secundario para la compilación / carga de código automático de arduino.
- ble_tool (inestable) – módulo para comunicación BLE.
- cfe – comunicación con el gestor de arranque CFE usando UART
- extractor: herramienta forense para volcado de memoria con firmware (basado en binwalk y cpu_rec API).
- Goldfinder – Firmwalker analógico, encuentra información interesante en el sistema de archivos de firmware desempaquetado.
- logic_analyzer: utiliza avrloader para programar arduino para usarlo como analizador lógico y exportar resultados (por ejemplo, crear un gráfico en modo automático).
- mqttmaaker – módulo para comunicación MQTT
- realtek – comunicación con el gestor de arranque Realtek usando UART.
- ubertooth: utiliza la biblioteca pyubertooth para la comunicación en Ubertooth.
- ttltalker: módulo secundario para la comunicación UART.
- uboot: comunicación con el gestor de arranque U-Boot usando UART.
Más información y descarga de IoTSecFuzz:
https://gitlab.com/invuls/iot-projects/iotsecfuzz
EXPLIoT es una herramienta para pruebas de seguridad y explotación de productos IoT e infraestructura IoT. Proporciona un conjunto de complementos (casos de prueba) que se utilizan para realizar la evaluación y se pueden ampliar fácilmente con otros nuevos. El nombre EXPLIoT es un juego de palabras con la palabra exploit y explica el propósito del marco, es decir, la explotación de IoT. Está escrito en Python.
IoT es una combinación de diferentes tecnologías y la superficie de ataque es considerablemente grande. Obviamente, no hay una herramienta de lectura que pueda cubrir toda la superficie de ataque del ecosistema IoT. El objetivo con EXPLIoT es llegar lo más cerca posible, es decir, cubrir tantos protocolos de IoT, plataformas de hardware y productos como sea posible. La cobertura del marco esta basado en protocolos y tecnologías usadas en IoT.
Complementos / pruebas disponibles:
- Bluetooth LE
- LATA
- CoAP
- DICOM
- I2C
- mDNS
- Modbus
- MQTT
- SPI
- UART
- UDP
- Zigbee
Hay dos formas de ejecutar EXPLIoT:
- Modo de línea de comando: Ejecutar la herramienta con argumentos de línea de comandos, ejecutará los comandos / argumentos respectivos y saldrá. Esto es útil para la automatización y la creación de scripts de diferentes casos de prueba como parte de su prueba: regresión, aceptación, seguridad, etc. La forma en que especifica el comando y los argumentos es la misma que en el modo interactivo .
- Modo interactivo: Ejecutar la herramienta sin especificar ningún argumento de la línea de comandos y se le saludará con un banner que muestra el número de versión actual, el nombre y finalmente la consola interactiva. Ahora podrá ejecutar complementos individuales manualmente.
Más información y descarga de EXPLIoT:
https://expliot.readthedocs.io/en/latest/#
IoTGoat es un firmware deliberadamente inseguro basado en OpenWrt. El objetivo del proyecto es enseñar a los usuarios sobre las vulnerabilidades más comunes que generalmente se encuentran en los dispositivos IoT. Las vulnerabilidades se basarán en el IoT Top 10 según lo documentado por OWASP:
- Contraseñas débiles, adivinables o codificadas de forma rígida. Uso de credenciales fácilmente brutales, disponibles públicamente o que no se pueden cambiar, incluidas las puertas traseras en el firmware o el software del cliente que otorgan acceso no autorizado a los sistemas implementados.
- Servicios de red inseguros. Servicios de red innecesarios o inseguros que se ejecutan en el propio dispositivo, especialmente aquellos expuestos a Internet, que comprometen la confidencialidad, integridad / autenticidad o disponibilidad de información o permiten el control remoto no autorizado…
- Interfaces inseguras del ecosistema. Interfaces web, API backend, nube o móviles inseguras en el ecosistema fuera del dispositivo que permite comprometer el dispositivo o sus componentes relacionados. Los problemas comunes incluyen la falta de autenticación / autorización, la falta o encriptación débil y la falta de filtrado de entrada y salida.
- Falta de mecanismo de actualización segura. Falta de capacidad para actualizar de forma segura el dispositivo. Esto incluye la falta de validación de firmware en el dispositivo, la falta de entrega segura (sin cifrar en tránsito), la falta de mecanismos antirretroceso y la falta de notificaciones de cambios de seguridad debido a actualizaciones.
- Uso de componentes inseguros u obsoletos. Uso de componentes/bibliotecas de software obsoletos o inseguros que podrían permitir que el dispositivo se vea comprometido. Esto incluye la personalización insegura de las plataformas del sistema operativo y el uso de componentes de software o hardware de terceros de una cadena de suministro comprometida.
- Protección de privacidad insuficiente. La información personal del usuario almacenada en el dispositivo o en el ecosistema que se utiliza de forma insegura, inadecuada o sin permiso.
- Transferencia y almacenamiento de datos inseguros. Falta de encriptación o control de acceso de datos confidenciales en cualquier parte del ecosistema, incluso en reposo, en tránsito o durante el procesamiento.
- Falta de administración de dispositivos. Falta de soporte de seguridad en dispositivos implementados en producción, incluida la administración de activos, administración de actualizaciones, desmantelamiento seguro, monitoreo de sistemas y capacidades de respuesta.
- Configuraciones predeterminadas inseguras. Los dispositivos o sistemas enviados con configuraciones predeterminadas inseguras o carecen de la capacidad de hacer que el sistema sea más seguro al restringir a los operadores la modificación de las configuraciones.
- Falta de endurecimiento físico. Falta de medidas de endurecimiento físico, lo que permite a los atacantes potenciales obtener información confidencial que puede ayudar en un futuro ataque remoto o tomar el control local del dispositivo.
Para comenzar a desarrollar los desafíos de IoTGoat, revise la página de Orientación del entorno de construcción. El firmware precompilado y un OVA con la última compilación se pueden encontrar en https://github.com/scriptingxss/IoTGoat/tree/master/build_environment. Si falta una idea de desafío crucial, comuníquese con los líderes del proyecto a continuación o agregue detalles a la página de tareas del proyecto. Asegúrese de unirse al equipo de OWASP Slack, luego únase al #iot-security para recibir noticias sobre las próximas reuniones y actualizaciones del proyecto.
Más información y descarga de IoTGoat:
https://github.com/scriptingxss/IoTGoat
Binwalk es una herramienta rápida y fácil de usar para: analizar en busca de codigo malicioso, realizar ingeniería inversa y extraer imágenes de firmware. Binwalk hace un buen trabajo analizando posibles firmas de archivos y filtrando falsos positivos obvios, pero no es perfecto. Algunas firmas son más difíciles de validar que otras y binwalk siempre va a pecar de cauteloso, es decir, informara antes de un posible falso positivo para que pueda validarlo o invalidarlo de forma independiente, en lugar de no informar de un resultado cuestionablemente válido.
Como utilizar binwalk:
Escaneo de firmware.
La característica
principal, y la más popular, de binwalk es su escaneo exclusivo.
Binwalk puede escanear una imagen de firmware para diferentes tipos
de archivos y sistemas de archivos, solo hay que pasarle una lista de
archivos para escanear:
$ binwalk firmware.bin
Extracción de archivos.
Permite extraer los
archivos que se encuentran en la imagen de firmware con la opción
“-e”:
$ binwalk -e firmware.bin
Binwalk incluso escaneará archivos recursivamente a medida que
los extrae si también especifica la opción “-M”:
$
binwalk -Me firmware.bin
Y si se especifica la opción “-r”, cualquier firma de archivo
que no se haya podido extraer o que haya resultado en archivos de
tamaño 0, se eliminará automáticamente:
$ binwalk -Mre
firmware.bin
Para extraer un tipo de firma específico, especifique una o más
opciones de archivos a extraer con el modificador “-D”:
$
binwalk -D ‘ png image: png ‘ firmware.bin
Análisis de entropía.
Cuando el análisis de
binwalk no reporta nada porque no coincide nada sospechoso las
firmas, existe una opción para que analice el código y identifique
posibles códigos maliciosos, gracias al análisis de entropía. El
análisis de entropía puede ayudar a identificar secciones
interesantes de datos dentro de una imagen de firmware:
$
binwalk -E firmware.bin
Más información y descarga de
binwalk:
https://github.com/ReFirmLabs/binwalk