SSTIC 2013 - Compromission d'un terminal sécurisé

Compromission d’un terminal sécurisé via l’interface carte à puce

par Guillaume Vinet

La carte à puce, c’est génial, on peut y stocker plein de secrets, mais bon, faut pouvoir identifier l’utilisateur qui la détient… et là, faut bien mettre son code pin dans le PC, et donc il peut potentiellement se faire intercepter. D’où le Terminal Sécurisé que l’on branche directement en USB sur le PC, qui fonctionne comme un lecteur de carte à puce qui sécurise la saisie du code PIN.

Lorsque le terminal sert pour la vérification du code pin, la commande part du PC sans PIN, interceptée par le terminal, qui vient y ajouter le PIN utilisateur, puis l’envoie à la carte à puce, qui rend sa réponse sans jamais leaker le code PIN au PC.

Bon le problème, c’est qu’une fois que la carte à puce à été déverrouillée avec le code pin, n’importe quel soft peut communiquer avec la carte à puce, et lui demander d’effectuer des actions crypto.

L’attaque se déroule sur un terminal, dont l’utilisateur  a effectué  la saisie du code PIN au préalable. L’attaque via l’interface carte à puce est assez rapide à mettre en oeuvre, non destructive et donc difficilement détectable. Bon par contre, faut débrancher le terminal USB sans perte d’alimentation électrique pour pouvoir en suite le brancher sur un pc d’analyse :/ (pourquoi ne pas l’attaquer avec un autre device usb branché sur le bus ?)

L’orateur part en suite dans les méandres du fonctionnement du protocole entre le terminal sécurisé et la carte à puce dans le but de trouver un moyen de forcer le terminal sécurisé à balancer le code PIN.

L’orateur à implémenté un fuzzer à base d’arduino pour s’interfacer avec le lecteur de cartes à puce. On à en suite droit à un petit tour des vulnérabilités découvertes, dont une vulnérabilité permettant d’afficher le code du terminal dans l’afficheur LCD du terminal (et donc de le dumper). Dans les failles, le code du micro-controleur et des librairies employés