Accueil / Interfaces filaires
SPI
Bus série synchrone rapide, très utilisé pour dialoguer avec les mémoires flash — cible privilégiée pour dumper un firmware.
Description
SPI (Serial Peripheral Interface) est un bus série synchrone en full-duplex, conçu par Motorola. Il relie un contrôleur (anciennement master) à un ou plusieurs périphériques (anciennement slaves). Contrairement à l’UART, il partage une horloge, ce qui autorise des débits élevés.
C’est le bus le plus fréquent pour les mémoires flash externes des objets connectés : c’est donc une cible de choix pour extraire le firmware.
Broches
| Principal | Alternatifs |
|---|---|
| SCLK | SCK |
| MOSI | SIMO, SDI, DI, DIN, SI, MTSR |
| MISO | SOMI, SDO, DO, DOUT, SO, MRST |
| SS | S, SSEL, CS, C̅S, CE, NSS, SS# |
- SCLK — l’horloge, générée par le contrôleur, cadence les échanges.
- MOSI (Controller Out / Peripheral In) — données du contrôleur vers le périphérique.
- MISO (Controller In / Peripheral Out) — données du périphérique vers le contrôleur.
- SS/CS (Chip Select) — sélection du périphérique, actif à l’état bas. Chaque périphérique a sa propre ligne CS.
Modes SPI
Le comportement dépend de deux paramètres, la polarité (CPOL) et la phase (CPHA) de l’horloge :
| Mode | CPOL | CPHA |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 2 | 1 | 0 |
| 3 | 1 | 1 |
Le mode 0 est le plus courant. Un mauvais mode donne une lecture incohérente.
Identification
- Les mémoires flash SPI se présentent souvent en boîtier SOIC-8 (parfois WSON/DFN) avec un brochage standard. Les puces marquées
25xxx(ex.W25Q64,MX25L) sont typiquement des flash SPI NOR. - Récupérer la datasheet de la puce donne directement le brochage et la capacité.
- À l’analyseur logique, on reconnaît SPI à ses 3 à 4 lignes synchrones (horloge régulière + deux lignes de données + CS). Le décodeur
spidesigrokreconstruit les octets.
Attacking
Dumper une flash SPI
Deux approches selon que la puce peut rester alimentée par la carte ou non :
- In-circuit avec une pince SOIC-8 (chip clip) : on lit sans dessouder. La carte doit idéalement être hors tension ; certaines cartes « rejouent » sur le bus et perturbent la lecture — il faut alors maintenir le SoC en reset ou dessouder.
- Hors circuit : dessouder la puce et la placer sur un adaptateur.
Avec un programmateur bon marché (CH341A) ou un FT2232 et flashrom :
# Détection de la puce
flashrom -p ch341a_spi
# Lecture complète vers un fichier
flashrom -p ch341a_spi -r dump.bin
# Vérifier deux lectures pour s'assurer de la stabilité
flashrom -p ch341a_spi -r dump1.bin
flashrom -p ch341a_spi -r dump2.bin
sha256sum dump1.bin dump2.bin
On analyse ensuite le dump comme un firmware (binwalk, extraction du système de fichiers, recherche de secrets).
Écriture / persistance
Si la protection en écriture le permet (broche WP), il est possible de réinjecter un firmware modifié — utile pour patcher une vérification ou installer une porte dérobée en laboratoire.
Protections
- Activer la protection en écriture matérielle (WP) et les registres de verrouillage de la flash.
- Chiffrer les données sensibles stockées ; ne pas laisser de secrets en clair sur la flash.
- Utiliser le secure boot pour vérifier l’intégrité du firmware chargé depuis la flash.
Example devices
- Routeurs, caméras, TV connectées et de nombreux SoC stockant leur firmware dans une flash SPI externe.