🚌I²C
I squared C
Description
I2C est un bus série synchrone bidirectionnel half-duplex, où plusieurs équipements, maîtres ou esclaves, peuvent être connectés au bus. Les échanges ont toujours lieu entre un seul maître et un (ou tous les) esclave(s), toujours à l'initiative du maître (jamais de maître à maître ou d'esclave à esclave).
Dans le domaine de l'IoT on retrouve principalement l'I²C dans des appareils type claviers, boutons et capteurs en tout genre. L'I²C est un protocole interessant pour un pirate car il ne communique que par un unique bus facilitant de ce fait le travail à un attaquant pour sniffer ou injecter des données via celui-ci.
I²C n'utilise que deux lignes pour communiquer (sans compter la terre):
SDA (Seial Data Line): Pour transmettre des données.
SCL (Serial Clock Line): Pour déterminer quand les données sont lues.
Composition d'un message

Attaque
Pour attaquer un bus I²C, on va utiliser un Bus Pirate et ses pins "COPI" correspondant au SDA pour I²C et "CLK" correspondant au SCL pour I²C (ainsi que le pin GND correspondant à la terre pour les deux). Une fois cela fait, on va pouvoir s'y connecter en passant par la vitesse par défaut de 115 200 bauds avec l'utilitaire screen ou minicom ce cette manière par exemple.
$ screen /dev/ttyUSBX 115200
Détecter les systèmes connectés au bus
Pour énumérer les appareils connectés au bus, on utilise alors la librairie I²C du Bus Pirate.
Pour cela il faut simplement entrer l'instruction "m" et entrer le numéro correspondant au protocole I²C.
>m
1. HiZ
2. 1-WIRE
3. UART
4. I2C
5. SPI
6. 2WIRE
7. 3WIRE
8. LCD
9. DIO
x. exit(without change)
On va ensuite utiliser la macro "adress search" avec la commande "(1)" pour énumérer les appareils connectés au bus.
I2C>(1)
Searching I2C address space. Found devices at:
0x00(0x00 W) 0xFF(0x7F R)
Sniffing et injection de données
Pour sniffer les données transitant par le bus, on va utiliser la seconde macro du Bus Pirate "(2)".
I2C>(2)
Sniffer
Any key to exit
[0x12][0x12+0x63+]][0x12+0x63+0xFF+0xC4+][0x12+0x63+]][0x12+0x63+]]
[0x12+0x63+]][0x12+0x63+]][0x12+0x63+0xFF+0xC4+][0x12+0x63+0xFF+0xC4+]
[0x12+0xC6-0xFD-][0x12+0x63+0xFF+]]
Conversion synthaxe
START
[ ou {
STOP
] ou }
ACK
+
NACK
-
Afin d'injecter des données maintenant, il suffit simplement de noter la commande souhaité avec la synthaxe du Bus Pirate.
Exemple:
I2C>[0x12+0x63+0xFF+0xC4+]
I2C START BIT
WRITE: 0x12 NACK
WRITE: 0x63 NACK
WRITE: 0xFF NACK
WRITE: 0xC4 NACK
I2C STOP BIT
Dernière mise à jour
Cet article vous a-t-il été utile ?