Autoblog de mangetamain.fr

Ce site n'est pas le site officiel de mangetamain.fr
C'est un blog automatisé qui réplique les articles de mangetamain.fr

Découvrez les attaques par canaux auxiliaires sur cryptoprocesseurs

Sat, 09 Jun 2012 18:59:26 +0000 - (source)

Cet article sera largement détaillé mais ne sera pas spécialement vulgarisé. S’il vous intéresse mais que je suis allez trop vite sur certaines notions, n’hésitez pas à m’envoyer un mail !

J’ai découvert le concept d’attaque par canaux auxiliaires dans un numéro hors-série de MISC (Multi-system and Internet Security Cookbook). Quand j’ai lu l’article en question, j’ai eu une montée d’adrénaline et je me suis dis JE VEUX ESSAYER JE VEUX ESSAYER JE VEUX ESSAYER, PLEAAAAAAAASE §§ Alors j’ai ouvert mes bouquins de crypto et j’ai plongé.

Je vous mets dans le contexte. Quand vous allez chez le docteur, il prend votre carte Vitale et la met dans une machine spéciale qui la lit et envoie plein d’info à votre sécu. Heureusement, la communication entre la machine du docteur et votre sécu est super bien protégée, sinon n’importe quel voyou de l’internet pourrait intercepter vos info et vous faire du tort. Le principe est le même pour les terminaux de paiement par carte bancaire dans les magasins où vous faites vos courses.

L’algorithme qui nous protège au quotidien dans ces 2 situations est bien connu, c’est le Rivest Shamir Adleman (RSA) et ses fameux échanges de clefs. Je ne vous l’explique pas ici, il est plutôt simple à comprendre à partir du moment où vous connaissez l’opérateur mathématique modulo (le reste de la division euclidienne entre deux entiers).

Bref, le principe de RSA, c’est de permettre à 2 personnes de discuter à distance sur un réseau sans que personne ne puissent comprendre ce qu’elles se racontent (et donc empêcher un pirate de capter votre numéro de CB quand vous payez vos fringues à Zara). Si ça marche aussi bien, c’est grâce aux maths ! A moins de disposer de tous les ordinateurs de la planète pendant 3000 ans, aucun pirate ne pourrait aujourd’hui déchiffrer vos communications secrètes (ah bon ? un ordinateur quantique, où ça ?).

Ben ça parait COOL NON ? Ho regardez, le ciel s’assombrit… *breudeubooonnn breuudeuboonn* (<= bruit du tonnerre, c’est pour l’ambiance !)

Si les maths ne peuvent pas venir à bout de RSA et de la sécurité des terminaux de paiement, les attaques par canaux auxiliaires le peuvent. En fait, un algo aura beau être sûr à 99,999%, son implémentation matérielle pourra lui faire défaut. C’est le principe des canaux auxiliaires.

Vous avez déjà vu un mauvais joueur de poker ? Il suinte de rictus et autres TOC pendant ses parties. On peut dire qu’une attaque par canal auxiliaire sur sa tronche ferait plutôt mal. Un canal auxiliaire, c’est une fuite d’informations provenant d’un système, à l’insu de son administrateur (et encore pire, de son fabriquant !).

Dans la vie réelle, les attaques par canaux auxiliaires se font sur des cryptoprocesseurs. Des cryptoprocesseurs, il y en a dans la machine du docteur pour la carte Vitale, dans les terminaux de paiement à Zara ou H&M mais aussi dans le bazar militaire (radar, brouilleur de signal et j’en passe).

Quelle différence entre un cryptoprocesseur et un bon vieux processeur Intel des familles me direz-vous ?

A priori, aucune. Un processeur, ça reste un processeur, pas de souci là dessus. Par contre, les cryptoprocesseurs embarquent certaines instructions que nos processeurs à nous n’embarquent pas, comme l’exponentiation modulaire, très utilisée dans les opérations cryptographiques. Certains cryptoprocesseurs sont conçus pour résister aux radiations, d’autres pour économiser de l’énergie. Mais il y a une autre différence cool ! Ces processeurs sont généralement protégés contre les attaques par canaux auxiliaires.

