Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CASO PRÁCTICO 9
Seguridad en IoT
R1:
Arbol Jerarquico
Inicialmente, debemos conocer la forma en la que están dispuestos los
dispositivos planteados en el ejercicio. En este caso, sabemos que se trata de una
(1) casa inteligente con cuatro (4) ambientes y cada uno de los ambientes
contiene varios dispositivos particulares.
Podemos apoyarnos de los directorios de Linux para ver este
planteamiento de forma más gráfica y de esta forma determinar los tópicos que
serán utilizados en la comunicación MQTT:
Figura 1: Generación de los tópicos en forma de directorios Linux
En Unix, podemos utilizar el comando “tree” para listar directorios y su
contenido en forma de árbol. De manera que, los tópicos que dispondremos para
el ejercicio estarían dispuestos de la siguiente forma:
Figura 2: Árbol topológico del ejercicio utilizando el comando “tree” de linux
R3:
Securización básica del Broker mediante creación de usuarios y contraseñas
para los dispositivos (Test with Auth)
En este punto, nuestro ambiente MQTT es funcional, sin embargo, puesto
a que no hemos securizado el broker, cualquier dispositivo que mande solicitudes
de conexión anónimas por el protocolo en dicha red tendrá acceso al broker y
por consiguiente podrá visualizar información sensible como las estadísticas del
broker:
Figura 17: Acceso a estadísticas del broker desde un dispositivo anónimo
Para evitar esto, procederemos a agregar una capa de seguridad
adicional, directamente desde el broker. Indicandole, que no acepte conexiones
anónimas, de manera que, solo luego de autenticarse, un dispositivo puede
integrarse al broker como subscriptor o como publicador.
Lo primero que haremos, es reestructurar el archivo de configuración de
nuestro broker, es decir, editaremos el archivo de la Figura 6 de la siguiente
forma:
Figura 18: Edición del archivo mosquitto.conf
Figura 29: Adición de dos nuevos usuarios (device y panel) para el contexto de las
premisas en el archivo pwfile
Figura 33: Prueba premisa 1 (El panel principal debe poder suscribirse a
todos los dispositivos)
R5:
Capa de transporte seguro (SSL/TLS: 8883)
Como último objetivo, agregaremos una capa adicional de seguridad a
nivel de transporte implementando SSL/TLS mediante la herramienta de código
abierto OpenSSL, de esta forma las comunicaciones MQTT del Smarthome que
estamos planteando estarán más protegidas. Para la implementación en nuestro
proyecto se utilizará como referencia el siguiente video-tutorial, donde se
muestra de forma ilustrativa la implementación de esta capa de seguridad
adicional: ADTechKnow. (2022, 19 marzo). Use TLS-SSL with Mosquitto MQTT
Broker [Vídeo]. YouTube. https://www.youtube.com/watch?v=1Tu0tc0VHuc
Para efectos prácticos del ejercicio, se generará un step-by-step, con la
intención de tener listados todos los pasos necesarios para implementar SSL/TLS
a un sistema con un broker mosquitto desplegado en docker compose:
1. Generar carpeta “certs” donde se almacenarán los archivos necesarios
para establecer conexión segura entre el cliente y el servidor. Esta
carpeta debe generarse en uno de los volúmenes del contenedor, puesto
que la data debe tener persistencia host-contenedor.
Figura 35: Generación de carpeta “certs” en el volumen “config”
4. En este punto, es necesario generar una clave privada ahora para el lado
del servidor.
Figura 38: Generación del archivo server.key
11. Validamos que el broker inicialice de forma efectiva por los puertos
especificados.
Figura 46: Servidor levantando correctamente y en escucha por el puerto
8883.
12. Probar la comunicación efectiva mediante el puerto 8883 con el
certificado.
Figura 47: Prueba sin certificado (Puerto por defecto)
Nota Importante:
Respecto a la presentación:
A pesar de que el caso práctico estipulaba un límite máximo de 15
páginas, es importante destacar que las 26 páginas presentadas
contienen información y evidencias fundamentales para comprender la
totalidad de la implementación.
La extensión adicional del documento se debió, en parte, a la
decisión de realizar el despliegue utilizando la tecnología Docker en lugar
de una implementación directa en el host. Esta elección aumentó la
complejidad del proceso y requirió una explicación detallada para
garantizar una comprensión completa y precisa del ejercicio.