Atacando el protocolo MQTT

El siguiente artículo muestra un método de crackeo de las credenciales de autenticación del protocolo MQTT. Para ello se va a montar un escenario virtual haciendo uso del bróker Mosquitto. Además, también se va a utilizar el cliente Mosquitto y la herramienta Ncrack para extraer las credenciales.

No se pretende explicar el funcionamiento del protocolo en cuestión, por lo que se recomienda la lectura de uno de los artículos anteriores del blog (https://www.securityartwork.es/2019/02/01/el-protocolo-mqtt-impacto-en-espana/) donde se detallan las características del protocolo.

MQTT ofrece la posibilidad de añadir autenticación a las comunicaciones, no obstante, a pesar de aplicar esta capa de seguridad, las comunicaciones van sin cifrar por defecto como se mostrará a continuación. Un atacante que consiga interceptar el tráfico de la red podría visualizar las credenciales en claro:

Como se puede observar en la ilustración anterior, las credenciales aparecen en texto plano en el paquete de establecimiento de conexión. ¿Sin llegar a visualizar este paquete, podría un atacante llegar a conseguir las credenciales? La respuesta es sí, mientras el dispositivo esté expuesto, es posible conseguir las credenciales de acceso haciendo uso de una herramienta llamada Ncrack. Para demostrarlo, se prepara el siguiente escenario:

Entorno de pruebas

Para emular las comunicaciones del protocolo MQTT se va a utilizar el bróker y el cliente Mosquitto. Y un entorno Linux. Para instalarlo e iniciarlo se ejecutan los siguientes comandos:

# sudo apt install mosquitto mosquitto-clients
# sudo service mosquitto start

A partir de este momento ya sería posible compartir mensajes entre publisher/subscriber, pero actualmente funcionaría sin ningún tipo de autenticación. Para añadir usuario y contraseña, hay que introducir el siguiente comando y especificar la contraseña una vez se solicite. En el ejemplo, se crea el usuario “prueba” y se introduce la contraseña “Passw0rd!”

# sudo mosquitto_passwd -c /etc/mosquitto/passwd prueba

Tras especificar las credenciales, configurar Mosquitto creando un fichero llamado password.conf en el directorio /etc/mosquitto/conf.d/ y añadiendo las siguientes líneas al fichero, de lo contrario cualquiera podría comunicarse sin necesidad de introducir credenciales.

per_listener_settings true
allow_anonymous false
password_file /etc/mosquitto/passwd

Para aplicar los cambios, reiniciar el servicio:

# sudo service mosquitto restart

Aplicadas todas las configuraciones, llega el momento de probar si el escenario se ha creado de forma correcta, para ello se crea un subscriber añadiendo el usuario y contraseña o de lo contrario saltaría un error de conexión:

# mosquitto_sub -t ‘tema de prueba’ -u prueba -P Passw0rd!

Para comunicarse con el subscriber se crea un publisher en una ventana nueva donde se especifica el mensaje que se quiere transmitir:

# mosquitto_pub -t ‘tema de prueba’ -m ‘Esto es una prueba’ -u prueba -P Passw0rd!

Si todo ha funcionado correctamente se debería observar en el subscriptor el mensaje enviado:

Una vez se ha creado el entorno de pruebas llega el momento de instalar la aplicación que se va a utilizar para el crackeo de las credenciales. Se trata de Ncrack, una herramienta de cracking de autenticación de red de alta velocidad. Para más información sobre la aplicación, dirigirse a su web: https://nmap.org/ncrack/.

Se procede a instalar Ncrack desde su repositorio de github mediante los siguientes comandos:

# git clone https://github.com/nmap/ncrack.git
# cd ncrack
# ./configure && make

La herramienta permite hacer cracking de bastantes protocolos, pero el que se va a utilizar es MQTT, para ello se especifica la dirección donde se encuentra el bróker objetivo (en local en este caso, 127.0.0.1) y el puerto de MQTT (1883). Por defecto hace uso de los diccionarios de usuarios y contraseñas ubicados en /ncrack/lists/default.pwd y default.usr, no obstante, se puede especificar el diccionario mediante línea de comandos:

La obtención de las credenciales se ha producido en un corto espacio de tiempo (1 minuto 53 segundos) debido a que se trata de un entorno preparado y se ha hecho uso de un usuario y contraseña bastante común. No obstante, al no haber control de intentos de acceso, sería posible ejecutar el ataque de fuerza bruta durante más tiempo teniendo en cuenta el no provocar una denegación de servicio, ya que al comprobar la autenticación el bróker consume recursos.

Contramedidas

Tras conocer el peligro que puede llegar a entrañar el protocolo MQTT llega el momento de las contramedidas que se pueden llegar a aplicar para protegerse contra este tipo de ataques.

  • Es importante hacer uso de una contraseña robusta para aumentar en gran medida el tiempo de crackeo.
  • Asimismo, se recomienda, si es posible, configurar de forma segura el dispositivo que haga uso del protocolo, así como los bróker, añadiéndole autenticación y cifrado de las comunicaciones.
  • A ser posible no exponer los dispositivos a internet y en caso de encontrarse dentro de una organización, segmentar la red correctamente. Una buena medida consiste en crear un segmento propio para los dispositivos IoT.

Referencias

  • Libro – Practical IoT hacking