4 types d’attaques par canaux auxiliaires

Si je veux powned la machine de mon docteur pour piquer les info de ses patients, je vais m’attaquer à son processeur parce que c’est là dedans qu’il y a des informations intéressantes et des calculs cryptographiques qui me permettront de déchiffrer la discussion entre la machine elle-même et la sécu. Partons du principe que mon médecin a acheté sa machine sur Ebay en solde et que du coup, elle ne possède pas un cryptoprocesseur, mais un bête processeur.

Voila comment je pourrais l’attaquer :

  1. Grâce à une étude temporelle (timing attack);
  2. Grâce à une étude électromagnétique locale (electromagnetic analysis)
  3. Grâce aux fuites photoniques;
  4. Grâce à une attaque par consommation (power analysis)

Timing Attack, whatzat ?

La timing attack ne date pas d’hier, elle a été expliquée en 1996 par môssieur Kocher dans son article « Timing attacks on implementations of Diffie-Hellman, RSA, DSS and other systems« . Rien que ça. Il a montré comment une implémentation de l’exponentiation modulaire pouvait fuir par canaux auxiliaires.

Je vous fais grâce du code mais en gros, imaginez une boucle qui permet de faire grimper un entier N à la puissance b, le tout modulo c. En fonction de la valeur de b, l’algorithme ne prendra pas le même temps à s’exécuter, ça parait assez évident (plus b est grand, plus l’algo mettra du temps). Et ben, la voila notre fuite ! Notez que cette fuite seule ne sert à rien mais elle pourrait être UNE étape d’une attaque qui viserait à obtenir la clef de chiffrement d’un cryptoprocesseur.

Grâce à cette différence de temps (et donc de consommation d’énergie), il est possible d’attaquer le processeur et de connaître les valeurs de N, b et c. Comment ? C’est un axe de recherche très pointu, je ne vais pas pouvoir vous l’expliquer mais le concept est super intéressant. Mais les autres types d’attaque sont encore plus hallucinants !

Analyse électromagnétique et Maxwell

Vous avez sûrement déjà entendu parler de Maxwell, le physicien (fameux pour les équations qui portent son doux nom). Il a dit un jour que la circulation d’un courant dans un conducteur génère des champs électriques et magnétiques au voisinage de ce conducteur. Il a démontré que les champs électromagnétiques étaient fonction du courant traversé par le conducteur, comme l’exprime clairement cette équation (:D) :

En résumé, il est possible de connaître la consommation en courant d’un composant en étudiant ses émanations électromagnétiques. Comment on peut appeler ça… ah ben, une fuite ?

La fuite photonique

La fuite photonique suit le même concept. Les circuits électroniques fuient en émettant de la lumière ! Évidemment, ne comptez pas sur des circuits électroniques pour vous servir de lampe torche mais sachez tout de même qu’ils dégagent des photons. C’est le cas des transistors NMOS qui dégagent des photons lorsqu’ils commutent de 0 à 1. Pour capturer ces photons, il faut du matos de bourrin vous en conviendrez.

Power analysis

Enfin, l’attaque par consommation est celle que je me suis amusée à mettre en œuvre cet après-midi sur mon micro-contrôleur Arduino, fièrement équipé d’un processeur ATmega 328. Le principe est simple : en mesurant les tensions d’un circuit, on tente de découvrir les données manipulées par le circuit.

Et alors, comment protéger nos cryptoprocesseurs ?

Topologie de mon attaque rudimentaire type « Power Analysis »

Je me suis tenté à une petite attaque par analyse de tensions sortantes grâce à un Arduino. Un Arduino est un micro-contrôleur, soit très vulgairement un mini-ordinateur. Il possède un processeur, de la mémoire, des entrées/sorties. Il est utilisé en électronique et en robotique.

