Aller au contenu
Niveau de Sécurité : Risque Critique

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.

Publisher M5Go

SHT31
0x44
BMP280
0x76
TCP Non Chiffré
Port 1883
Charge Utile JSON en Clair

Broker Mosquitto

Broker Ouvert

Accepte les connexions de n'importe quelle IP. Aucune authentification requise.

Implémentation du MQTT non sécurisé

Basic_MQTT.ino
// 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.

Wireshark — Trame 492 (MQTT)
TOPIC m5go/env Longueur : 8
Charge Utile (JSON)
{
"temp_c": 23.4,
"hum_pct": 45.8,
"press_hpa": 1012.1
}

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.

Sortie Réseau
Loading...

Paquet CONNECT

Init. Session
Champs Exposés
ClientID Username Password
Impact

L'attaquant clone votre ClientID pour éjecter le vrai dispositif. Les identifiants circulent en clair.

Paquet SUBSCRIBE

Intérêts
Champs Exposés
Topic Filters QoS Requested
Impact

Révèle votre topologie (ex: usine/machine1) et les commandes attendues par l'appareil.

Paquet PUBLISH

Données
Champs Exposés
Topic Name Payload (JSON)
Impact

Lecture et modification triviale des valeurs capteurs ou des ordres de commande.

Vérification en Direct

Voyez la vulnérabilité en action.

Photo of M5Stack device screen showing 'Connected' status while transmitting data over an insecure channel.

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.

Wireshark capture window showing cleartext JSON payload of an intercepted MQTT packet, revealing temperature and humidity data.

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)

Vulnérabilité

Aucune authentification client. N'importe qui peut envoyer CONNECT avec n'importe quel ClientID.

Impact

Un attaquant peut prétendre être "m5go-123" et publier de fausses données de température.

Falsification (Tampering)

Vulnérabilité

Aucune vérification d'intégrité de message.

Impact

MITM peut intercepter les paquets et changer temp: 23.4 en temp: 99.9 à la volée.

Répudiation (Repudiation)

Vulnérabilité

Aucune signature cryptographique liée à l'identité.

Impact

Comme l'identité n'est pas vérifiée cryptographiquement, un publisher peut nier avoir envoyé un message.

Divulgation d'Info (Information Disclosure)

Vulnérabilité

Charge utile TCP en clair (Pas de Chiffrement).

Impact

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)

Vulnérabilité

Détournement de connexion facile via ID Dupliqué.

Impact

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)

Vulnérabilité

Les ACL reposent sur le Nom d'utilisateur/IP (facilement usurpable).

Impact

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.

Étape suivante

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.