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.

Complet #firmware#binwalk#reverse

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 :

  1. Téléchargement officiel : fichiers de mise à jour sur le site du constructeur (le plus simple).
  2. Interception d’une mise à jour (OTA) : capturer l’image téléchargée par l’appareil.
  3. Extraction matérielle : dump de la flash SPI, lecture via JTAG/SWD, ou dump d’une EEPROM.
  4. 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.

Ressources