L'analyse des logiciels malveillants (« malware » en anglais) permet de déterminer leurs fonctionnements et leurs impacts potentiels. C'est une tâche essentielle dans la sécurité informatique, elle fournit la compréhension nécessaire pour concevoir des contre-mesures efficaces et des stratégies d'atténuation contre les différents logiciels malveillants.

Contexte Les logiciels qui « remplissent délibérément les intentions nuisibles d'un attaquant » sont qualifiés de logiciels malveillants. Ils sont destinés à accéder aux systèmes informatiques et aux ressources réseau, perturber les opérations informatiques, et recueillir des informations personnelles sans le consentement du propriétaire du système créant ainsi une menace à la disponibilité de l'Internet, l'intégrité de ses hôtes et la vie privée de ses utilisateurs. Les logiciels malveillants regroupent plusieurs variantes comme le virus, le ver, le cheval de Troie, le rootkit, la backdoor, le botnet, les espiogiciels, l'adware, etc. Ces classes de logiciels nuisibles ne sont pas mutuellement exclusives, ce qui signifie qu'un maliciel particulier peut révéler les caractéristiques de plusieurs classes en même temps.

Les attaquants exploitent les vulnérabilités dans les services Web, les navigateurs et les systèmes d'exploitation, ou utilisent des techniques d'ingénierie sociale pour inciter les utilisateurs à exécuter le code malveillant afin de propager les logiciels malveillants. Les auteurs de logiciels malveillants utilisent des techniques d'obfuscation telles que l'insertion de code mort, la réaffectation de registre, le réordonnancement de sous-programme, la substitution d'instructions, la transposition de code et l'intégration de code pour échapper à la détection par les défenses traditionnelles telles que les pare-feux, les antivirus et les passerelles qui utilisent généralement des techniques basées sur les signatures et ne peuvent pas détecter les exécutables malveillants qui utilisent ces techniques. Les éditeurs d'antivirus commerciaux ne sont pas en mesure d'offrir une protection immédiate pour les logiciels de type zero-day, car ils doivent les analyser pour créer leurs signatures.

Pour surmonter la limitation des méthodes basées sur les signatures, des techniques d'analyse de logiciels nuisibles sont suivies, qui peuvent être statiques ou dynamiques. Les techniques d'analyse des logiciels malveillants aident les analystes à comprendre les risques et les intentions associés à un échantillon de code malveillant. Les informations ainsi obtenues peuvent être utilisées pour réagir aux nouvelles tendances dans le développement de logiciels malveillants ou pour prendre des mesures préventives afin de faire face aux menaces futures. Les fonctionnalités dérivées de l'analyse des logiciels malveillants peuvent être utilisées pour regrouper les logiciels malveillants inconnus et les classer dans leurs familles existantes.

Avant de créer les signatures pour les maliciels nouvellement arrivés, ceux-ci doivent être analysés afin de comprendre les risques et les intentions associés. Le programme malveillant et ses capacités peuvent être observés soit en examinant son code ou en l'exécutant dans un environnement sûr.

Analyse statique L'analyse d'un programme malveillant sans l’exécuter se nomme l'analyse statique. Les modèles de détection utilisés en analyse statique sont la comparaison de signatures de chaine de caractères, séquence d'octets n-grams, appels syntaxique de bibliothèque, diagramme de flux de contrôle, fréquence de distribution des opcodes. L’exécutable malveillant doit être déchiffré ou décompressé pour procéder à une analyse statique.

Techniques

Décompilation La décompilation offre une technique attractive pour aider l'analyse de malware en permettant celle-ci d'être effectuer à haut niveau afin d'avoir une forme plus abstraite du code binaire. La décompilation consiste à la collection de mécanismes de récupération abstraite afin de remonter des abstractions haut niveau qui ne sont pas lisibles dans le code binaire. Les analyses manuelles et automatiques peuvent être effectuées sur du code de programme décompilé afin de réduire le temps requis pour l'analyse. Vis-à-vis de cet objectif, la communauté scientifique a abordé des principes de méthodes pour la récupération d'abstraction de haut niveau nécessaire pour la reconstitution du code source. Cela inclut la récupération des types de données, le flux de contrôle de structure haut niveau tel que la construction de if-then-else et de boucle while par exemple depuis le code binaire. Malgré des avancées significatives, les états de l'art sur les décompilateurs créent un code vraiment complexe et ne se concentre pas sur la lisibilité. Cependant, certains décompilateurs existent afin d'améliorer la lecture du code décompilé et le rendre plus facile à comprendre. Ainsi, ils accélèrent la rétroconception de programme malveillant.

Signature numérique

La détection basée sur la signature numérique est la technique la plus largement utilisée par les anti-virus. Une signature est une séquence d'octets qui peut être utilisée pour identifier un logiciel malveillant spécifique. Les anti-virus basés sur la détection de signature doivent maintenir un dépôt de signatures de maliciels déjà connus et celui-ci doit être mis à jour fréquemment dès qu'une nouvelle menace est découverte. Les deux algorithmes MD5 et SHA1 sont utilisés pour générer la signature de hachage d'un fichier exécutable (16 octets pour MD5 et 20 octets pour SHA1).

La détection basée sur la signature est facile, plutôt rapide et efficace contre les types de malware ordinaire. L'inconvénient de cette méthode et qu'elle nécessite une mise-à-jour de la base de données des signatures et que si la signature d'un maliciel n'est pas présent dans celle-ci, le fichier ne sera pas détecté comme malveillant. De plus, une simple technique d'obfuscation peut être utilisée pour changer la signature d'un même malware et par conséquent, échapper à la détection de signature.

