MQTT En Clair
L'étape 1 présente une implémentation de base utilisant MQTT Plaintext sur le port TCP 1883. Cette architecture ne fournit aucune sécurité de couche transport, exposant tous les paquets de télémétrie au sniffing.
Architecture Système
Une décomposition visuelle du flux de données dans l'environnement MQTT par défaut. Notez l'absence de couches de sécurité dans le chemin de transmission.
Implémentation du MQTT non sécurisé
// Configuration Minimaliste (Non Sécurisée) const char* mqtt_server = "192.168.1.100"; const int mqtt_port = 1883; WiFiClient espClient; // Client TCP standard PubSubClient client(espClient); void setup() { // Connexion en clair : aucune validation client.setServer(mqtt_server, mqtt_port); if (client.connect("M5Stack_Plain")) { // Danger : Cette payload circule en texte brut ! client.publish("m5go/env", "{\"temp\":24}"); } }
Transport TCP Brut
L'usage du port 1883 implique un transport de données non chiffré. En l'absence de couche de sécurité transport (TLS/SSL), le flux TCP circule sans protection cryptographique, rendant le contenu des paquets lisible par toute écoute réseau.
Aucune Validation
La fonction client.setServer() accepte aveuglément l'IP cible.
Contrairement aux clients HTTPS, il n'y a aucune vérification de l'identité du
serveur (pas de certificat X.509). Le client peut être redirigé vers un broker
malveillant sans le savoir (Man-in-the-Middle).
Et donc, qu'est-ce qui fuite sur le réseau ?
En MQTT clair, la charge utile TCP est complètement transparente. Interagissez avec le paquet ci-dessous pour voir exactement ce qu'un attaquant observe.
Identifier le risque
Cliquez sur les zones en surbrillance ci-dessus (Topic ou Charge Utile) pour révéler quelles informations un attaquant peut extraire de cette partie spécifique du paquet.
Simulateur de Paquet
Générer une trame hex brute.
Paquet CONNECT
L'attaquant clone votre ClientID pour éjecter le vrai dispositif. Les identifiants circulent en clair.
Paquet SUBSCRIBE
Révèle votre topologie (ex: usine/machine1) et les commandes attendues par
l'appareil.
Paquet PUBLISH
Lecture et modification triviale des valeurs capteurs ou des ordres de commande.
Vérification en Direct
Voyez la vulnérabilité en action.
Publisher
Le M5Stack est connecté à un broker local. Il publie des métriques de
capteurs
(Temp: 24.1°C, Hum: 56.4%, Press: 998.4 hPa) sur le topic m5go/env.
La Vue de l'Attaquant
Une capture Wireshark passive révèle tous les échanges. L'attaquant peut voir exactement les mêmes valeurs dans la charge utile TCP. Cela prouve qu'aucun chiffrement n'est appliqué. La structure JSON est complètement visible, permettant des attaques simples de scraping ou de modification de données.
Analyse de Menace (STRIDE)
L'application du modèle STRIDE à une implémentation MQTT claire révèle des Lacunes Critiques dans tous les domaines de sécurité.
Usurpation (Spoofing)
Aucune authentification client. N'importe qui peut envoyer CONNECT avec n'importe quel ClientID.
Un attaquant peut prétendre être "m5go-123" et publier de fausses données de température.
Falsification (Tampering)
Aucune vérification d'intégrité de message.
MITM peut intercepter les paquets et changer temp: 23.4 en temp: 99.9 à la volée.
Répudiation (Repudiation)
Aucune signature cryptographique liée à l'identité.
Comme l'identité n'est pas vérifiée cryptographiquement, un publisher peut nier avoir envoyé un message.
Divulgation d'Info (Information Disclosure)
Charge utile TCP en clair (Pas de Chiffrement).
Parce que le trafic n'est pas chiffré, les attaquants passifs sur le chemin peuvent lire les conditions environnementales précises.
Déni de Service (Denial of Service)
Détournement de connexion facile via ID Dupliqué.
Parce que le broker accepte toute connexion avec un ClientID connu, un attaquant peut détourner la session et déconnecter le dispositif légitime.
Élévation (Elevation of Privilege)
Les ACL reposent sur le Nom d'utilisateur/IP (facilement usurpable).
Comme IP/Nom d'utilisateur peuvent être usurpés, un attaquant peut contourner les ACL et obtenir un accès privilégié.
Points Clés
Pourquoi MQTT en texte clair est un risque critique pour tout environnement de production.
Zéro Confidentialité
Le trafic est envoyé en clair. N'importe qui sur le réseau local (ou routeur compromis) peut lire des données sensibles comme les valeurs des capteurs, les ID utilisateurs et les commandes de contrôle en temps réel.
Pas de Contrôle d'Intégrité
Sans signatures numériques, il n'y a aucun moyen de vérifier si un message a été altéré en transit. Les attaquants peuvent injecter de fausses données sans détection.
Trivial à Exploiter
Des outils standards comme Wireshark ou `mosquitto_sub` peuvent capturer instantanément tout le trafic. Aucune compétence avancée en piratage n'est requise pour compromettre le système.
La Solution : mTLS
Pour sécuriser ce canal, nous devons implémenter le TLS Mutuel. Cela fournit un chiffrement fort, une vérification de l'identité du serveur et une authentification du client.
Ajouter le TLS mutuel pour protéger le canal
MQTT clair est une base utile, mais ne doit jamais être utilisé pour la télémétrie sensible. Dans la prochaine étape, MQTT est encapsulé dans TLS (port 8883) avec authentification mutuelle.