SEGURIDAD EN PROTOCOLO MQTT UNIVERSIDAD ANTONIO NARIÑO BOGOTA COLOMBIA Ing. Jaime Pedraza Email: [email protected] RESUMEN: Este documento trata los problemas de seguridad en el protocolo (MQTT)1 y da a conocer los diferentes tipos de vulnerabilidades [1] [2] y las diferentes brechas de seguridad. Además contemplamos sus posibles soluciones. En MQTT los datos en tránsito no se encriptan por lo que la privacidad, autenticación e integridad de los datos se convierten en problemas en la implementación de este protocolo. MQTT es uno de los más implementados en aplicativos de internet de las cosas. Cisco IBSG predice que el número de dispositivos (IoT)2 alcanzará los 50 mil millones en 2020 [1]. Lo que tendrá un impacto en casi todos los aspectos de nuestra vida. Y por eso la importancia, de la seguridad está en la parte superior de la lista de desafíos de IoT. Este documento propone el cifrado autenticado con datos asociados (AEAD)3 [4] es una de las soluciones más recomendadas y veremos varios medios de mitigación de seguridad. Estos resultados indican que protocolo de seguridad usar con poca cantidad de memoria para uso de microcontroladores usados en IoT. Palabras Clave: ChaCha20-Poly1305, nodos restringidos, seguridad de IoT, MQTT, seguridad sobre IoT I. INTRODUCCION M 1 2 QTT es un protocolo ligero que funciona en el modelo de publicación y suscripción para (MQTT) Message Queue Telemetry Transport (IoT) Internet de las cosas garantizar una comunicación eficiente entre plataformas. MQTT se usa ampliamente para IoT debido a su pequeño tamaño y al mínimo consumo de ancho de banda [5] [2] [6] [7]. Para finales del 2020 se espera un número de dispositivos conectados de 30 mil millones. Para finales del mismo año se espera un intercambio de datos superior a 40 Zettabytes. Esto motiva a ver la importancia de todos los datos generados, almacenados y transmitidos des de dispositivos IoT, que es su seguridad y como esto está relacionado con la privacidad del usuario. Una implementación de estas solo es exitosa si se basa en la seguridad. En un contexto de IoT los dispositivos tienen dirección IP para conectarse a redes de comunicaciones y así comunicarse con otros objetos o humanos. Hay muchos tipos de dispositivos de bajo costo esto nos permite utilizar dispositivos en todos los campos de interés, por ejemplo: logística, ciudades inteligentes, entorno inteligente, salud, agricultura inteligente, etc. La diversidad, eficacia, ingenio y el transporte de información lo convierte en un dominio tecnológico de alta demanda, pero también lo hacen vulnerable y riesgoso en términos de seguridad. Este trabajo tiene como objetivo aumentar la seguridad en los dispositivos IoT al comprender los requisitos de seguridad para los dispositivos, y poder analizar la superficie del ataque en red local y red pública. La red local es análoga al ataque interno donde el atacante está en la misma red que los dispositivos mientras que la red pública el atacante puede residir en cualquier lugar de la 3 (AEAD) Cifrado Autenticado con datos asociados red pública para atacar el sistema. Además se propone ChaCha20-Poly1305 AEAD como una solución para asegurar la comunicación de IoT con recursos restringidos sobre MQTT / MQTT-SN. ChaCha20 y Poly1305 son respectivamente un cifrado de flujo ligero y un autenticado de una sola vez que continúan ganando popularidad en la comunidad de cifrado. B. Tipo de comando Fuera del encabezado fijo de dos bytes, el primer byte es el campo de control. Este campo de control de 8 bits se divide en dos campos de 4 bits. Los primeros 4 bits MSB son el campo de tipo de comando. Este documento está organizado de la siguiente manera. En la sección II Presentación del protocolo. En la sección III resumimos trabajos sobre las vulnerabilidades conocidas. En la sección IV mitigación de vulnerabilidades, la seguridad. En la sección V. finalmente damos algunas conclusiones. II. PROTOCOLO MQTT MQTT es un protocolo binario y tiene un formato de comando y reconocimiento de comandos Entonces, cada vez que un cliente envía un comando al corredor, el corredor envía un acuse de recibo. Este protocolo de comunicación se basa en realidad en el protocolo TCP / IP. Primero habrá un establecimiento de conexión TCP y luego habrá un establecimiento de conexión MQTT y luego ocurrirá la transferencia de datos. Después de lo cual se terminará la conexión TCP. Como se trata de un protocolo basado en comandos y reconocimiento de comandos, para cada función el cliente debe enviar comandos al corredor. Y se envían como paquetes. [5] [8] [7] [9] [1] Figura 2. Tipo de comando 1 C. Control de bits de bandera Los siguientes 4 bits son los bits de la bandera de control y son usados por el comando de publicación para el resto de los comandos que están reservados y el valor será 0. Para el comando PUBLICAR: el bit 0 denota si el mensaje que se publica se retiene el mensaje. Los bits 1 y 2 se utilizan para seleccionar la calidad de servicio si es 0 o 1 o 2. Y el 3er bit indica si es un mensaje duplicado. [10] [11] [5] A. Formato de paquete de MQTT El paquete MQTT consta de un encabezado fijo de 2 bytes más un encabezado variable y una carga útil. En este primer encabezado fijo de 2 bytes siempre estará presente en todos los paquetes y en los otros dos, el encabezado variable y la carga útil no siempre estarán presentes. Figura 3. Control de bits de bandera 1 Figura 1. Formato MQTT D. Conectar paquete El primer byte del paquete de conexión será 10. Debido a que el valor del comando CONNECT es 1, los primeros 4 MSB serán 1 y no hay banderas, por lo que los siguientes 4 bits serán 0. Figura 4. Conectar paquete El segundo byte debería ser la longitud restante. Que es la longitud del encabezado variable y la longitud de la carga útil. Decidamos esta longitud después de completar el encabezado de la variable y la carga útil. Puede ver a continuación el formato del encabezado de la variable y la carga útil del paquete. identificar el tráfico MQTT. Si se encuentra un protocolo no válido, el servidor puede rechazar la conexión. Después del nombre del protocolo, está el nivel de protocolo. Esto determina qué versión de MQTT admite. Para la versión 3.1.1, el protocolo es de nivel 4. Y si el mismo protocolo no es compatible con el Los siguientes dos bytes se utilizan para mencionar la duración de mantener vivo en segundos. Durante 60 segundos, el valor será 003C en hexadecimal. Después del encabezado de la variable, estará la carga útil y contendrá; ID de cliente, nombre de usuario y contraseña. En nuestro caso, no hay nombre de usuario ni contraseña, por lo que solo estará presente la identificación del cliente. Al igual que hicimos para el nombre del protocolo, los primeros 2 bytes denotarán la longitud de la identificación del cliente. Supongamos que nuestra identificación de cliente es PQRST. Servidor, se desconecta enviando un acuse de recibo con el código de retorno 01. Figura 7. Encabezado Figura 5. Formato de encabezado En el encabezado de la variable, primero debe estar el nombre del protocolo. Y para esto, los primeros 2 bytes deben mencionar la longitud del nombre del protocolo seguido del nombre del protocolo. En nuestro caso, el nombre del protocolo es MQTT, que tiene una longitud de 4. Entonces se convierte en: Ahora es fácil determinar la 'longitud restante' que se supone que debe estar aquí. Si cuenta el total de bytes utilizados para el encabezado variable y la carga útil. Es 17. Por lo tanto, la 'longitud restante' será 17. Figura 8. Longitud 1 Figura 6. Protocolo 1 No puede dar el nombre que quiera aquí. Dado que este nombre lo utiliza el servidor para E. Paquete Connack Una vez que se envía el paquete de conexión, y si el corredor recibe la conexión, devolverá el acuse de recibo: CONNACK. En el encabezado de la variable de CONNACK habrá el código de retorno de conexión. Al leer eso, podemos entender si se establece la conexión y, si no, el motivo del rechazo. suscribirse al tema OPENLABPRO con QoS 0: Figura 11. Subscribe un paquete 1 Figura 9. Tipos de Conexiones F. Publicar paquete Ahora publiquemos el mensaje “HOLA” al tema OPENLABPRO. Para el comando de publicación de paquetes, el valor es 3. Con (QoS)4 nivel 0 y sin retener el indicador de control de mensajes será 0. En la sección de encabezado de variable, los primeros 2 bytes denotarán la longitud del tema y luego seguirán el tema. De manera similar, en la sección de carga útil, los primeros 2 bytes denotarán la longitud del mensaje seguido por el mensaje. Figura 10. Mensaje MQTT G. Subscribe paquete Ahora el mensaje está publicado y si hay suscriptores para ese tema, recibirán el mensaje. Para suscribirse a un tema, el cliente debe enviar el paquete SUBSCRIBE. El valor de comando del paquete de suscripción es 8 y la bandera de control está reservada y debe ser 2. El encabezado de la variable contendrá un ID de paquete de 16 bits distinto de cero. Y como carga útil, estará el tema para suscribirse seguido del nivel de QoS solicitado. Para 4 (QoS) Calidad de servicio Ahora tiene una idea clara de los datos que se envían en un protocolo MQTT. Y como puede ver, todos los comandos e instrucciones se envían y reciben como bits. Y por eso es un protocolo de base binaria. Los campos de texto, como nombre de usuario, contraseña, tema, etc., están codificados como cadenas UTF-8. Utiliza de uno a cuatro bloques de 8 bits para representar un carácter. Aquí, como el nombre de usuario y la contraseña se envían como datos sin procesar, la seguridad es menor. Por lo tanto, se prefiere que la certificación SSL sea una mejor opción. III. VULNERABILIDADES El protocolo se ejecuta sobre TCP / IP (puerto 1883 y puerto 8883 para MQTT sobre TLS / SSL). Un cliente MQTT, que puede ser un editor o suscriptores, siempre publica o se suscribe a un tema específico. Un servidor central, conocido como broker, recibe suscripciones de los clientes sobre temas, recibe mensajes de los clientes y los reenvía, según las suscripciones de los clientes, a los clientes interesados. Los temas de MQTT son jerárquicos con la forma de rutas de archivo, por ejemplo, jardín / césped / humedad. La conexión MQTT en sí es siempre entre un cliente y el intermediario, ningún cliente está conectado a otro cliente directamente. MQTT se centra en la mensajería fiable, por lo que incluye niveles de Calidad de servicio QoS (nivel 0: "como máximo una vez", nivel 1: "al menos una vez" y nivel 2: exactamente una vez"). MQTT requiere una conexión TCP / IP, sin embargo, esto hace que sea más difícil de implementar en redes de sensores más simples compuestas esencialmente por nodos de restricción. La configuración experimental como se muestra en la Figura. 12 incluye una Raspberry Pi que aloja el MQTT Broker y el editor, clientes suscriptores implementados usando programas de Python que se ejecutan en otra computadora. Raspberry Pi es una computadora de placa única que se ejecuta en un sistema operativo basado en Linux. Eclipse Mosquitto, un MQTT Broker de código abierto con soporte para las versiones 3.1 y 3.1.1, se implementó en Raspberry Pi. Se utilizó el lenguaje de programación interpretado de alto nivel Python para implementar el Cliente (tanto el editor como el suscriptor). Python proporciona API para la comunicación con un agente MQTT a través del protocolo MQTT. El analizador de paquetes de código abierto tema. El cliente envía un paquete CONNECT junto con su identificación y credenciales si es necesario. El Broker al recibirlo envía el paquete CONNECT ACK con el acuse de recibo. Luego, el cliente envía la SOLICITUD DE SUSCRIPCIÓN con el nombre del tema. El Broker al recibirlo, agrega al cliente a la lista de suscriptores que tiene y luego envía SUBSCRIBE ACK con el acuse de recibo. Figura 14. Publicar datos La figura 14. Muestra la secuencia de acciones cuando un cliente intenta publicar datos en los temas. CONNECT y CONNECT ACK tienen el mismo significado que en la publicación. Aquí, el cliente usa el nivel 0 de QoS (disparar y olvidar) para publicar datos y, por lo tanto, no hay respuesta del corredor una vez que el cliente ha enviado el mensaje. El cliente envía el mensaje PUBLICAR junto con el nombre del tema y la carga útil. El Broker al recibir este mensaje, lo reenvía a los suscriptores del tema. A. Mecanismos de autenticación Figura 12. Servidor Broker MQTT El archivo de registro en el extremo del Broker se utilizó para registrar la respuesta del Broker a varios tipos de ataques. El Broker se implementó en Raspberry Pi y se probó para detectar varios posibles ataques. Se implementaron los mecanismos para prevenir los ataques y se registraron y analizaron las respuestas del Broker Figura 13. Suscribirse al Broker. La figura 13. Muestra la secuencia de acciones cuando un cliente intenta suscribirse a un La autenticación es un mecanismo mediante el cual una entidad demuestra su identidad a la otra parte, mientras que la autorización es un mecanismo mediante el cual se utilizan las credenciales de la entidad para permitir o denegar el acceso a los servicios prestados. [5] [3] [6] [9] [7] [8] B. Sin mecanismo de autenticación para autenticar usuarios Cuando no existe un mecanismo de autenticación, cualquier cliente puede publicar o suscribirse a cualquier tema. Esto representa una amenaza para la confidencialidad de los datos. Los datos con los que está tratando el Broker pueden tener información sensible y esta información se puede obtener simplemente proporcionando el nombre del tema. La autenticación ayuda en la prevención de este ataque al permitir que solo las entidades registradas publiquen y suscriban dato La autenticación se puede realizar mediante diferentes métodos. El nombre de usuario y la contraseña es la forma más común de autenticación que se utiliza, los certificados de cliente también se pueden utilizar para demostrar su identidad. El desafío de usar certificados para la autenticación es tener un proceso que se encargue del aprovisionamiento de certificados (proporcionar certificados a los clientes) y la revocación de certificados (para invalidar ciertos certificados de clientes si se encuentran inválidos o comprometidos). Por lo tanto, existe una necesidad de infraestructura para hacer frente a los procesos antes mencionados, lo que puede no ser factible en muchos casos. Figura 15. Muestra el CONNECT ACK diseccionado de un cliente que intenta acceder sin credenciales válidas. C. Credenciales de usuario enviadas como texto sin formato en el paquete de comandos CONNECT El protocolo MQTT se diseñó teniendo en cuenta la conectividad y no se prestó mucha atención a la protección del protocolo. Habilitar la autenticación evita que los usuarios no autorizados no accedan a los datos, pero las credenciales del usuario se pasan en forma de texto sin formato y un atacante puede utilizar este paquete para hacerse pasar por el usuario legítimo y obtener acceso a los datos. Un posible escenario de ataque, donde el atacante se apodera del paquete CONNECT y puede usarlo para obtener las credenciales para hacerse pasar por el cliente legítimo. El pobre cliente no se da cuenta de este ataque. Esta vulnerabilidad en el protocolo se puede superar mediante los siguientes mecanismos explicados en la siguiente índice. IV. MITIGACION DE SEGURIDAD Utilizando Transport Layer Security o Secure Sockets Layer sobre el puerto 8883 (puerto estándar utilizado para la conexión MQTT segura), los paquetes entre el cliente y el Broker se envían a través de un canal o túnel de comunicación seguro como se muestra en la Figura.17. El desafío de usar este mecanismo es que, si el cliente realiza reconexiones frecuentes, la sobrecarga requerida para reanudar la sesión sería realmente significativa. Por tanto, no se recomienda utilizar este mecanismo en casos de reconexiones frecuentes. La carga útil se puede cifrar antes de enviarla a la red. Este esquema requiere que el editor cifre el mensaje antes de enviarlo al corredor. El descifrado se puede realizar en el Broker o en el suscriptor. El cifrado y el descifrado se pueden realizar mediante algoritmos criptográficos ligeros. Otra alternativa sería utilizar SMQTT con su propia elección del algoritmo de cifrado. Figura 17. Seguridad MQTT puerto 8883 La autorización se puede implementar en tres niveles: • Por tema: El usuario tiene acceso solo a los temas a los que el administrador le permite acceder. Este mecanismo permite evitar el acceso no autorizado a los datos que se puede realizar utilizando los comodines. Figura 16. Muestra el paquete CONNECT COMMAND diseccionado que revela el nombre de usuario y la contraseña en texto sin formato Por método: Incluso después de que el usuario tenga acceso solo a los temas requeridos, el usuario puede publicar y suscribirse, lo que no es favorable en muchas situaciones. Este mecanismo permite al usuario acceder para publicar, suscribirse o ambos. Por calidad de servicio (QoS): El protocolo MQTT permite tres niveles de QoS y, por lo tanto, se pueden imponer limitaciones en cuanto a qué nivel de QoS tiene derecho un usuario en particular. Los mecanismos antes mencionados se pueden implementar usando la Lista de Control de Acceso (ACL)5, donde se menciona el nombre de usuario junto con las restricciones. A. Seguridad MQTT El cliente MQTT puede autenticar al intermediario utilizando certificados SSL enviados desde el servidor. La autorización en MQTT se utiliza para restringir el acceso a los recursos del intermediario según la información proporcionada por el cliente. Para verificar la integridad de los datos, se puede utilizar una función hash. TLS puede proporcionar tales algoritmos. Para la confidencialidad de los mensajes MQTT, se puede utilizar un algoritmo de cifrado. Sin embargo, estos algoritmos deben ser livianos y requieren soporte del cliente. El cifrado se puede implementar de un extremo a otro (editor y suscriptores) o simplemente de cliente a intermediario. El cifrado en capas inferiores se puede utilizar cuando se ha optado por el cifrado transparente. Se pueden lograr en la capa de transporte con TLS o en la capa de enlace con AES. MQTT-SN no define ningún mecanismo de seguridad a nivel de protocolo. Sin embargo, para MQTT-SN sobre UDP, DTLS se puede utilizar para la seguridad de la capa de transporte. [9] [1] [8] B. ChaCha20-Poly1305 AEAD ChaCha20 y Poly1305 se han diseñado para implementaciones de software de alto 5 (ACL) Lista de control de acceso rendimiento y para minimizar la fuga de información a través de canales laterales. ChaCha20, basado en Salsa20, es un cifrado de flujo desarrollado por DJ Bernstein en 2008 y es publicado por el RFC7539 [3]. ChaCha20 es una variante de ChaCha que tiene 20 rondas, un aleatorio de 96 bits y una clave de 256 bits. La función de cifrado ChaCha20 transforma un texto de queja de longitud arbitraria en un texto cifrado de la misma longitud. Esta función se define de la siguiente manera en [10]: La operación básica del algoritmo Chacha20 es el cuarto de vuelta, que consiste en la suma de enteros, OR exclusivo bit a bit y rotación izquierda de n bits. La función de bloque Chacha20 genera un bloque keystream a XOR con un texto de conformidad. Se pueden encontrar más detalles en [3]. C. Poly1305 Poly1305 es un autenticado de una sola vez diseñado por DJ Bernstein en 2008 y publicado por RFC7539 [3]. Un mensaje M de longitud arbitraria se divide en trozos de 16 bytes y se alimenta a un polinomio basado en el de 16 bytes clave de autenticación! ". El valor final del polinomio se combina con un aleatorio de 16 bytes para crear el número de token de autenticación utilizado para autenticar el mensaje. En [10], D. AEAD_CHACHA20_POLY1305 AEAD_CHACHA20_POLY1305 [3] es un cifrado autenticado con datos asociados AEAD basado en la combinación del cifrado de flujo ChaCha20 y el autenticado Poly1305. AEAD_CHACHA20_POLY1305 toma como entrada una clave de 256 bits, una aleatoria de 96 bits, un texto de demanda de longitud arbitraria, y una longitud arbitraria Datos autenticados adicionales (AAD)6. Esta función devuelve un texto cifrado con el número de autenticación que es el resultado de la función Poly1305. 6 (AAD) Datos autenticados adicionales AEAD_CHACHA20_POLY1305 se define de la siguiente manera en [10]: El descifrado funciona de manera similar con algunas diferencias: los roles del texto cifrado y el texto conforme se invierten. La función Poly1305 todavía se ejecuta en el AAD y el texto cifrado y la etiqueta generada deben compararse bit a bit con la etiqueta recibida para verificar la autenticidad de los datos. Sin embargo, si el nodo está limitado por el tamaño de la carga útil, se podría utilizar el cifrado de la carga útil con AES-CBC. De Santis et al. [10] presentan uno de los pocos trabajos que discuten el uso de chacha20poly1305 AEAD para aplicaciones ligeras de IoT. Los autores proponen una implementación optimizada de ChaCha20 para procesadores ARMCortex-M4. La evaluación del rendimiento muestra que los cifrados ChaCha20-Poly1305 son candidatos prometedores para proteger las aplicaciones emergentes de IoT con limitaciones de espacio y velocidad ajustadas. V. CONCLUSIONES En este artículo, propusimos un esquema de seguridad ligero para el protocolo MQTT / MQTT-SN basado en chacha20-poly1305 AEAD. Este esquema asegura el cifrado de un extremo a otro para los nodos. Este documento habla sobre los diversos protocolos utilizados en IoT, pero se centra en el protocolo MQTT ampliamente Utilizado, debido a sus características como tamaño de encabezado pequeño, requisitos de ancho de banda bajos, eficiencia y confiabilidad en condiciones adversas, etc. A partir de los experimentos que hemos realizado con el protocolo MQTT, fue evidente que consistía en su propio conjunto de vulnerabilidades que los atacantes pueden aprovechar. Utilizando el motor de búsqueda Shodan y las API de Python, descubrimos que la mayoría de los servidores que alojaban al MQTT Broker no tenían el mecanismo de autenticación en su lugar, que se puede explotar para robar datos confidenciales o agregar datos redundantes que a su vez podría afectar a todos los demás sistemas. Que se basan en estos datos. Una vez identificadas las vulnerabilidades, se implementaron mecanismos de seguridad en una Raspberry Pi que atiende a un Broker y se modificaron sus archivos de configuración. Además, la Lista de control de acceso ACL se creó para garantizar que los usuarios solo tengan acceso a los datos a los que tienen derecho. Una vez que se impusieron estos mecanismos de seguridad al Broker, todos los ataques fracasaron. Por lo tanto, al implementar un Broker, estos mecanismos de seguridad podrían usarse en la fase inicial para prevenir los ataques antes mencionados. Por lo tanto, la seguridad debe tenerse en cuenta desde el principio y no como una ocurrencia tardía. Bibliografía [1] A. A. B. B. V. C. A. Q. V. P. R. Z. E. P. R. L. 3. Q. d. G. 7. P. F. G. Casteur, «Fuzzing attacks for vulnerability discovery within MQTT protocol,» IEEE, 2020. [2] B. B. M. K. S. D. o. C. P. –. B. S. C. B. I. Harsha M S, «Analysis of vulnerabilities in MQTT security using Shodan API and implementation of its countermeasures via authentication and ACLs,» IEEE, 2018. [3] R. H. S. S. A.-r. C. f. C. S. F. o. I. S. &. T. U. K. M. 4. U. B. M. Abdulrahman Sameer Sadeq, «A QOS APPROACH FOR INTERNET OFTHINGS (IOT) ENVIRONMENT USING MQTT PROTOCOL,» IEEE, 2018. [4] A. S. A. S. C. R. C. o. E. B. I. Prabaharan J, «Wireless Home Automation and Security System using MQTT Protocol,» IEEE, 2017. [5] G. D. B. M. B. D. E. Ü. z. T. Özlem YERL�KAYA, «Security of Message Queue Telemetry Transport Protocol,» IEEE, 2017. [6] C. B. P. K. S. o. C. a. E. U. o. M. K. C. M. U. Anurag Thantharate, «CoAP and MQTT based Models to deliver Software and Security Updates to IoT Devices Over the Air,» IEEE, 2019. [7] J. G. B. Z. T. Z. P. R. S. o. I. S. a. E. H. U. o. S. a. T. S. 0. C. Min Huang, «The Design and Implementation of Security Defense System Based on Android,» IEEE, 2017. [8] I. N. C. L. Ousmane Sadio, «Lightweight Security Scheme for MQTT/MQTT-SN,» IEEE, 2019. [9] F. D. R. A. F. S. Giuseppe Potrino, «Modeling and evaluation of a new IoT security,» IEEE, 2019. [10] «An Extensible and Transparent Thingto-Thing Security Enhancement for MQTT Protocol in IoT Environment,» IEEE, 2019. [11] L. V. D. o. E. a. A. U. o. P. P. I. Yanina Protskaya, «Broker Bridging Mechanism for Providing Anonymity in MQTT,» IEEE, 2019. [12] a. B. R. b. B. H. c. 1. 2. 3. D. o. E. E. S. o. E. E. a. I. I. T. B. B. I. Syaiful Andy1, «Attack Scenarios and Security Analysis of MQTT Communication Protocol in IoT System,» IEEE, 2017. [13] K. V. R. R. D. E. a. C. E. D. B. M. U. G. I. Malapati Bharath, «Implementation of IoT Architecture for Intruder Alert System using MQTT Protocol and MEAN Stack,» IEEE, 2018. [14] (. M. I. ROBERT R. JAKUBEK, «Nonequivalent Quasi-Experimental Study of Wireless Telecommunication Traffic During Severe Winter Storms,» IEEE, 2015. [15] 2. L. S. L. V. R. G. C. R. 1. o. T. a. M. P. I. o. L. P. 2. S. a. C. R. C. (. P. I. Roberto Leal1, «MQTT flow signatures for the Internet of Things,» IEEE, 2019. [16] R. R. G. D. o. I. I. S. o. B. a. R. B. I. Suja P Mathews, «Protocol Recommendation for Message Encryption in MQTT,» IEEE, 2019. [17] K. K. C.-C. C. W. H. N. N. A. R. L. 7. R. 6. R. H. S. P. H. C. T. R. SeongHan Shin, «A Security Framework for MQTT,» IEEE, 2016. [18] P. D. J. P. N. K. D. o. I. T. R. A. I. o. T. N. N. M. I. Sowmya Nagasimha Swamy, «Security Threats in the Application layer in IOT Applications,» IEEE, 2017.