Chaînes de caractères Les chaînes de caractères sont des propriétés facilement interprétables. Ces chaînes peuvent refléter l'intention et l'objectif de l'attaquant car elles contiennent souvent des informations sémantiques importantes d'un comportement malveillant. Par exemple la chaîne suivante :<html><script language=‘javascript’>window.open(‘readme.eml’)existe toujours dans le ver Nimda, montrant que le ver essaye d'infecter les scripts. Un autre exemple est la chaîne &gameid=%s&pass=%s;myparentthreadid=%d;myguid=%s qui indique les intentions de l'attaquant qui sont de dérober le mots de passe d'un jeux-vidéo en ligne et de les renvoyer au serveur. Par ailleurs, les chaînes de caractères sont des fonctionnalités robustes et il n'est pas facile pour le créateur du malware d'échapper à la détection par chaînes de caractères. La raison est que même si des variantes de logiciels malveillants peuvent être générées en recompilant ou en adoptant des techniques d'obfuscation, modifier toute la table d'interprétation des chaînes de caractères n'est pas pratique dans la majorité des programmes.

N-grammes

Les n-grammes sont toutes les sous-chaînes de caractère de longueur N dans le code du programme. Par exemple, la séquence "82EDD875" est segmentée en 5-grammes : 82EDD 2EDD8 EDD87 DD875 Au cours de la dernière décennie, de nombreuses recherches ont effectué une détection de logiciels malveillants inconnus basée sur le contenu du code binaire.

Opcodes

Un opcode (pour operational code) est une sous partie d'une instruction en langage machine qui identifie les opérations qui sont exécutées. Plus précisément, un programme est défini par une série d'instructions assembleur ordonnés. Une instruction est une paire composée d'un code opérationnel et d'une opérande ou d'une liste d'opérandes. Par exemple :mov ebx ebx add eax 1 xor eax eax call sub_401BCD

Les segments d'instruction peuvent souvent montrer les fonctionnalités d'un programme. Des études ont montré qu'en pratique, les échantillons d'un logiciel malveillant dérivé du même code source, ou qui proviennent d'une même famille de logiciels malveillants partagent souvent un grand nombre de blocs ou segments d'instructions en commun.

Graphe de flot de contrôle

Les graphes de flot de contrôle représentent le flux d'exécution d'un programme. Ils sont beaucoup utilisés dans l'analyse de logiciel et ont été aussi énormément étudiés.

Outils Des outils de désassemblage, debug et de capture de mémoire-vive peuvent être utilisés afin d'inverser et analyser la pile d’exécutables sous Windows. Les outils de désassemblage et de debug tel que IDA Pro, Ghidra, Radare2 et OllyDbg affichent le code du programme malveillant sous forme d'instructions assembleur x86 Intel, ce qui fournit des idées sur l'intention du malware et ce qu'il fait. De même que cela permet d'identifier l'attaque via les modèles utilisés par le malware. Les outils de capture de mémoire-vive comme OllyDump sont utilisés afin d'obtenir du code protégé localisé dans la mémoire du système et l'enregistrer dans un fichier. C'est une technique particulièrement utile pour analyser des exécutables qui sont chiffrés par exemple car ils sont difficiles à désassembler.

Limites

Logiciel malveillant avancé Un logiciel malveillant avancé contient une variété de mécanismes codés spécifiquement pour rendre sa détection et son décryptage difficile. Le tableau ci-dessous illustre trois approches pour échapper à l'analyse statique : TypeDescriptionChiffréDans cette approche, qui consiste à utiliser le chiffrement, un programme malveillant chiffré est généralement composé du déchiffreur et du corps principal du programme chiffré. Le déchiffreur récupère le corps principal du programme chaque fois que le fichier infecté est exécuté. Pour chaque infection, en utilisant une clé différente, le logiciel malveillant rend la partie chiffrée unique, cachant ainsi sa signature. Cependant, le principal problème de cette approche est que le déchiffreur reste constant de génération en génération. Cela permet aux scanners antivirus de détecter ce type de malware en fonction du modèle de code du déchiffreur.PolymorpheLe malware polymorphe parvient à créer un nombre incalculable de décrypteurs distincts à l'aide des méthodes d’offuscation, y compris l'insertion de code mort, la réaffectation de registre, et plus encore. Même si les malwares polymorphes peuvent efficacement contrecarrer la correspondance des signatures, leur corps constant qui apparaît après le déchiffrement peut être utilisé comme une source importante pour la détection.MétamorpheLe malware métamorphique a été proposé comme une nouvelle approche au malware polymorphe. Notez que ce malware utilise au mieux les techniques d’offuscation pour faire évoluer son corps vers de nouvelles générations, qui ont l'air différentes mais fonctionnent essentiellement de la même manière. Pour une telle évolution, il devrait être capable de reconnaître, d'analyser et de muter son propre corps chaque fois qu'il se propage. Il est important que le logiciel malveillant métamorphique ne révèle jamais son corps constant dans la mémoire en raison de ne pas utiliser le chiffrement. Cela rend ce type de malware difficile à détecter pour les scanners antivirus.

Offuscation L'idée de base est que certaines instructions du code original sont remplacées par des fragments de programme qui sont sémantiquement équivalents mais plus difficiles à analyser, ou que des instructions supplémentaires sont ajoutées au programme et ne modifient pas son comportement. À l'origine, cette technologie visait à protéger la propriété intellectuelle des développeurs de logiciels, mais elle a été largement utilisée par les auteurs de logiciels malveillants pour échapper à la détection. Pour éviter les scanners antivirus, les malwares, dans les nouvelles générations, évoluent leur corps grâce à la technique d'obfuscation.