Primero: este no es uno de esos "¿Cómo empiezo a piratear?" preguntas, pero más de un "¿Cómo comienzo a probar un dispositivo específico?".
Es parte de mi tesis de licenciatura realizar un análisis / evaluación de vulnerabilidad de un dispositivo de IoT que se implementó durante otra tesis de licenciatura con un enfoque de seguridad en mente, y proporcionar posibles soluciones o mejoras. Aplicando el principio de Kerckhoffs, tengo acceso completo a la documentación, el código fuente e incluso se me ha proporcionado un cliente de prueba, lo que me permite configurar el servidor web de acuerdo con la documentación.
¿Cómo procedo?
De acuerdo a this Tenemos varios pasos para una evaluación completa.
- descubrimiento
- Análisis de vulnerabilidad
- Evaluación de vulnerabilidad
- Evaluación de seguridad
- prueba de penetración
Sistema
Los tres componentes temáticos principales ya están identificados:
- Lectores / etiquetas RFID
- Cliente del microcontrolador, (Arduino / w Ethernet Shield)
- sistema backend
Información adicional para proporcionar una mejor imagen:
1) solo utiliza el ID de la etiqueta rfid (autorización sin autenticación), es posible la clonación / suplantación de etiquetas. Teniendo en cuenta si es posible integrar esto con el sistema de bloqueo de puertas patentado, ya que se utilizan las mismas etiquetas rfid, el sistema tiene autenticación de usuario.
2) Arduino Uno como interfaz para puerto serie y lectura de etiquetas rfid, usa la biblioteca criptográfica para ChaCha20-Poly1305 encripta / autentica el tráfico al backend, la clave precompartida, genera una nueva clave de sesión periódicamente, implementaré un pequeño programa que emula La comunicación a través del puerto serie.
3) Backend con servidor web (Apache), servidor de aplicaciones (django) y base de datos (sqlite, ya que todavía es un sistema de prueba). Proporciona la interfaz web como herramienta administrativa, utiliza el estado del arte TLS.
Estado actual
Actualmente estoy atascado en cómo abordar esto de manera metódica y estructurada / proceso .
Realmente no tengo mucha esperanza en atacar (1), ya que no puedo ver tantos vectores de ataque, aparte de la clonación / suplantación de identidad.
En (2), ya que es un Arduino, utiliza el 99% de su capacidad para sus tareas. Ya utilicé flawfinder en el código fuente, pero solo mostraba algunos errores (verifique el tamaño de la matriz si se copian, etc.), que eran todo manejado en el código. No se realiza ninguna asignación de memoria dinámica, la lectura de matrices se define estrictamente por el tamaño de las matrices, etc.
Suponiendo que la Biblioteca ChaCha20, que trae su propio RNG seguro esté implementado correctamente, realmente no veo nada aquí.
Finalmente (3) donde veo el mayor potencial. El servidor web Apache se ejecuta en Debian 9. El servidor web a menudo se configura incorrectamente / no está actualizado, lo que abre vectores de ataque. ¿Servidor de aplicaciones? No estoy seguro de eso. Webclient, dependiendo de la implementación, compilación con Django, también podría ser uno de los componentes más vulnerables.
TL; DR: Tengo un dispositivo IoT, que consta de varios componentes (Microcontrolador, servidor web de fondo con interfaz web) y estoy atascado en cómo realizar una evaluación de vulnerabilidad metódicamente correcta y completa.
Preguntas
- ¿Cuál es el enfoque metódico adecuado para este problema? ¿Hay normas / marcos?
- ¿Cómo puedo probar a fondo (1) y (2) las vulnerabilidades? Como hay guías para pentesting (3)
EDIT
Dejo la información de fondo tal como está. La pregunta principal es:
¿Cuál es un enfoque metódico correcto para la evaluación de vulnerabilidad de un dispositivo IoT de múltiples componentes?