En premier lieu, mon Arduino (à gauche) est relié à un écran LCD. L’Arduino était chargé de générer un mot aléatoire (EIFJE, XIRH ou NBOR enfin vous voyez le genre) et de l’afficher sur l’écran. Imaginez que l’Arduino est la borne « carte Vitale » de votre docteur et l’écran est le serveur qui reçoit les info dans les locaux de votre sécu. Le but était d’écouter ce qui se passait sur le circuit et de reconstituer le mot aléatoire qu’envoyait l’Arduino en boucle.

Le montage était relié à mon laptop (fraichement Ubuntisé, adieu Fedora </3). J’ai conçu un programme très simple qui fait office d’oscilloscope numérique : le PC reçoit la mesure d’une tension via le câble USB et l’affiche sur la sortie standard. Grâce à la commande tee, j’enregistre les valeurs mesurées dans un fichier que je peux ensuite transformer en graphique avec gnuplot (je suis entrain de me mettre à Qt pour générer des graphiques en « temps-réel » et avoir un vrai oscilloscope numérique).

Voila la gueule de mon oscillo numérique (4.99V représente évidemment 5V, soit un 1 logique) :

Rudimentaire, mais efficace. Sur l’avant-dernière photo, le fil blanc qui pendouille est le fil que j’utilise comme outils de mesure : la tension que reçoit ce fil est envoyée à mon programme qui l’affiche à l’écran, la masse étant branchée sur 0V.

L’attaque se passe en 3 temps :

  1. L’Arduino génère un mot aléatoire et l’envoie en boucle, lettre par lettre, au petit écran LCD, qui l’affiche (dans l’explication, le mot est « hello » pour simplifier les choses);
  2. Je me branche sur le circuit avec mon outil de mesure et je choppe 8 tensions type 0 ou 5V (donc 8 bits) pendant une période définie;
  3. Je récupère les tensions sur mon PC, et je trace des sortes de chronogrammes pour reconstituer le message de l’Arduino;

On ne se moque pas de l’écriture de sagouin, merci. A noter que la photo des chronogrammes n’a rien à voir avec l’explication courante, ce sont des brouillons photographiés au hasard, n’essayez pas de chercher des correspondances.

En mesurant les tensions émises par l’Arduino, je déduis 5 octets qu’il a transmis à l’écran LCD :

J’ai mis un petit délai entre l’envoi de chaque lettre (quelques millisecondes) pour faciliter la réception parce que mes appareils de mesure sont assez… artisanaux.

A partir de là, je me jette soit sur le datasheet du processeur si c’est lui que j’écoutais, soit sur le datasheet de l’écran LCD si c’est lui que j’écoutais. En l’occurrence, j’espionnais les tensions de mon écran, plus facile. Le processeur est beaucoup moins abordable. Le datasheet va me donner les informations qu’il me manque :

 

Je fais la correspondance entre mes octets trouvés et les caractères du tableau… « h », « e », « l », « l », « o ». Yes, c’est bien ce qu’il y a sur l’écran ! Les tensions de cet écran LCD sont très faciles à décoder, ça n’aurait pas été le cas avec tous les autres composants. En cela, ce n’est pas une vraie attaque par canaux auxiliaires parce la fuite n’en est pas une.

Ce qui m’intéressait, c’était de me rapprocher du concept : en ayant les yeux bandés, est-ce qu’il est possible de dire ce qui se passe dans un circuit et si oui, est-ce automatisable ? A priori oui, il faut juste de la patience. Prochaine étape : m’amuser à faire pareil directement sur les pins du processeur Atmega 328.

Les canaux auxiliaires ont encore de beaux jours devant eux : c’est un axe de recherche qui ne cesse pas depuis bientôt 20 ans. Est-ce que RSA va craquer, un jour, à cause de ça ? Non, l’algorithme reste « sûr ». Ce sont ses implémentations matérielles qui doivent être perfectionnées. Une attaque par canaux auxiliaires demande au pirate un accès direct au matériel, ne l’oublions pas.

J’espère que ça vous a intéressé autant que moi. Une question, une remarque, envoyez-moi un mail ! Je réponds à la vitesse d’un neutrino.

Pour approfondir :


Powered by VroumVroumBlog 0.1.32 - RSS Feed
Download config articles