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.

Complet #spi#flash#bus

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

PrincipalAlternatifs
SCLKSCK
MOSISIMO, SDI, DI, DIN, SI, MTSR
MISOSOMI, SDO, DO, DOUT, SO, MRST
SSS, 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 :

ModeCPOLCPHA
000
101
210
311

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 spi de sigrok reconstruit 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.

Ressources