Accueil / Interfaces filaires
I2C
Bus série à deux fils reliant les composants d'une même carte — capteurs, EEPROM, extenseurs d'E/S.
Description
I2C (Inter-Integrated Circuit) est un protocole faible distance utilisé pour la communication entre équipements souvent situés sur la même carte. Il a été inventé par Philips.
L’architecture se compose de deux fils partagés par tous les composants du bus :
SDA
SDA (Serial Data) transporte les données, dans les deux sens (half-duplex). La ligne est à drain ouvert et nécessite une résistance de pull-up vers VCC.
SCL
SCL (Serial Clock) porte l’horloge générée par le contrôleur. Également à drain ouvert avec pull-up.
Adressage
Chaque périphérique possède une adresse (7 bits le plus souvent, parfois 10). Le contrôleur commence une transaction par un bit de start, l’adresse cible, puis un bit lecture/écriture. Plusieurs périphériques peuvent coexister sur le même bus tant que leurs adresses diffèrent. Certaines puces (comme les EEPROM 24LCxx) laissent régler une partie de l’adresse via des broches A0/A1/A2.
Identification
- Repérer deux lignes accompagnées de résistances de pull-up : bon indice d’un bus I2C.
- À l’analyseur logique, le décodeur
i2cdesigrokreconstruit les conditions de start/stop, les adresses et les octets. - Depuis un contrôleur Linux (Raspberry Pi, Bus Pirate en mode I2C), scanner le bus :
# Lister les bus I2C
i2cdetect -l
# Scanner les adresses présentes sur le bus 1
i2cdetect -y 1
Chaque adresse qui répond correspond à un composant : capteur, EEPROM, extenseur d’E/S, écran…
Attacking
Lecture / écriture directe
Une fois l’adresse connue, on lit et on écrit les registres :
# Lire un octet au registre 0x00 du composant 0x50
i2cget -y 1 0x50 0x00
# Écrire une valeur dans un registre
i2cset -y 1 0x50 0x01 0xff
Dump d’une EEPROM I2C
De nombreuses EEPROM sont sur bus I2C et stockent configuration, calibrations, voire secrets. Elles se dumpent facilement — voir le cas pratique complet : Dump d’une EEPROM 24LC256.
Interception (MITM)
Le bus étant partagé, un attaquant physiquement présent peut écouter le trafic (sniff) ou, plus intrusif, rejouer/injecter des commandes pour manipuler un capteur ou une configuration.
Protections
- Ne pas stocker de secrets en clair dans les EEPROM I2C.
- Contrôler l’intégrité des données lues (le firmware ne doit pas faire aveuglément confiance au bus).
- Restreindre l’accès physique à la carte.
Example devices
- Capteurs (température, accéléromètres), horloges temps réel (RTC), EEPROM de configuration, écrans OLED, extenseurs GPIO.