Una bombilla que cualquiera puede apagar
Un dispositivo conectado es cualquier aparato con un chip y una conexión a la red: una bombilla, una cámara, una cerradura. Si su seguridad falla, alguien desde fuera puede leer lo que mide o darle órdenes.
Con unas pocas comprobaciones sencillas puedes encontrar los fallos más comunes antes de que los encuentre otra persona.
Al final de esta lección
Nota
Puedo nombrar los principales riesgos de un dispositivo conectado y qué ajuste corrige cada uno.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Clave por defecto | la contraseña con la que sale de fábrica un aparato |
| Firmware | el programa que lleva dentro el aparato |
| Actualización | una nueva versión del firmware que corrige fallos |
| Cifrado | volver ilegible un mensaje para quien no tiene la clave |
| Autenticación | demostrar quién eres con un nombre y una clave |
| Sin conexión | lo que el aparato sigue haciendo si se cae la red |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Lo que el laboratorio deja fuera
Importante
Un dispositivo real se conecta con un nombre y una clave, y por una conexión cifrada. El broker del laboratorio no pide nada de eso: deja leer y escribir a cualquiera. Es seguro aquí solo porque nada fuera de tu copia puede alcanzarlo. Nunca montes un broker real así.
Un broker sin autenticación habla con cualquiera
La autenticación comprueba quién eres antes de dejarte hacer algo. El broker del laboratorio no la tiene, y se nota. Te suscribes y los mensajes llegan, sin que nadie te pida un nombre ni una clave.
Los dos Run de abajo solo leen. El primero pide el estado de la puerta y el segundo pide todos los temas a la vez.
Lee la puerta sin dar clave
docker exec broker mosquitto_sub -t home/door/state -v -C 1 -W 5Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pide todos los temas que existen
docker exec broker mosquitto_sub -t '#' -v -C 5 -W 10Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Qué enseñan esos dos Run sobre el riesgo
El primero escribe una línea al instante, home/door/state y open o closed. Ninguna clave de por medio.
El segundo escribe cinco líneas con los temas de la casa. Cualquiera que llegase a un broker así sabría si hay alguien en casa y a qué temperatura. Los valores cambian de una persona a otra.
Los cinco riesgos y su remedio
| Riesgo | Qué falla | Qué ajuste lo corrige |
|---|---|---|
| Clave por defecto | Todos los aparatos de un modelo comparten la misma clave | Cambiarla en el primer uso |
| Firmware sin actualizar | Los fallos conocidos siguen abiertos | Instalar las actualizaciones |
| Sin cifrado | Quien está en el camino lee y cambia los mensajes | Usar una conexión cifrada |
| Acceso anónimo | Cualquiera puede leer y publicar | Exigir nombre y clave |
| Sin plan sin conexión | Si cae la red, el aparato deja de servir | Que lo esencial funcione sin red |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un aparato sin actualizar acumula fallos conocidos
Un fabricante corrige los fallos de seguridad con una actualización del firmware. Si el aparato no la instala, cada fallo conocido sigue abierto, y las listas de fallos son públicas.
Una regla útil para una auditoría: un firmware que lleva más de un año sin actualizarse es un riesgo.
Un error frecuente
Advertencia
Mucha gente cree que nadie atacaría un aparato tan pequeño como una bombilla. Se ataca por cantidad: quien encuentra una clave por defecto la prueba en miles de aparatos iguales. Un aparato olvidado puede servir para atacar a otros.
Una auditoría revisa los ajustes uno por uno
Auditar un dispositivo es revisar sus ajustes con una lista fija de comprobaciones y apuntar cada fallo. No hace falta atacar nada: basta con leer cómo está configurado.
El código de abajo hace una sola comprobación. Cambia la clave y mira el resultado.
Comprueba una clave
claves_comunes = ["", "admin", "1234", "password", "0000"]
clave = "admin" # cambia la clave
if clave in claves_comunes:
print("clave por defecto")
else:
print("la clave no está en la lista")