¿QUÉ ES MQTT?

Alejandro Sánchez

MQTT, de las siglas Message Queuing Telemetry Transport, es un protocolo de transporte de mensajería e intercambio de datos destinado a mejorar la conectividad M2M (Machine to machine). Creado y desarrollado a finales de la década de 1990 por IBM (International Business Machines) para conectar los sistemas de telemetría de oleoductos por satélite en la industria petrolera. 

Este protocolo es un conjunto de reglas que define cómo los dispositivos pueden publicar y suscribirse a datos a través de Internet. Se maneja por eventos y conecta dispositivos utilizando el modelo de publish / subscribe (Pub/Sub). El emisor (Publisher) y el receptor (Subscriber) se comunican respecto a los temas (Topics) a los que están suscritos. 

A diferencia de un modelo de cliente – servidor, donde se comunican directamente, en el modelo Pub / Sub la conexión entre ellos es por un intermediario (Broker). El Broker MQTT filtra todos los mensajes entrantes y los distribuye correctamente a los suscriptores.

Este protocolo se ha convertido en uno de los más utilizados para el  IoT por su sencillez y ligereza, lo cual, es especialmente importante en redes inalámbricas, dado que los dispositivos de IoT, a menudo, tienen limitaciones de potencia, consumo y ancho de banda.

La idea del Internet de las cosas es conectar dispositivos para que los procesos sean más eficientes, brinden más comodidad y mejoren. Sin embargo conectar objetos y máquinas también expone muchos datos confidenciales que sólo están destinados a un pequeño grupo. 

Con más y más datos recopilados todos los días y más dispositivos presentes, el tema de la seguridad es más importante que nunca.

LA SEGURIDAD BÁSICA EN MQTT

Hay tres conceptos fundamentales en la seguridad de MQTT: identidad, autenticación y autorización.

  • La identidad consiste en dar nombre al cliente que se va autorizar y dar autorización. El cliente MQTT se puede identificar mediante su identificador de cliente, su ID de usuario o su certificado digital público o con una contraseña definida por el cliente. El servidor MQTT se identifica ante el cliente con su dirección IP y su certificado digital.
  • La autenticación consiste en probar la identidad del cliente. Un cliente MQTT puede autenticar el servidor MQTT al que se conecta con el protocolo SSL y, a su vez, el servidor puede autenticar el cliente que se conecta a él con el protocolo SSL o con la contraseña, o con ambas. Si el cliente autentica el servidor pero el servidor no autentica el cliente, el cliente se conocerá como ‘cliente anónimo’. Generalmente al establecer una conexión de cliente anónimo por SSL, se autentica el cliente con una contraseña cifrada por la sesión SSL.

Con mayor frecuencia se autentica con un certificado de cliente a aquellos dispositivos de alto valor como máquinas para tarjetas de crédito y de chip o en dispositivos personalizados como medidores inteligentes de electricidad.

  • La autorización consiste en gestionar los derechos que se otorgan al cliente. Esta no forma parte del protocolo en sí, sino que la proporcionan los servidores MQTT. Lo que el servidor autoriza depende de las reglas de autorización de MQTT que controlan los clientes que se pueden conectar al servidor y los temas en los que un cliente puede publicar o suscribirse. 

El número de posibles clientes es extenso, por lo que no es factible autorizar

cada cliente por separado. Un servidor MQTT tendrá los medios para agrupar a los clientes por perfiles o grupos.

Podemos decir que la seguridad del sistema del MQTT debe ser considerada en distintos niveles y capas para prevenir distintos tipos de ataques, por lo que es esencial conocer los servidores y la infraestructura de la red con la que se trabaja. La división de los niveles de seguridad en MQTT sería la siguiente:

  • Nivel de red:  para proveer una conexión fiable, necesitamos usar una red físicamente segura o VPN para toda la comunicación entre clientes y agentes. Esta solución puede funcionar con aplicaciones de gateway donde el gateway se conecta a los dispositivos y también a la VPN.
  • Nivel de transporte: SSL/TLS se utiliza comúnmente para la encriptación del transporte cuando se requiere confidencialidad. Los datos no pueden ser leídos durante la transmisión debido a este método seguro y proporciona una autenticación de certificado de cliente para verificar la identidad de ambos lados.
  • Nivel de aplicación: el protocolo MQTT proporciona una identificación de cliente, un identificador de cliente y credenciales de nombre de usuario/contraseña para autenticar los dispositivos en el nivel de aplicación. Estas propiedades son proporcionadas por el propio protocolo. Lo que los dispositivos están autorizados a hacer está definido por la implementación específica del agente. En el nivel de aplicación, también es posible utilizar la encriptación de la carga útil para asegurar la información transmitida sin necesidad de encriptación de transporte.

