On-The-Fly: Cómo hackear MQTT con Network Packet Manipulation en 1 minuto
‘on-the-fly‘ es una proyecto del equipo de Ideas Locas que ofrece capacidades para realizar pruebas de pentesting en varios dominios (IoT, ICS & TI). Se trata de una herramienta innovadora al unir diferentes mundos que comparten un factor común: la red. Es Open Source, por lo que te animamos a participar activamente en el proyecto que puedes encontrar en su GitHub.
Si revisas el blog y has trabajado con la herramienta, habrás visto que hay un módulo para ‘on-the-fly’ para hacer Network Packet Manipulation, concretamente para manipular paquetes de MySQL al vuelo. En esta ocasión quisimos hacer lo mismo pero para manipular paquetes del protocolo MQTT, y así ampliar las capacidades que tienes para los proyectos de Ethical Hacking.
Figura 3: Libro de Ethical Hacking 2ª Edición de Pablo González en 0xWord |
Ahora hemos publicado este nuevo módulo y te explico como puedes ponerlo a prueba. El escenario es el siguiente:
- Un broker MQTT que se encargue de hacer llegar los mensajes entre los diferentes clientes.
- Dos clientes MQTT, uno que publicará el mensaje (que se manipulará en el aire) y otro cliente que esté suscrito al topic que recibirá el mensaje.
- Una máquina con Kali Linux y herramienta ‘on-the-fly’ preparada.
- El módulo de manipulación MQTT preparado y lanzado.
Debes saber que este tipo de módulos necesitan de otro módulo para que proporcione el tráfico, en este caso haciendo uso del módulo arp_spoof.
Montaje del broker
Para poner en marcha el broker de manera rápida puedes hacer uso de Docker con una imagen de mosquitto (puedes encontrarla en el Docker Hub):
$ docker run -it -p 1883:1883 -p 9001:9001
-v mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto
Figura 4: Libro de Docker:SecDevOps en 0xWord de |
Para este caso, vamos a habilitar el puerto de escucha 1883 (por defecto para conexiones sin cifrar y sin autenticar) y el puerto 9001 (este se usará para una conexión a través de Web Socket, sin cifrar y sin autenticar). Esto se resume en un archivo de configuración que contenga las siguientes lineas:
listener 1883
listener 9001
protocol websockets
Ahora podemos lanzar el contenedor y hacer una prueba de conexión con el broker. Para ello necesitaremos un cliente, por ejemplo MQTTX. MQTTX es un cliente gráfico MQTT, es Open Source bajo una licencia Apache 2.0, y es multiplataforma, por lo que podemos usarlo con los principales sistemas operativos.
Ahora podemos crear una nueva suscripción para estar pendientes de todos los mensajes que se mandan a dicho “topic”. Para este ejemplo vamos a suponer que hay una bombilla a la que se le puede cambiar el color cuando se publica sobre el topic ‘bulb/color’.
Con la suscripción creada, vamos a mandar un mensaje con un color, por ejemplo, blue, suponiendo que el dispositivo que estamos ejemplificando espera recibir este mensaje para cambiar su color.
Al mandar y recibir el mensaje en el mismo cliente lo vemos como si fuera una conversación: a la derecha los mensajes enviados y a la izquierda los mensajes que se reciben. En ambos casos aparece el topic donde se ha mandado/recibido.
Como ves, hacer uso del protocolo MQTT para intercambiar mensajes entre dispositivos es algo muy sencillo. Únicamente se debe disponer de un broker y de uno o varios clientes para realizar el intercambio.
MQTT Packet Manipulation PoC
Ahora que ya sabemos como funciona el protocolo MQTT, vamos a hacer uso del nuevo módulo de ‘on-the-fly‘ para manipular estos paquetes en el aire.
Para empezar necesitamos hacer que el tráfico de una máquina víctima pase a través de nosotros, por lo que comenzamos haciendo uso del módulo arp_spoof, o cualquiera de las técnicas que se explican en el libro de Ataques en redes de datos IPv4&IPv6 (4ª Edición).
load modules/spoof/arp_spoof
Con el ARP Spoofing en ejecución, cargamos el módulo de manipulación MQTT:
load modules/manipulation/mqtt_manipulation
Para este módulo hay que configurar dos parámetros:
- mqtt_topic_modify: este valor indica el topic que se quiere escuchar para manipular su mensaje.
- msg_spoof: este valor representa el nuevo mensaje que se quiere asignar.
De esta manera, en el ejemplo se ha indicado que se quiere escuchar el topic bulb/color y vamos a reemplazar cualquier mensaje por lime, por lo que vamos a cambiar cualquier color a éste.
Por último, realizamos la prueba de funcionamiento. Nos dirigimos a la máquina víctima y realizamos la publicación de un nuevo color.
Si todo ha ido bien podremos observar que, aunque el mensaje que ha salido del cliente es correcto, la recepción que llega a la suscripción es el modificado por ‘on-the-fly‘, por lo que hemos conseguido manipular el tráfico MQTT en tiempo real. En el siguiente video puedes ver la demostración completa del ejemplo.
Como ves, este módulo de manipulación de paquetes MQTT hace muy sencillo poder jugar con este protocolo, y propone otro caso de uso para un entorno IoT donde ‘on-the-fly‘ tiene ya varios módulos disponibles.
Figura 14: Pentesting con Kali Silver Edition |
Powered by WPeMatico