Description
Un ami vous affirme qu’une EEPROM de 1024 bits branchĂ©e Ă son Arduino est une solution extrĂŞmement sĂ©curisĂ©e pour stocker ses secrets, vu que le protocole utilisĂ© est "obfusquĂ©" et "bas niveau" selon ses dires, "pas comme l’USB qui est hotplug et qu’on peut brancher directement sur n’importe quel OS !".
Voulant le confronter Ă ses inepties, vous sortez votre analyseur logique pour sniffer la communication entre l’Arduino et l’EEPROM lorsqu’il tape son secret. Pourrez-vous remonter Ă ce dernier avec vos logiciels Sigrok et gtkwave ?
Ouverture du fichier
On nous donne un fichier vdc
. La description nous permet de deviner qu’il faut l’ouvrir avec Sigrok. On obtient le rĂ©sultat suivant :
Après quelques recherches je comprends c’est une capture d’une communication I2C. Il s’agit d’une communication sĂ©rie synchrone bidirectionnelle half-duplex.
I2C est un protocole de communication sĂ©rie synchrone bidirectionnelle half-duplex qui permet Ă un microcontrĂ´leur d’interagir avec une grande quantitĂ© de pĂ©riphĂ©riques en utilisant uniquement deux lignes de transmission (on l’appelle d’ailleurs parfois "Two Wire Interface").
SĂ©rie
: contrairement à une communication parallèle tous les bits sont transmis les uns à la suite sur un même fil.
Synchrone
: La transmission organisé grâce à une horloge qui sert de référence à tous les appareils impliqués dans la communication.
Ce signal d’horloge partagĂ© Ă tous les appareils via un fil "serial clock" (SCL)
Bi-directionnelle
: car l’information peut ĂŞtre transmise dans les 2 sens (du contrĂ´leur vers le pĂ©riphĂ©rique et inversement)
Half-duplex
: Lorsque le fil de transmission de données est utilisé (la ligne SDA "serial data"), alors les informations ne peuvent circuler que dans une direction à la fois.
Une fois que l’on comprend cela. Le challenge est en fait presque fini.
Identification de 2 canaux de transmission
Dans le logiciel pulseview, on peut indiquer quel est le protocole à analyser. On obtient alors une analyse des informations échangées.
En augmentant le zoom on distingue des valeurs en hexadécimale :
En lisant la documentation, on comprend qu’avant chaque Ecriture "Data write", l’adresse de l’Ă©criture est envoyĂ©e.
Capture the flag
En reconstituant la donnĂ©e Ă©crite dans une liste d’adresse contigue on obtient l’hexadecimal suivant :
464353437B4D592D50524543494F55532D504C454153452D535441592D534543524554217D
Ce qui donne le flag suivant :
FCSC{MY-PRECIOUS-PLEASE-STAY-SECRET!}