Accueil / Mémoires & firmware
Analyse de firmware
Extraire, explorer et rétro-analyser le firmware d'un objet connecté pour y trouver secrets et vulnérabilités.
Description
Le firmware est le logiciel embarqué qui fait fonctionner l’objet. L’analyser révèle souvent l’essentiel de la sécurité d’un produit : identifiants en dur, clés cryptographiques, mécanisme de mise à jour, services activés, vulnérabilités logicielles. C’est l’aboutissement naturel d’une extraction de flash ou d’EEPROM.
Obtenir le firmware
Par ordre de difficulté croissante :
- Téléchargement officiel : fichiers de mise à jour sur le site du constructeur (le plus simple).
- Interception d’une mise à jour (OTA) : capturer l’image téléchargée par l’appareil.
- Extraction matérielle : dump de la flash SPI, lecture via JTAG/SWD, ou dump d’une EEPROM.
- Console de boot : récupération via UART/U-Boot.
Analyse initiale
Première inspection d’une image inconnue :
# Type de fichier et signatures
file firmware.bin
# Analyse d'entropie : une zone d'entropie ~1 indique du chiffré ou du compressé
binwalk -E firmware.bin
# Cartographie des signatures (systèmes de fichiers, noyaux, archives…)
binwalk firmware.bin
Lire l'entropie
Une entropie uniformément élevée sur toute l'image suggère un firmware chiffré : il faudra d'abord trouver comment il est déchiffré (souvent au boot, parfois via une clé extractible). Une entropie contrastée indique des sections compressées mêlées à des données en clair.
Extraction du système de fichiers
# Extraction récursive (systèmes de fichiers, archives imbriquées)
binwalk -Me firmware.bin
On obtient fréquemment un système de fichiers SquashFS, JFFS2 ou cramfs. À explorer :
/etc/passwd,/etc/shadow— comptes et hachages,- fichiers de configuration, certificats, clés (
*.pem,*.key), - scripts de démarrage, binaires réseau,
- URLs de mise à jour et jetons.
Recherche de secrets
# Chaînes lisibles (utile sur binaires et blobs de config)
strings -n 8 firmware.bin | less
# Rechercher des motifs sensibles dans l'arborescence extraite
grep -rniE 'password|passwd|secret|api[_-]?key|BEGIN .*PRIVATE KEY' ./_firmware.extracted/
Rétro-analyse des binaires
Pour les binaires sensibles (authentification, mise à jour, crypto) :
- Ghidra (gratuit, décompilateur puissant) ou radare2/Cutter,
- identifier l’architecture (ARM, MIPS…) via
file/readelf, - émulation avec QEMU pour exécuter un binaire ou tout le firmware (firmadyne, FirmAE pour l’émulation de firmwares routeurs).
Ce que l’on cherche in fine
- Identifiants et clés en dur.
- Absence de vérification de signature à la mise à jour (permet d’injecter un firmware modifié).
- Services de debug/backdoors laissés actifs.
- Bibliothèques obsolètes et vulnérables (versions connues → CVE).
Protections (côté défenseur)
- Signer et vérifier les mises à jour ; refuser toute image non signée.
- Chiffrer le firmware au repos ; protéger la clé (élément sécurisé, verrouillage du debug).
- Ne pas stocker de secrets en dur ; utiliser un provisioning par appareil.
- Réduire la surface : retirer les outils de debug et les comptes par défaut en production.