La sécurité du protocole MQTT

« Smart homes », « Smart devices » ou « Smart cities » : ces expressions illustrent l’ancrage de l’Internet des Objets dans notre quotidien. Au cœur de ces technologies, le protocole MQTT joue un rôle discret mais essentiel. Quelles méthodes pour le sécuriser face aux défis croissants de l’IoT ?

En 2024, on estimait le nombre d’appareils IoT connectés dans le monde à environ 18 milliards, soit plus de deux fois la population mondiale. Des alarmes connectées aux ascenseurs intelligents, en passant par les capteurs industriels ou les dispositifs médicaux, ces technologies rythment désormais notre quotidien. 

Les récentes avancées dans le domaine de l’IoT ont transformé la façon dont nous interagissons avec les objets connectés. Conçus pour être intuitifs, ils sont accessibles sans expertise spécifique. Les connexions entre ces derniers, souvent sans fil, passent presqu’inaperçues aux yeux des utilisateurs. Pourtant, derrière cette apparente simplicité se cachent des protocoles de communication élaborés dont MQTT fait partie.   

En raison de sa popularité et de sa présence croissante au sein d’opérations sensibles, MQTT fait depuis plusieurs années l’objet de recherches quant aux risques liés à son utilisation. Nous nous intéresserons ici à son fonctionnement, ses vulnérabilités potentielles ainsi qu’aux bonnes pratiques permettant d’assurer la sécurité des communications. 

MQTT et les raisons de sa popularité 

Les forces de ce protocole 

Développé en 1999 par Andy Stanford-Clark (IBM) et Arlen Nipper (Arcom), l’objectif derrière la conception de MQTT était de fournir une solution légère, efficace, avec une faible consommation d’énergie et de bande passante pour surveiller des oléoducs isolés dans le désert par le biais d’une liaison satellitaire. 

Si MQTT s’est aujourd’hui établi comme une référence pour la transmission de données IoT, c’est précisément pour ces propriétés fondamentales. Ce protocole est par ailleurs fréquemment utilisé pour la remontée de données provenant de capteurs ou d’objets connectés vers des plateformes Cloud. 

Figure 1 – Caractéristiques principales de MQTT 

Son fonctionnement

Définitions des termes clés 

Client MQTT : Un dispositif échangeant des informations. 

Broker MQTT : Une entité intermédiaire permettant à des clients MQTT de communiquer et par laquelle tous les messages MQTT transitent. En particulier, le broker reçoit les messages publiés et les distribue aux destinataires concernés (les abonnés au topic correspondant). 

Topic : Une chaine de caractères permettant de filtrer et d’organiser les messages selon une structure hiérarchique. Lorsqu’un client publie un message, il l’associe à un topic. 

Publish/Subscribe : Modèle dérivé du Client/Serveur classique pour lequel les demandes ne sont pas initiées par un client demandant des ressources à un serveur mais par un serveur envoyant régulièrement des mises à jour à des clients sans sollicitation active. 

MQTT est un protocole de communication « Machine à Machine » ou M2M qui opère selon un modèle Publish/Subscribe ce qui permet une grande souplesse dans son implémentation. 

Les clients MQTT peuvent endosser le rôle de publisher, subscriber ou les deux.   

Afin de recevoir les informations dont ils ont besoin, les subscribers s’abonnent à des rubriques ou topics (1), généralement organisés de manière hiérarchique au sein du broker (ex. Maison/Chambre/…). Dès lors qu’un publisher aura émis un message destiné aux abonnés de ce topic (2), ils seront notifiés par le broker (3).    

De ce fait, les clients MQTT ne sont pas contraints de partager un même réseau, ni d’être actifs au même moment et ne nécessitent pas de synchronisation entre eux.  

Figure 2 – Illustration d’une architecture MQTT simplifiée 

Par ailleurs, MQTT propose un mécanisme de « Qualité de Service » de ses messages permettant d’adapter les communications aux exigences de l’application. Il est ainsi capable, par exemple, de garantir la livraison des messages en cas de connexion instable. Les clients MQTT peuvent sélectionner un niveau parmi trois de « QoS » pour la distribution de leurs messages : 

  • QoS 0 « Au plus une fois » – Le message sera distribué une fois ou pas distribué du tout, sans accusé de réception. 
  • QoS 1 « Au moins une fois » – Le message sera distribué périodiquement tant que l’expéditeur n’aura pas reçu d’accusé de réception. 
  • QoS 2 « Une seule fois » – Le message est garanti d’être distribué et une seule fois. 

Le niveau de « QoS » choisi a également une incidence sur la durée de stockage du message localement auprès de l’expéditeur et du destinataire. 

Cette architecture permet d’établir des communications décentralisées et extensibles (scalable). Ces caractéristiques s’avèrent particulièrement avantageuses dans le domaine de l’IoT où la flexibilité est essentielle pour répondre à la diversité des cas d’usage. Elles expliquent également pourquoi MQTT dépasse largement le cadre de l’IoT et trouve des applications dans de nombreux autres environnements tels que la télémétrie et la surveillance industrielle. 

MQTT est-il vulnérable ? 