Capas de seguridad para la prevención de ataques:

  • La infraestructura: Es importante entender el tipo red del sistema objetivo para lograr bloquear los ataques tan pronto como sea posible, evitando así daños y por tanto pérdidas en los sistemas. Todas las conexiones con un broker MQTT deben pasar, al menos, por un firewall.
  • El sistema operativo: Muchos de los ataques se centran en los servidores que ejecutan varios sistemas operativos, buscando huecos en la seguridad del sistema operativo o del software.
  • El broker MQTT: Una de las ventajas que brinda es la eliminación de conexiones inseguras y vulnerables, además puede trabajar con menor tensión de red sin que esto comprometa la seguridad y es escalable, puede ir fácilmente de un solo dispositivo a miles.

Cuando hablamos de la seguridad de MQTT podemos decir que es necesario conocer los elementos que conforman la red con la que se trabaja, ya que es  importante encontrar la solución que satisfaga los requisitos de seguridad de su caso de uso específico para garantizar la seguridad de la red.

MQTT COMO PROTOCOLO DE  IOT

Desde su introducción, MQTT ha sido capaz de conectar con éxito una innumerable cantidad de dispositivos en implementaciones de todos los tamaños y tipos ya que como se mencionó anteriormente cuenta con varias características que lo hacen destacar, es ligero y eficiente, permite una comunicación bidireccional, escalable, confiable y seguro, brinda soporte para redes no confiables, QoS, etc.

CALIDAD DEL SERVICIO (QoS) MQTT

La calidad del servicio se define como  la capacidad de una red para proporcionar diferentes niveles de garantías de servicio a las diversas formas de tráfico, dicho de otra manera, es la forma en la que se garantiza la entrega de un mensaje entre el emisor y el receptor. En MQTT hay 3 niveles de QoS: QoS 0 unacknowledged (maximo 1), QoS 1 acknowledged (al menos 1) y QoS 2 assured (exactamente 1). 

Usar un nivel u otro depende directamente de las características y necesidades del sistema. Lógicamente, un nivel de QoS superior requiere un mayor intercambio de mensajes, de verificación con el cliente y por tanto, mayor carga al sistema.

  • QoS 0 Este nivel de servicio garantiza una entrega mas rapida, el mensaje se envía una única vez y no hay garantía de entrega. El destinatario no notifica la recepción del mensaje y el remitente no almacena ni retransmite el mensaje, por lo que en caso de fallo o desconexión puede que alguno no se entregue. Este nivel es recomendado cuando:
    • La conexión entre el remitente y el receptor es completamente o en su mayoría estable. 
    • La pérdida de algunos mensajes es admisible, por ejemplo, cuando los datos se envían a intervalos cortos.
    • No es necesaria una cola de mensajes. 
  • QoS 1 El nivel 1 de QoS garantiza que un mensaje se entregue por lo menos una vez. El remitente almacena el mensaje hasta que recibe una confirmación del receptor. Es posible que un mensaje se envíe o entregue varias veces. En caso de fallo, el receptor puede recibir algún mensaje duplicado. Este nivel es recomendado cuando:
    • Debe recibir todos los mensajes y puede manejar duplicados.
    • No puede soportar la sobrecarga de QoS 2.
  • QoS 2 Es el nivel más alto de servicio en MQTT. En este nivel se garantiza que cada mensaje sea recibido solo una vez por el/los destinatarios, también es el nivel más seguro y lento. Si un paquete se pierde en el camino, el remitente es responsable de retransmitir el mensaje dentro de un tiempo razonable. En consecuencia el destinatario tiene la responsabilidad de responder a cada mensaje. Este nivel es recomendado cuando:
    • Es fundamental para su aplicación recibir todos los mensajes exactamente una vez. Tenga en cuenta la sobrecarga y que la interacción tarda más en completarse.
    • Todos los mensajes enviados deben ponerse en cola para clientes sin conexión hasta que el cliente vuelve a estar disponible.

Es importante tener en cuenta que todos los mensajes enviados con QoS 1 y 2 se ponen en una cola, sin embargo, esta cola solo está disponible para los clientes que cuentan con una sesión persistente.

No es de sorprender que en la actualidad sea el protocolo de Internet de las cosas más popular. Al requerir un mínimo de ancho de banda y no consumir demasiados recursos, se ha vuelto el complemento ideal para el Internet de las cosas.