Site WWW de Laurent Bloch
Slogan du site

ISSN 2271-3905
Cliquez ici si vous voulez visiter mon autre site, orienté vers des sujets moins techniques.

Pour recevoir (au plus une fois par semaine) les nouveautés de ce site, indiquez ici votre adresse électronique :

Rétroconception de composants électroniques
Article mis en ligne le 15 mai 2013
dernière modification le 15 mai 2014

par Laurent Bloch

La rétroconception (reverse engineering) est aussi vieille que la technique, et les polisseurs de pierre de toute l’Europe se sont probablement évertués à reconstituer les méthodes de fabrication des lames de silex du Grand-Pressigny, qui s’exportaient jusqu’en Hollande et aux Îles Anglo-Normandes. L’informatique n’a pas échappé à la règle. À l’époque des matériels à logique discrète c’était de l’ingénierie classique, tempérée par les brevets et les avocats chargés de les défendre ; on se rappellera les batailles homériques des années 1970 autour des interfaces d’IBM.

Pour le logiciel

Dans le domaine du logiciel, la rétroconception n’a servi pendant longtemps qu’à reconstituer les spécifications d’un logiciel non-libre afin d’en produire une imitation. Depuis quelques années son champ d’application s’est étendu à l’analyse des logiciels malveillants (maliciels, malwares) pour apprendre à s’en protéger. La rétroconception du logiciel s’applique en général à un programme compilé, donc traduit en langage machine, d’une lecture particulièrement laborieuse et difficile. Les auteurs se protègent de la rétroconception par l’obscurcissement du code (en anglais obfuscation, ensemble de techniques destinées à le rendre incompréhensible), et finalement par le chiffrement du programme enregistré en mémoire persistante, ce qui oblige à lire le code à la volée en mémoire vive pendant son exécution, exercice difficile. Des logiciels perfectionnés tels que Skype vérifient la conformité de leur propre texte, afin d’éviter qu’un observateur ne réussisse à l’instrumenter pour mieux l’analyser. Il existe depuis longtemps des programmes désassembleurs, capables de traduire le langage machine en un texte plus lisible. À ces techniques maintenant classiques sont venus s’adjoindre des logiciels qui permettent l’observation du logiciel au cours de son exécution, en mémoire vive. Le développement de ces méthodes a eu un effet de bord bénéfique, la remise au goût du jour de l’assembleur, dont la pratique donne, de façon irremplaçable, une compréhension intime du fonctionnement des ordinateurs.

Est-ce possible pour le matériel ?

Depuis que les composants des ordinateurs, à commencer par le processeur, sont réalisés sous forme de circuits intégrés, on pouvait penser que la rétroconception par observation directe d’une puce de trois milliards de transistors sur deux centimètres carrés (soit un pas de dessin de 20 nanomètres) était impossible : n’aurait été possible que l’analyse des signaux (électromagnétiques en règle générale) émis par le composant à destination du monde extérieur, par ce que l’on nomme les canaux auxiliaires, observés en boîte noire, éventuellement manipulés par des techniques de fuzzing, qui consistent à perturber le composant en lui envoyant des données erronées (non conformes aux spécifications) et à scruter ses réponses.

Cette idée était erronnée. Un article de quatre chercheurs de la Délégation générale à l’armement (DGA), Denis Réal, Julien Micolod, Jean-Claude Besset et Jean-Yves Guinamant, La rétroconception de puces électroniques, le bras armé des attaques physiques, publié dans la numéro hors-série n° 7 de la revue MISC, présente un panorama des avancées récentes dans le domaine de la rétroconception des puces électroniques. Disons d’emblée que ces techniques ne sont aujourd’hui pas employées contre des microprocesseurs d’usage général, tels que celui qui anime votre ordinateur, plutôt contre de plus petits systèmes, tels que des clés USB cryptographiques, mais demain... Et signalons aussi que ces techniques sont employées en conjonction avec les méthodes par canaux auxiliaires, pour extraire la clé privée du composant, ou des informations sur l’algorithme cryptographique utilisé. N’empêche, c’est possible.

Comment analyser un composant électronique ?

C’est possible, mais pas à la portée du premier venu dans sa cuisine ou son garage.

Les échantillons doivent être préparés par des procédés physico-chimiques adéquats de façon à dégager les couches intéressantes du composant.

Pour observer des objets dont le motif élémentaire mesure une vingtaine de nanomètres, il convient de se munir d’un bon microscope électronique (un grossissement de 1x60 000 devrait suffire), ce qui limite déjà les ambitions. Prévoir aussi un banc de prise de vue avec un moteur pas à pas pour la capture d’images. Le budget matériel se monte déjà à quelques centaines de milliers d’euros.

Ainsi équipé, on peut obtenir une collection d’images utilisables par des logiciels d’assemblage et de vectorisation, ce qui procurera l’équivalent d’une photographie aérienne du composant, en quelque sorte.

Ce qui permet d’aller plus loin, c’est que la morphologie de ces composants est élaborée au moyen d’un langage de description, analogue à un langage de programmation, qui en génère le dessin sous une forme acceptable par les machines de fabrication. Les principaux langages de ce type sont VHDL et VERILOG. Ils engendrent des dessins très réguliers et répétitifs, ce qui facilite la reconnaissance des motifs, et donc la rétroconception. Il existe des logiciels de vérification des règles architecturales et électriques, qui permettent de traduire les images en liste d’interconnexions (netlist) acceptable par un compilateur VHDL ou VERILOG. L’analyse ainsi réalisée permet de comprendre le fonctionnement général du composant, compréhension qui sera affinée par l’observation des signaux électromagnétiques émis au cours de son fonctionnement, avec différents jeux de données.

Les analyses de ce type, si leur coût en réserve l’usage aux grandes entreprises, aux États développés, aux équipes de recherche correctement financées et aux cartels maffieux de grande envergure, ouvrent la voie à des attaques sur les couches basses du matériel, très dangereuses parce qu’elles contournent toutes les protections par matériel ou par logiciel.