La rétro-ingénierie est une activité dont l'objectif est l'étude et l'analyse d'un système pour en déduire son fonctionnement interne.
En informatique, l'objectif de la rétro-ingénierie logicielle consiste à étudier un logiciel sans avoir à disposition son code source, dans le but notamment de :
Pour ce faire, nous utilisons des outils tels que des désassembleurs, décompilateurs, déboggeurs, éditeurs de fichiers binaires... mais nous avons également besoin de compétences ! Il faut savoir développer, connaître les spécifications techniques des processeurs (x86, RISC, ARM...) et systèmes d'exploitation (Unix, Windows, Android...) cibles, connaître les mécanismes de compilation et les protections logicielles (Packer, AntiDebug, AntiSandbox, DEP, ASLR...), et surtout, être une personne curieuse.
Que ce soit sur votre réseau, sur vos ordinateurs, serveurs, mobiles, nous sommes en mesure de faire de la rétro-ingénierie sur bon nombre d'applications.
Si des machines de votre infrastructure sont infectées par un malware, celui-ci peut être :
Afin d'être en mesure de l'éradiquer, nous allons étudier son fonctionnement au sein d'un environnement confiné, dans le but de comprendre comment il s'est installé, propagé, et a assuré sa persistence.
Grâce aux compétences acquises par la phase d'étude, nous allons déterminer une manière de le désactiver, en bloquant son fonctionnement ou en le désinstallant complètement, et ainsi établir une procédure de nettoyage.
D'autres acteurs de votre entreprise seront alors mis dans la boucle, notamment les administrateurs système et réseau, afin d'appliquer ces procédures de nettoyage, mais aussi d'apporter des changements afin que l'installation d'un tel malware soit rendue impossible ou très compliquée à l'avenir. Cela passe notamment par l'identification de marqueurs ou artefacts identifiant le malware, et qui sont ensuite transmis à un SOC. Il peut s'agir d'ajustements de la configuration des machines de l'infrastructure, d'ajout de mesures de protections techniques, ou de modifications comportementales.
Si on prend l'exemple d'une campagne d'emails de phishing, qui est le vecteur de propagation de malware le plus courants en entreprise, trois solutions peuvent entre autres être mises en place pour tenter d'éviter, ou du moins réduire les chances d'une seconde infection :
La sécurité des logiciels est un exemple illustrant l'utilité et la nécessité de la rétro-ingénierie. Que ce soit à cause d'un défaut de conception, d'une mauvaise implémentation, ou par manque de tests, les logiciels contiennent parfois des vulnérabilités. Ces dernières peuvent avoir un impact important sur la sécurité des données, du logiciel, ou de votre modèle d'activité. La rétro-ingénierie peut aider à découvrir de telles failles de sécurité, et à les adresser.
Lorsqu'un éditeur de logiciel souhaite mettre à l'épreuve la sécurité de sa solution, il peut s'appuyer sur plusieurs méthodes ou stratégies pour en estimer la fiabilité. Parmi ces techniques d'évaluation, on retrouve inévitablement des audits sur des périmètres ciblés ou plus larges. On peut ainsi faire auditer :
Toutes les stratégies citées ci-dessus constituent de bonnes pratiques et apportent chacune un intérêt du point de vue de la sécurité logicielle. Ce sont ces types d'audits qui permettent notamment à l'ANSSI de certifier des produits (CSPN, EAL3+, EAL4+). Ces certifications sont alors valables pour une version spécifique de la solution, et attestent d'un niveau de sécurité précis, correspondant aux moyens et compétences d'un attaquant.
Parmi les techniques évoquées, l'une des plus poussées nécessitant du temps et de la maîtrise technique est la recherche et l'exploitation de vulnérabilités. Il s'agit d'une activité très cadrée (version du produit et environnement d'installation spécifique) qui est un complément indispensable à l'audit de code logiciel. Elle s'applique souvent à un seul composant de l'application, car travailler sur l'intégralité de l'application peut être un travail très important. Des compétences en reverse engineering sont indispensables. Les vulnérabilités recherchées lors de cette phase peuvent être de tous types :
La recherche en vulnérabilité commence la plupart du temps par une étape de fuzzing (avec des outils tels que Peach Fuzzer ou American Fuzzy Loop) afin de déterminer les entrées utilisateurs générant des crashs de l'application, voir s'ils peuvent être exploités et dans quelles conditions. Il est pour cela nécessaire de bien connaître les environnements d'installation et les protections mises en place nativement par ces derniers (DEP, ASLR, stack canaries...).
Une étape nécessaire de reverse engineering permettra ensuite de déterminer le type de bug et ses conditions d'exploitation. Cela permettra aux développeurs de corriger la vulnérabilité, et d'estimer les installations et versions du produit vulnérables en fonction de l'environnement système sur lequel il a été installé. Le processus de divulgation des vulnérabilités est encadré, et peut donner lieu à la publication de CVE (Common Vulnerabilities and Exposures).
Lorsqu'une vulnérabilité inconnue est exploitée par un groupe d'attaquants, sans que l'éditeur ne soit au courant et ne puisse la patcher, on parle alors de 0-Day.
L'investigation numérique (ou forensic en anglais) est une activité pratiquée principalement par les forces de l'ordre et les équipes de réponse à incident. Il s'agit de collecter, analyser et préserver l'ensemble des traces numériques jugées nécessaire afin de déterminer, identifier, prouver, réfuter une thèse ou un élément.
La preuve peut se présenter sous de multiples formes. Il est donc fréquent de devoir faire appel aux techniques de reverse engineering aux fins suivantes :
Spécialistes en sécurité informatique et pentests à Lyon, Paris, Saint-Étienne et partout en France
Vous avez activé l'option "Do Not Track" dans votre navigateur, nous respectons ce choix et ne suivons pas votre visite.