🪢SPI

Serial Peripheral Interface

Description

Une liaison SPI est un bus de données série synchrone baptisé ainsi par Motorola, au milieu des années 1980 qui opère en mode full-duplex. Les circuits communiquent selon un schéma maître-esclave, où le maître contrôle la communication.

SPI utilise les quatre lignes suivantes pour communiquer (sans compter la terre):

  • CIPO (Controller In, Peripheral Out): Pour les messages envoyés des périphériques au contrôleur.

  • COPI (Controller Out, Peripheral In): Pour les messages envoyés du contrôleur aux périphériques.

  • SCK (Serial Clock): Pour un signal oscillant qui indique quand les appareils doivent lire les lignes de données.

  • CS (Chip Select): Pour sélectionner le périphérique qui doit recevoir les données.

SPI est plus simple et plus rapide que l'UART ce qui en fait une technologie plus utilisé que l'UART dans le domaine de l'IoT.

Dumper l'EEPROM via SPI

Les puces de mémoire flash contiennent souvent le micrologiciel de l'appareil et d'autres éléments importants, ce qui en fait une cible idéal pour un pirate.

Identifier la puce et les pins

Les puces de mémoire flash sont généralement constitués de 8 ou 16 pins, il est également possible de retrouver ces informations via la datasheet du produit retrouvable sur le site du fabriquant ou sur le web. Une fois la puce identifiée, on devrait être capable de trouver le premier pin en se fiant au point se trouvant normalement sur l'un des coin de la puce.

Une fois les pins identifiés, il est alors possible d'y brancher une pince SOIC 8 ou 16 pattes selon la puce.

Communication

Une fois le branchement effectué, on va ensuite utiliser un adaptateur USB to serial type Bus Pirate pour permettre de faire le lien entre l'EEPROM et notre PC.

On va ensuite utiliser l'utilitaire flashrom disponible nativement dans linux pour interagir avec la puce.

Dans un premier temps, on va vérifier si l'appareil est connecté avec la commande:

$ ls /dev/tty*

On va ensuite utiliser la commande $ flashrom -p buspirate_spi:dev=/dev/ttyUSBX avec X = numéro associé à l'appareil connecté.

Cette commande identifiera alors la puce SPI ou renverra No EEPROM/flash device found si il est incapable de l'identifier.

Lire le contenu de la puce

Pour lire le contenu de la puce, on va d'abord utiliser la commande:

$ flashrom -p buspirate_spi:dev=/dev/ttyUSBX -r out.bin

Puis afin d'obtenir un résultat lisible, on va utiliser le script spiflash.py de libmpsse.*

ressource: https://github.com/devttys0/libmpsse

Installation:

$ git clone https://github.com/devttys0/libmpsse
$ cd libmpsse
$ ./configure && make
$ make install

Utilisation:

$ spiflash.py -r out.bin -s $((<taille des données à lire>))

Exemple pour 8MB:

$ spiflash.py -r out.bin -s $((0x800000))

Dernière mise à jour