🇫🇷 FCSC 2022 – I2CyouToo – CTF Write up

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!}