Audit & réponse à incident IoT¶
Tester la sécurité d'un système IoT avant qu'un attaquant ne le fasse — et savoir réagir efficacement quand la compromission survient malgré tout.
La démarche d'audit IoT¶
Un audit de sécurité IoT est fondamentalement différent d'un test d'intrusion web classique. Il combine des compétences en électronique (analyse matérielle), en systèmes embarqués (firmware, protocoles bas niveau), en réseau (sniffing radio, protocoles industriels), et en cloud (APIs, backend IoT).
L'objectif d'un audit défensif est d'identifier les vulnérabilités avant un attaquant réel, de les documenter, et d'établir un plan de remédiation priorisé par risque.
Outillage du pentesteur IoT¶
Analyse matérielle et firmware¶
| Outil | Catégorie | Usage |
|---|---|---|
| Binwalk | Firmware analysis | Extraction de systèmes de fichiers embarqués, identification de composants |
| Ghidra (NSA) | Reverse engineering | Décompilation binaire multi-architecture (ARM, MIPS, RISC-V) |
| IDA Pro / IDA Free | Reverse engineering | Analyse statique firmware, graphe d'appel |
| Radare2 / Cutter | Reverse engineering | Open source, analyse statique et dynamique |
| GDB + OpenOCD | Debug runtime | Débogage via JTAG/SWD, breakpoints, inspection mémoire |
| ChipWhisperer | Side-channel / glitching | Attaques sur crypto, contournement secure boot |
| Bus Pirate | Interfaces séries | UART, I²C, SPI — lecture flash, communication avec debug |
| FT232H / FTDI | Programmation flash | Dump mémoire flash SOIC-8 en circuit |
| J-Link / SEGGER | Debug JTAG | Accès debug professionnel sur MCU ARM |
| Flashrom | Dump flash | Lecture/écriture flash SPI NOR/NAND |
Analyse réseau et radio¶
| Outil | Catégorie | Usage |
|---|---|---|
| Wireshark | Sniffing réseau | Capture et analyse protocoles IP, MQTT, CoAP |
| MQTT Explorer | Analyse MQTT | Inspection arbre de topics, test ACL |
| Scapy | Forge de paquets | Construction et injection de trames personnalisées |
| RTL-SDR | SDR radio | Sniffing 868 MHz, 433 MHz, 2,4 GHz |
| YARD Stick One | Radio 433-915 MHz | Capture et replay de commandes radio |
| HackRF One | SDR broadband | Analyse 1 MHz - 6 GHz |
| Attify Zigbee Framework | Zigbee | Capture, injection, attaques sur Zigbee |
| BtleJuice / BTLE-Sniffer | Bluetooth LE | MITM BLE, sniffing communication |
| LoRa/LoRaWAN Scanner | LoRaWAN | Scan réseaux LoRaWAN, capture trames |
Environnements et frameworks¶
| Outil | Usage |
|---|---|
| Attify Badge | Plateforme d'attaque IoT tout-en-un |
| EMBA | Analyse automatisée de firmware (CI/CD security) |
| Firmwalker | Extraction automatique credentials, clés, URLs depuis firmware |
| RouterSploit | Framework d'exploitation de devices réseau embarqués |
| Expliot | Framework de test d'intrusion IoT (industriel, BLE, MQTT) |
Méthodologie d'audit IoT¶
Phase 1 : Reconnaissance passive¶
Avant tout accès au device :
- Collecte OSINT : notices, datasheets publics, CVE liées aux composants identifiés
- Analyse des applications mobiles associées (décompilation APK, extraction API endpoints)
- Recherche firmware sur le site fabricant ou via Google (site:manufacturer.com firmware)
- Scan SHODAN/Censys pour identifier les instances du même device exposées sur Internet
Phase 2 : Analyse matérielle¶
flowchart LR
DISS["Dissection\ndu device"]
PCB["Analyse PCB\nIdentification SoC, flash\nUART, JTAG pads"]
CONS["Test connectivité\nMultimètre, oscilloscope\nIdentification UART (bauds)"]
DUMP["Dump flash\nSoIC clip ou soudure\nFT232H + Flashrom"]
JTAG["Test JTAG\nOpenOCD + GDB\nSi non locké"]
DISS --> PCB
PCB --> CONS
CONS --> DUMP
CONS --> JTAG Identification des interfaces UART :
- Mesurer la tension de chaque pin inconnu (VCC, GND, TX, RX, ou DTR/RTS)
- TX émet des données au démarrage — oscilloscope ou analyseur logique
- Calculer le baud rate depuis la largeur du bit le plus court
- Typiques : 115200, 57600, 9600 bauds
Phase 3 : Analyse firmware¶
flowchart TD
BIN["firmware.bin\n(extrait ou téléchargé)"]
BINWALK["Binwalk\nIdentification sections\nExtraction FS"]
STRINGS["Strings / Firmwalker\nCredentials, URLs, clés\nConfiguration hardcodée"]
GHIDRA["Ghidra / IDA\nRétro-ingénierie binaire\nFonctions crypto, réseau"]
CVE["Analyse dépendances\nBusyBox version, OpenSSL\nCVE lookup"]
EMBA["EMBA / FACT\nAnalyse automatisée\nRapport vulnérabilités"]
BIN --> BINWALK
BINWALK --> STRINGS
BINWALK --> GHIDRA
BINWALK --> CVE
BIN --> EMBA Phase 4 : Tests dynamiques¶
- Tests d'authentification : credentials par défaut, brute force, bypass
- Fuzzing des interfaces réseau exposées (MQTT, HTTP, CoAP)
- Tests OTA : replay de manifests, intégrité de signature
- Tests de cloisonnement réseau : escape de VLAN, pivot
Checklist d'audit IoT¶
Sécurité physique et matérielle¶
| Contrôle | Critique | Statut |
|---|---|---|
| Interfaces de debug (JTAG/SWD) désactivées en production | OUI | ☐ |
| UART de production silencieuse ou en lecture seule | OUI | ☐ |
| Flash en lecture protégée (RDP, efuses) | OUI | ☐ |
| Anti-tampering actif (mesh, capteur lumière) | SELON USAGE | ☐ |
| Pas de connecteurs de debug accessibles sans ouverture boîtier | OUI | ☐ |
| Boîtier vissé / inviolable (vis Torx ou collé) | SELON USAGE | ☐ |
Secure boot et firmware¶
| Contrôle | Critique | Statut |
|---|---|---|
| Secure boot activé (vérification signature chaîne complète) | OUI | ☐ |
| Signature ECDSA P-256 ou Ed25519 (pas MD5/SHA1) | OUI | ☐ |
| Compteur monotone anti-downgrade actif | OUI | ☐ |
| Clé de signature hors du firmware (HSM) | OUI | ☐ |
| Pas de credentials codés en dur dans le firmware | OUI | ☐ |
| Bibliothèques sans CVE connues (< 6 mois) | OUI | ☐ |
| Mécanisme de rollback A/B fonctionnel | OUI | ☐ |
Réseau et communications¶
| Contrôle | Critique | Statut |
|---|---|---|
| TLS 1.3 (ou minimum TLS 1.2) sur tous les flux | OUI | ☐ |
| mTLS device-to-cloud (authentification mutuelle) | OUI | ☐ |
| Certificat X.509 unique par device (pas de certificat partagé) | OUI | ☐ |
| Certificate pinning ou validation CA stricte | OUI | ☐ |
| Pas de connexions HTTP en clair | OUI | ☐ |
| Pas de services inutiles ouverts (port scan) | OUI | ☐ |
| Segmentation VLAN IoT / IT en place | OUI | ☐ |
| ACL MQTT par topic et par device | OUI | ☐ |
Gestion des identités¶
| Contrôle | Critique | Statut |
|---|---|---|
| Clé privée dans secure element (non extractible) | OUI | ☐ |
| Processus de révocation < 1h | OUI | ☐ |
| Rotation de certificats avant expiration automatisée | OUI | ☐ |
| Audit log des connexions device | OUI | ☐ |
Conformité et processus¶
| Contrôle | Critique | Statut |
|---|---|---|
| Politique de divulgation de vulnérabilités publiée | OUI | ☐ |
| Processus de veille CVE sur composants embarqués | OUI | ☐ |
| Plan de réponse à incident documenté et testé | OUI | ☐ |
| SBOM (Software Bill of Materials) à jour | OUI | ☐ |
Forensics embarqué¶
Lorsqu'un device est suspecté d'être compromis, l'investigation forensique embarquée suit une méthodologie spécifique.
Préservation des preuves¶
L'ordre de volatilité en embarqué (du plus volatile au moins volatile) :
- Registres CPU et RAM (perdus à l'extinction)
- Mémoire cache
- Processus en cours d'exécution, connexions réseau
- Système de fichiers en RAM (tmpfs)
- Flash interne (persistante)
- EEPROM externe
- Logs cloud (si synchronisés)
Règle fondamentale : ne jamais éteindre le device suspecté avant d'avoir capturé la RAM si possible.
Dump mémoire live via JTAG¶
Si le device est accessible physiquement et que JTAG n'est pas verrouillé (ou en cours d'audit autorisé) :
# OpenOCD + GDB — dump RAM complète
openocd -f interface/jlink.cfg -f target/stm32f4x.cfg
# Dans GDB :
(gdb) target remote localhost:3333
(gdb) dump binary memory ram_dump.bin 0x20000000 0x20020000
(gdb) dump binary memory flash_dump.bin 0x08000000 0x08100000
Analyse post-mortem du dump flash¶
# Analyse structure firmware
binwalk -e firmware_dump.bin
# Recherche de credentials et artefacts suspects
firmwalker ./firmware_dump/
# Analyse strings sensibles
strings firmware_dump.bin | grep -E "(password|key|token|secret|BEGIN CERTIFICATE)"
# Comparaison avec firmware officiel (détection de modification)
sha256sum firmware_officiel.bin firmware_dump.bin
diff <(strings firmware_officiel.bin) <(strings firmware_dump.bin)
Plan de réponse à incident IoT¶
Les 6 phases (NIST SP 800-61 adapté IoT)¶
flowchart LR
P1["1. Préparation\nProcédures documentées\nOutillage prêt\nContacts d'urgence"]
P2["2. Détection\nAnomalie réseau\nAlerte SOC\nSignalement terrain"]
P3["3. Confinement\nIsoler device du réseau\nRévoquer certificat\nBlocker broker MQTT"]
P4["4. Éradication\nAnalyse forensique\nIdentifier la cause\nNettoyer / rebuilder"]
P5["5. Récupération\nRe-provisionner\nTest de sécurité\nSurveillance renforcée"]
P6["6. Retour d'expérience\nPost-mortem\nMise à jour procédures\nCommunication"]
P1 --> P2 --> P3 --> P4 --> P5 --> P6
P6 -.->|"amélioration continue"| P1 Actions de confinement immédiates¶
| Délai | Action | Responsable |
|---|---|---|
| < 15 min | Révoquer certificat device dans la CA | Équipe sécurité |
| < 15 min | Bloquer device sur le broker MQTT (ACL deny) | Ops IoT |
| < 15 min | Isoler le VLAN IoT si contamination multiple | NetOps |
| < 1h | Notifier les équipes métier impactées | RSSI |
| < 4h | Extraire logs device + broker pour forensique | Équipe sécu |
| < 24h | Évaluer impact opérationnel (production arrêtée ?) | Direction technique |
| < 72h | Notifier CNIL si données personnelles impactées (RGPD) | DPO |
Matrice de décision : isolation vs continuité¶
| Situation | Décision recommandée |
|---|---|
| Device unique, non critique, compromission avérée | Isolation immédiate + forensique |
| Device critique dans process de production | Isolation après transfert de charge + notification ops |
| Multiple devices compromis, propagation active | Isolation zone VLAN complète + cellule de crise |
| Suspicion sans certitude, production critique | Surveillance renforcée + préparation isolement |
| Ransomware OT actif | Isolation totale, activation PCA, contact ANSSI |
Disclosure responsable (Responsible Disclosure)¶
Quand vous découvrez une vulnérabilité dans un produit IoT, la disclosure responsable (Coordinated Vulnerability Disclosure — CVD) est la démarche éthique et légalement recommandée.
Processus CVD¶
- Documenter la vulnérabilité : preuve de concept, versions affectées, impact estimé
- Identifier le contact sécurité du fabricant (security@, CERT, page Bugbounty, RFC 9116
.well-known/security.txt) - Notifier en privé avec un délai de correction raisonnable (90 jours, norme Google Project Zero)
- Suivre la correction et maintenir la communication avec le fabricant
- Publication coordonnée après correction ou à l'échéance du délai
- Attribution CVE via MITRE si vulnérabilité significative
Ressources de notification¶
| Ressource | Usage |
|---|---|
| CERT-FR (ANSSI) | Signalement incidents en France, assistance PME |
| CVE Program (MITRE) | Attribution d'identifiant CVE |
| ICS-CERT (CISA) | Vulnérabilités ICS/SCADA (US, international) |
| Bugcrowd / HackerOne | Programmes de bug bounty privés et publics |
| Full Disclosure (Oss-sec) | Publication de dernier recours après délai expiré |
Ce qu'il faut retenir¶
- Un audit IoT combine électronique, firmware, réseau et cloud — il nécessite une équipe aux compétences transverses.
- La checklist d'audit est un outil vivant : l'adapter au contexte (SL cible IEC 62443, provisions ETSI 303 645 applicables).
- En cas d'incident, le confinement (révocation certificat + blocage broker) doit intervenir en moins de 15 minutes.
- La forensique embarquée commence par préserver la volatilité — ne pas éteindre avant d'avoir capturé la RAM.
- La disclosure responsable protège les utilisateurs finaux tout en permettant au fabricant de corriger dans un délai raisonnable.
Retour : Systèmes Embarqués & IoT — retour à l'index du tutoriel.