Surface d'attaque IoT¶
Un système IoT expose des dizaines de vecteurs d'attaque hétérogènes — comprendre la surface complète est le préalable indispensable à toute défense efficace.
Les six familles de vecteurs¶
1. Attaques physiques¶
L'accès physique à un device IoT — même quelques minutes — peut compromettre l'ensemble du système. Les attaquants disposent d'une boîte à outils spécialisée :
Dump flash. La mémoire flash non protégée se lit directement avec un programmateur SOIC-8 (Bus Pirate, FT232H). En quelques minutes, l'attaquant obtient le firmware complet, les clés en clair éventuelles, les certificats.
Débogage JTAG/SWD. Les interfaces de débogage laissées actives en production permettent l'accès complet à la mémoire, l'arrêt du processeur, la modification du code à chaud. Le standard JTAG (IEEE 1149.1) est présent sur la quasi-totalité des MCU ARM.
Glitching. Les attaques par injection de faute (voltage glitching, clock glitching, EM injection) peuvent contourner les vérifications de signature en forçant des sauts d'instructions au bon moment. Des outils comme le ChipWhisperer permettent ces attaques à moins de 300 €.
Side-channel. L'analyse de consommation (SPA/DPA) ou d'émissions électromagnétiques (EMA) permet d'extraire des clés cryptographiques si l'implémentation n'est pas protégée.
2. Attaques réseau¶
Sniffing radio. Les communications sans fil non chiffrées (Zigbee sans AES, LoRa en clair, BLE advertising) s'écoutent avec un simple récepteur SDR (RTL-SDR à 20 €, HackRF, YARD Stick One). Les trames capturées révèlent les protocoles, les identifiants, parfois les commandes de contrôle.
Replay. Sans numéro de séquence ou nonce, un message capturé peut être rejoué pour déclencher une action : ouverture de porte, activation d'actionneur, fausse lecture de capteur.
Man-in-the-Middle (MitM). Sans validation de certificat côté device, un attaquant peut intercepter et modifier le trafic entre le device et le broker MQTT ou le cloud.
Déni de service (DoS) radio. Le brouillage ciblé d'une fréquence (868 MHz, 2,4 GHz) neutralise des zones entières de déploiement.
3. Attaques firmware¶
Rétro-ingénierie (RE). Un firmware extrait se décompile avec Ghidra (NSA), IDA Pro, ou Binary Ninja. Les fonctions crypto, les hardcoded credentials et les URLs backend deviennent lisibles.
Injection de code. Les mises à jour OTA non sécurisées (pas de vérification de signature, transport HTTP) permettent de pousser un firmware malveillant sur l'ensemble du parc.
Vulnérabilités mémoire. Les firmwares C/C++ sans protection (stack canaries, ASLR, NX bit) sont vulnérables aux buffer overflows classiques si l'interface réseau est exposée.
4. Attaques cloud et API¶
Credentials en clair. Les clés API, tokens MQTT, mots de passe codés en dur dans le firmware ou dans les fichiers de configuration sont la première cible lors d'un audit.
API non authentifiées. Les endpoints de gestion (shadow IoT, OTA backend, device registry) sans authentification forte exposent l'ensemble du parc à une prise de contrôle massive.
Privilege escalation. Un device compromis peut tenter d'accéder aux données d'autres devices dans un tenant mal isolé (confused deputy attack).
5. Attaques supply chain¶
Composants contrefaits. Des circuits intégrés contrefaits ou modifiés à la fabrication (hardware trojans) peuvent contenir des backdoors indétectables.
Firmware de développement en production. Des firmwares livrés avec des interfaces de debug actives, des clés de test, ou des fonctionnalités désactivables par flag.
Dépendances logicielles. Les bibliothèques open source embarquées (mbed TLS, LwIP, FreeRTOS) peuvent contenir des CVE non patchées si aucun processus de suivi des vulnérabilités n'existe.
6. Ingénierie sociale et insider¶
Les opérateurs ayant accès aux systèmes de configuration et de mise à jour représentent un vecteur souvent négligé dans les analyses de risque IoT industriel.
Kill chain IoT¶
La kill chain IoT adapte le modèle Lockheed Martin à la réalité des systèmes embarqués. Un attaquant sophistiqué progresse méthodiquement :
flowchart TD
A["1. Reconnaissance\nCartographie du parc\nIdentification des modèles\nRecherce CVE publiques"] --> B["2. Accès initial\nDump flash physique\nSniffing radio\nFirmware OTA non signé"]
B --> C["3. Persistance\nModification firmware\nBackdoor bootloader\nCertificat rouge ajouté"]
C --> D["4. Élévation de privilèges\nJTAG débogage\nGlitching secure boot\nExploitation buffer overflow"]
D --> E["5. Mouvement latéral\nPivot vers réseau OT\nAccès broker MQTT\nDisposition device fleet"]
E --> F["6. Impact\nSabotage process industriel\nVol de données\nRançongiciel OT\nDéni de service physique"]
style A fill:#fff3e0
style B fill:#ffccbc
style C fill:#ef9a9a
style D fill:#e57373
style E fill:#d32f2f,color:#fff
style F fill:#b71c1c,color:#fff Surface d'attaque par couche¶
graph TB
subgraph PHY["Couche physique"]
P1["Flash non protégée"]
P2["JTAG/SWD actif"]
P3["Glitching / side-channel"]
P4["Debug UART en clair"]
end
subgraph FW["Firmware"]
F1["Credentials codés en dur"]
F2["Pas de vérification OTA"]
F3["CVE bibliothèques embarquées"]
F4["Stack overflow réseau"]
end
subgraph NET["Réseau"]
N1["Radio non chiffrée"]
N2["Replay d'ordres"]
N3["MitM / pas de cert pinning"]
N4["Brouillage DoS"]
end
subgraph CLOUD["Cloud / backend"]
C1["API sans auth forte"]
C2["Tokens en dur firmware"]
C3["OTA backend non signé"]
C4["Multi-tenant mal isolé"]
end
subgraph SUPPLY["Supply chain"]
S1["Hardware trojans"]
S2["Firmware de dev en prod"]
S3["Dépendances CVE non patchées"]
end
PHY --> FW
FW --> NET
NET --> CLOUD
SUPPLY -.->|"contamine"| PHY
SUPPLY -.->|"contamine"| FW Évaluation rapide des risques par vecteur¶
| Vecteur | Accessibilité | Impact | Difficulté attaquant | Priorité défense |
|---|---|---|---|---|
| Dump flash (physique) | Élevée | Critique | Faible (outillage ~50 €) | CRITIQUE |
| JTAG/SWD actif | Élevée | Critique | Faible | CRITIQUE |
| OTA sans signature | Élevée (réseau) | Critique | Moyenne | CRITIQUE |
| Credentials codés en dur | Élevée | Élevé | Faible (strings firmware) | CRITIQUE |
| Sniffing radio | Moyenne | Moyen | Faible (SDR 20 €) | ÉLEVÉE |
| Replay d'ordres | Moyenne | Élevé | Faible | ÉLEVÉE |
| MitM (pas de mTLS) | Moyenne | Élevé | Moyenne | ÉLEVÉE |
| CVE dépendances | Élevée | Variable | Variable | ÉLEVÉE |
| Glitching | Faible (accès physique long) | Critique | Élevée | MOYENNE |
| Side-channel | Faible | Élevé | Très élevée | MOYENNE |
| Hardware trojans | Très faible | Critique | Très élevée | SURVEILLANCE |
Modèle de menace STRIDE appliqué à l'IoT¶
Le modèle STRIDE (Microsoft) s'applique naturellement aux systèmes IoT :
| Menace | Description | Exemple IoT |
|---|---|---|
| Spoofing | Usurpation d'identité | Faux device avec certificat volé |
| Tampering | Altération de données | Modification de mesures capteur en transit |
| Repudiation | Déni d'action | Aucun log d'audit d'action de commande |
| Information disclosure | Fuite de données | Firmware en clair avec clés API |
| Denial of Service | Indisponibilité | Brouillage radio, flood MQTT |
| Elevation of privilege | Escalade | Device compromis accédant au broker |
Ce qu'il faut retenir¶
- La surface d'attaque IoT est multidimensionnelle : physique, firmware, réseau, cloud et supply chain sont tous des vecteurs réels.
- Les attaques les plus courantes en production sont les plus simples : credentials en dur, JTAG actif, OTA sans signature.
- La kill chain IoT est progressive — chaque étape non sécurisée augmente le rayon d'explosion d'une compromission initiale.
- Modéliser les menaces (STRIDE, PASTA) avant de concevoir, pas après.
Chapitre suivant : Secure Boot & Root of Trust — comment ancrer la confiance dans le silicium pour résister aux attaques physiques et firmware.