A l’instar de nombreux autres protocoles de communication, MQTT n’est pas sécurisé par défaut. Bien que la plupart de ses implémentations intègrent à présent des solutions de sécurité robustes, certaines faiblesses et erreurs de configurations persistent, rendant les systèmes vulnérables. 

Pour souligner ces notions, nous nous intéresserons à un exemple standard d’utilisation de ce protocole en milieu industriel. 

Figure 3 – Illustration d’un exemple d’utilisation industrielle de MQTT 

Dans ce scénario, tous les systèmes représentés contiennent un client MQTT permettant de souscrire ou de s’abonner à des topics et de communiquer avec le broker « on-premise ». Les communications MQTT ne sont pas chiffrées et il n’y aucune authentification du broker ou des clients, laissant la possibilité à un attaquant d’accéder aux données de production échangées en clair ou de transmettre des ordres aux équipements en usurpant l’identité du broker ou de l’un de ces clients. 

Comment se protéger ? 

Pour se protéger efficacement contre ces risques, le broker et les clients MQTT doivent être déployés et configurés avec vigilance. Nous proposons ici différentes étapes de sécurisation afin d’assurer la confidentialité, l’intégrité, l’authenticité et la disponibilité des communications de bout en bout. 

Sécurisation du broker MQTT 

Activation du chiffrement par défaut des communications 

Lorsque le port 8883 est l’unique port MQTT défini, les tentatives de communication non-chiffrées sur le broker sont rejetées. Par ailleurs, il est essentiel que le broker ait accès à un certificat ainsi qu’une clé privée valides et que la suite cryptographique utilisée soit sécurisée (par exemple TLS 1.2 ou 1.3).  

Figure 4 – Activation du chiffrement sur un broker MQTT Mosquitto par le biais d’un fichier de configuration 

De nombreux dispositifs IoT ont une faible capacité de calcul et peu de ressources, ajouter des mécanismes tels que TLS peut représenter une surcharge importante. 

Mise en place d’une authentification des clients et d’un contrôle de leurs droits d’accès 

MQTT permet l’authentification des clients se connectant à un broker, via des méthodes courantes telles que l’utilisation d’un nom d’utilisateur et d’un mot de passe (avec un fichier de mot de passe associé) et la vérification du certificat du client, validé par une autorité de certification (le broker devant disposer du certificat de cette autorité). Certains brokers permettent également l’utilisation de solutions d’authentification externes. 

Afin de restreindre l’abonnement ou la publication sur certains topics par les clients, une logique d’Access Control List ou ACL peut être ajoutée.

Figure 5 – Ajout d’une authentification par certificat et mot de passe avec un contrôle d’accès sur un broker MQTT Mosquitto 

Une gestion rigoureuse des topics est essentielle pour prévenir les fuites de données et limiter les risques de compromission du broker. L’utilisation des wildcards # et + doit être attentivement surveillée, car une configuration trop permissive permettrait à un attaquant d’accéder à tous les échanges en cours. 

Déploiement de mesures de protection du broker  

Une rapide recherche sur le moteur Shodan révèle l’exposition de milliers de brokers MQTT sur Internet souvent laissés dans leur configuration par défaut, dont les utilisateurs ignorent l’existence ou les implications. Il est donc primordial de protéger le broker de menaces à la fois internes et externes en appliquant de bonnes pratiques de sécurité, telles que la mise à jour régulière du système ou la restriction du nombre de requêtes et connexions simultanées, pour prévenir les attaques par déni de service et garantir sa disponibilité. 

Sécurisation des clients MQTT 

Activation du chiffrement des communications 

Afin de se connecter sur le broker, les clients devront utiliser le port 8883 et posséder un certificat ainsi qu’une clé privée valides auquel cas la connexion sera rejetée.   

Figure 6 – Connexion chiffrée sur un client MQTT Paho 

L’utilisation de certificats auto-signés pour la connexion au broker est fortement déconseillée car ces derniers peuvent être facilement substitués. 

Mise en place d’une authentification du broker (authentification mutuelle) 

En plus de l’authentification des clients, MQTT permet l’authentification du broker via la vérification de l’autorité de certification ayant signé son certificat, assurant ainsi une authentification mutuelle (mTLS) et la sécurité des communications. 

Figure 7 – Authentification du broker sur un client MQTT Paho 

Déploiement de mesures de protection du client 

En cas de compromission d’un client MQTT, un attaquant pourrait accéder à des nombreuses informations en fonction de la configuration du broker ciblé. C’est pourquoi les clients et leurs secrets doivent aussi être protégés par l’application de bonnes pratiques de sécurité sur la machine hôte du client et sur le contenu des échanges (ajout de mécanismes anti-rejeu sur les requêtes par exemple).  

Quel futur pour MQTT ? 

Malgré sa maturité, MQTT demeure un protocole en évolution et intègre progressivement des fonctionnalités innovantes afin de répondre aux exigences croissantes des environnements connectés. Dans un contexte où la demande pour des communications fiables, sécurisées et à faible consommation d’énergie ne cesse d’augmenter, il est vraisemblable que les cas d’utilisation de MQTT continueront de se multiplier au cours des années à venir.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Back to top