Le jargon en cybersécurité

Reverse Engineering

(En français : rétro-ingénierie ou ingénierie inverse) C'est quand quelqu'un arrive à déterminer ce que fait un programme depuis le seul code assembleur.

Avant d'expliquer plus en avant le cœur du concept, il y a un élément fondamental à comprendre pour saisir le contexte : on sait passer d'un algorithme à un langage informatique puis à un langage assembleur, mais on ne sait pas faire l'inverse !
Cela parait contre intuitif car tout le processus de compilation (pour rappel : passer du langage informatique au langage assembleur) est accompli par un programme automatisé, dont le fonctionnement est connu. Pourquoi alors ce que ce compilateur fait dans un sens, ne pourrait-on pas le faire dans l'autre sens ?
En fait, nous, humains, avons besoin de "structurer", d'une certaine façon, ce que l'on écrit pour que ce soit compréhensible. Ce qui est écrit en langage informatique EST structuré d'une façon humainement compréhensible. Mais le processeur, lui, n'a pas du tout besoin de cette structure. Donc lors de l'étape de compilation, cette structure est "jetée", car elle serait inutile pour lui. C'est pour ça qu'on ne peut pas faire l'opération dans l'autre sens : on ne peut pas recréer ce qui a été détruit.
Pour faire une analogie : vous pouvez recadrer une photo. Les bords que vous avez supprimés sont alors perdus. Même si le processus qui a permis de recadrer la photo est parfaitement connu et n'a rien de sorcier, vous ne pouvez pas recréer les bords manquants depuis la photo recadrée.

Il existe des tentatives de reproduire du code informatique depuis le code assembleur. Mais c'est un peu comme demander à une IA de reconstituer les bords manquants d'une image : elle va devoir "imaginer" des bords qui sont "cohérents", mais qui ne seront pas forcément ceux d'origine.

Comme on vient de l'expliquer, le langage assembleur est imbitable pour un humain, même un programmeur.
Pourtant, une poignée d'élus masochistes ont réussi à le dompter et arrivent à comprendre ce que fait un binaire, sans l'aide du langage informatique. On appelle cela la rétro-ingénierie (reverse engineering), le reverse (prononcé "riveurse") pour les intimes. En quelque sorte ça consiste à redessiner les plans de fabrication depuis le produit fini.
C'est une des disciplines reines de la sécurité informatique car c'est très exigeant (il faut vraiment pratiquer en continu pour le pas perdre la main).

Mais alors à quoi ça sert ?

Premièrement ça aide à trouver des vulnérabilités. Il est bien plus simple d'identifier des points vulnérables dans un logiciel si vous êtes capable "d'ouvrir le capot" pour voir comment ça marche. L'alternative étant d'interagir avec ce programme "à l'aveugle" (on dit en blind ou en blackbox).

Deuxièmement ça aide à modifier des programmes. Par exemple, vous avez téléchargé Photoshop et au lancement il vous demande une clé de license. Si vous êtes doué en reverse, vous pouvez ouvrir le binaire, trouver l'endroit où il demande cette clé et simplement supprimer cette vérification. Ainsi vous pouvez utiliser le programme sans payer.

Troisièmement ça aide pour de l'espionnage industriel. Votre concurrent a développé un algorithme révolutionnaire qu'il garde jalousement. Vous pouvez télécharger son logiciel et tenter de comprendre le fonctionnement de l'algorithme d'après le binaire.

Quatrièmement ça aide pour l'analyse des maliciels (malware). Généralement les programmes malveillants sont sous la forme d'un binaire. Pouvoir faire du reverse sur ce binaire permet de comprendre les rouages de l'attaque : qu'est-ce qui est visé par le programme (les mots de passe, les fichiers, l'accès à la webcam, ...), avec qui et comment communique -t-il, comment fait-il pour éviter d'être détecté par l'antivirus, etc.

← Terme précédentSommaireTerme suivant →