obscurcissement
Qu’est-ce que l’obscurcissement ?
L’obscurcissement signifie rendre quelque chose difficile à comprendre. Le code de programmation est souvent obscurci pour protéger la propriété intellectuelle ou les secrets commerciaux, et pour empêcher un attaquant de rétro-concevoir un programme logiciel propriétaire.
Chiffrer tout ou partie du code d’un programme est une méthode d’obscurcissement. D’autres approches incluent la suppression des métadonnées potentiellement révélatrices, le remplacement des noms de classes et de variables par des étiquettes dénuées de sens et l’ajout de code inutilisé ou dénué de sens à un script d’application. Un outil appelé obfuscator convertira automatiquement du code source simple en un programme qui fonctionne de la même manière, mais qui est plus difficile à lire et à comprendre.
Malheureusement, les auteurs de code malveillant utilisent également ces méthodes pour empêcher leurs mécanismes d’attaque d’être détectés par les outils antimalware. L’attaque SolarWinds 2020 est un exemple de pirates utilisant l’obscurcissement pour échapper aux défenses.
Les techniques de désobfuscation peuvent être utilisées pour désosser engineer ou annuler ob l’obscurcissement. Ces techniques incluent le découpage de programme, qui consiste à réduire le code du programme aux seules instructions pertinentes à un point particulier du programme. L’optimisation du compilateur et la synthèse de programmes sont deux autres techniques de désobfuscation. L’obscurcissement vise à rendre l’ingénierie inverse difficile et n’en vaut pas la peine.
Comment fonctionne l’obscurcissement?
L’obscurcissement du code informatique utilise des phrases de rond-point complexes et une logique redondante pour rendre le code difficile à comprendre pour le lecteur. Le but est de distraire le lecteur avec la syntaxe compliquée de ce qu’il lit et de lui rendre difficile de déterminer le véritable contenu du message.
Avec un code informatique, le lecteur peut être une personne, un dispositif informatique ou un autre programme. L’obscurcissement est également utilisé pour tromper les outils antivirus et autres programmes qui s’appuient fortement sur les signatures numériques pour interpréter le code. Les décompilateurs sont disponibles pour des langages tels que Java, des systèmes d’exploitation tels qu’Android et iOS et des plates-formes de développement telles que .NET. Ils peuvent automatiquement désosser le code source; l’obscurcissement vise à rendre difficile la décompilation de ces programmes.
L’obscurcissement du code ne consiste pas à modifier le contenu du code d’origine d’un programme, mais plutôt à rendre la méthode de livraison et la présentation de ce code plus confuses. L’obscurcissement ne modifie pas le fonctionnement du programme ni sa sortie finale.
Ce qui suit est un exemple d’extrait de code JavaScript normal:
var greeting = 'Hello World';greeting = 10;var product = greeting * greeting;
Ce même extrait sous forme obscurcie ressemble à ceci:
var _0x154f=;var _0x52df=function(_0x159d61,_0x12b953){_0x159d61=_0x159d61-0x122;var _0x154f4b=_0x154f;return _0x154f4b;};(function(_0x19e682,_0x2b7215){var _0x5e377c=_0x52df;while(!!){try{var _0x2d3a87=-parseInt(_0x5e377c(0x129))*parseInt(_0x5e377c(0x123))+-parseInt(_0x5e377c(0x125))*parseInt(_0x5e377c(0x12e))+parseInt(_0x5e377c(0x127))*-parseInt(_0x5e377c(0x126))+-parseInt(_0x5e377c(0x124))*-parseInt(_0x5e377c(0x12f))+-parseInt(_0x5e377c(0x128))*-parseInt(_0x5e377c(0x12b))+parseInt(_0x5e377c(0x12a))*parseInt(_0x5e377c(0x12d))+parseInt(_0x5e377c(0x12c))*parseInt(_0x5e377c(0x122));if(_0x2d3a87===_0x2b7215)break;else _0x19e682(_0x19e682());}catch(_0x22c179){_0x19e682(_0x19e682());}}}(_0x154f,0x1918c));var greeting='Hello\x20World';greeting=0xa;var product=greeting*greeting;
La version obscurcie est presque impossible à suivre avec l’œil humain.
Techniques d’obscurcissement
L’obscurcissement implique plusieurs méthodes différentes. Souvent, plusieurs techniques sont utilisées pour créer un effet en couches.
Les programmes écrits dans des langages logiciels compilés, tels que C# et Java, sont plus faciles à obscurcir. En effet, ils créent des instructions de niveau intermédiaire généralement plus faciles à lire. En revanche, le C++ est plus difficile à obscurcir, car il se compile en code machine, ce qui est plus difficile à utiliser pour les utilisateurs.
Certaines techniques courantes d’obscurcissement sont les suivantes:
- Renommer. L’obscurcissement modifie les méthodes et les noms des variables. Les nouveaux noms peuvent inclure des caractères non imprimables ou invisibles.
- Emballage. Cela compresse l’ensemble du programme pour rendre le code illisible.
- Flux de contrôle. Le code décompilé est fait pour ressembler à la logique spaghetti, qui est un code non structuré et difficile à maintenir où la ligne de pensée est obscurcie. Les résultats de ce code ne sont pas clairs, et il est difficile de dire quel est l’intérêt du code en le regardant.
- Transformation de modèle d’instruction. Cette approche prend des instructions communes créées par le compilateur et les échange contre des instructions plus complexes et moins courantes qui font effectivement la même chose.
- Insertion de code factice. Un code fictif peut être ajouté à un programme pour le rendre plus difficile à lire et à faire de l’ingénierie inverse, mais cela n’affecte pas la logique ou le résultat du programme.
- Métadonnées ou suppression de code inutilisé. Le code et les métadonnées inutilisés donnent au lecteur des informations supplémentaires sur le programme, tout comme les annotations sur un document Word, qui peuvent l’aider à le lire et à le déboguer. La suppression des métadonnées et du code inutilisé laisse au lecteur moins d’informations sur le programme et son code.
- Insertion de prédicat opaque. Un prédicat dans le code est une expression logique vraie ou fausse. Les prédicats opaques sont des branches conditionnelles – ou des instructions if-then – où les résultats ne peuvent pas être facilement déterminés avec une analyse statistique. L’insertion d’un prédicat opaque introduit du code inutile qui n’est jamais exécuté mais qui est déroutant pour le lecteur qui essaie de comprendre la sortie décompilée.
- Anti-débogage. Les ingénieurs logiciels et les pirates informatiques légitimes utilisent des outils de débogage pour examiner le code ligne par ligne. Avec ces outils, les ingénieurs logiciels peuvent repérer les problèmes avec le code, et les pirates peuvent les utiliser pour désosser le code. Les professionnels de la sécurité informatique peuvent utiliser des outils anti-débogage pour identifier lorsqu’un pirate exécute un programme de débogage dans le cadre d’une attaque. Les pirates peuvent exécuter des outils anti-débogage pour identifier quand un outil de débogage est utilisé pour identifier les modifications qu’ils apportent au code.
- Anti-sabotage. Ces outils détectent le code qui a été altéré, et s’il a été modifié, il arrête le programme.
- Chiffrement de chaîne. Cette méthode utilise le chiffrement pour masquer les chaînes dans l’exécutable et ne restaure les valeurs que lorsqu’elles sont nécessaires pour exécuter le programme. Cela rend difficile le passage par un programme et la recherche de chaînes particulières.
- Transposition du code. Il s’agit de réorganiser les routines et les branches du code sans avoir d’effet visible sur son comportement.
Comment mesurer le succès de l’obscurcissement
Le succès des méthodes d’obscurcissement peut être mesuré en utilisant les critères suivants:
- Force. La mesure dans laquelle le code transformé résiste aux tentatives de désobfuscation automatisée détermine la force. Plus il faut d’efforts, de temps et de ressources, plus le code est fort.
- Différenciation. Le degré de différence entre le code transformé et l’original est une autre mesure de son efficacité. Parmi les moyens utilisés pour juger de la différenciation, citons:
- Le nombre de prédicats que contient le nouveau code.
- La profondeur de l’arbre d’héritage (DIT) a une métrique utilisée pour indiquer la complexité du code. Un DIT plus élevé signifie un programme plus complexe.
- Dépenses. Une méthode d’obscurcissement rentable sera plus utile qu’une méthode coûteuse, en particulier en ce qui concerne sa capacité à évoluer pour des applications plus importantes.
- Complexité. Plus l’obscurcissement ajoute de couches, plus le programme sera complexe, ce qui rendra l’obscurcissement plus réussi.
Avantages de l’obscurcissement
Les principaux avantages de l’obscurcissement sont les suivants:
- Secret. L’obscurcissement masque les informations précieuses contenues dans le code. C’est un avantage pour les organisations légitimes qui cherchent à protéger le code des concurrents et des attaquants. Inversement, les mauvais acteurs capitalisent sur le secret de l’obscurcissement pour cacher leur code malveillant.
- Efficacité. Certaines techniques d’obscurcissement, comme la suppression de code inutilisé, ont pour effet de réduire le programme et de le rendre moins gourmand en ressources à exécuter.
- Sécurité. L’obscurcissement est une méthode de sécurité intégrée, parfois appelée autoprotection des applications. Au lieu d’utiliser une méthode de sécurité externe, cela fonctionne dans ce qui est protégé. Il est bien adapté à la protection des applications qui s’exécutent dans un environnement non fiable et qui contiennent des informations sensibles.
Inconvénients de l’obscurcissement
L’un des principaux inconvénients de l’obscurcissement est qu’il est également utilisé dans les logiciels malveillants. Les auteurs de logiciels malveillants l’utilisent pour échapper aux programmes antivirus qui analysent le code à la recherche de fonctionnalités spécifiques. En masquant ces fonctionnalités, le logiciel malveillant semble légitime pour le logiciel antivirus.
Les techniques courantes utilisées par les auteurs de logiciels malveillants incluent:
- Exclusif ou (XOR). Une opération qui masque les données en appliquant des valeurs XOR au code afin que seul un œil entraîné puisse les déchiffrer.
- ROT-13. Une instruction qui remplace le code par des caractères aléatoires.
Avec l’obscurcissement, au lieu de développer de nouveaux logiciels malveillants, les auteurs reconditionnent les méthodes d’attaque de base couramment utilisées pour masquer leurs fonctionnalités. Dans certains cas, les acteurs malveillants incluent des techniques spécifiques au fournisseur.
Un autre inconvénient de l’obscurcissement est qu’il peut rendre le code plus difficile à lire. Par exemple, le code qui utilise la méthode d’obscurcissement du chiffrement des chaînes nécessite le déchiffrement des chaînes au moment de l’exécution, ce qui ralentit les performances.
Obscurcissement et SolarWinds
Une attaque contre SolarWinds, un fabricant de logiciels de gestion et de surveillance informatique d’Austin, au Texas, qui aurait commencé dès septembre 2019, a entraîné une violation de nombreuses autres entreprises et agences gouvernementales. L’attaque a été découverte en décembre 2020 et est attribuée à des pirates russes. Il a d’abord compromis la plate-forme de gestion informatique Orion de SolarWinds.
Les attaquants ont utilisé le logiciel malveillant Sunburst, qui combinait l’obscurcissement, l’apprentissage automatique et les techniques d’IA pour installer une porte dérobée dans les mises à jour logicielles de la plate-forme Orion. Pour dissimuler leurs efforts et contourner les défenses, ils ont modifié les journaux d’audit, supprimé les fichiers et les programmes après utilisation et truqué l’activité pour la faire apparaître comme des applications légitimes sur le réseau.
Cette attaque de la chaîne d’approvisionnement est soupçonnée d’être restée inaperçue pendant plus d’un an. Le logiciel malveillant inséré dans le code Orion était en sommeil et caché jusqu’à ce que les utilisateurs téléchargent les mises à jour infectées. Il s’est ensuite propagé à travers le réseau sans être détecté et a infecté une longue liste d’organisations utilisant Orion.
L’obscurcissement est l’une des nombreuses techniques que les pirates utilisent pour pénétrer dans les systèmes informatiques. En savoir plus sur la défense contre divers types d’attaques de cybersécurité dans le guide de planification approfondie de la cybersécurité de TechTarget.