Analyse des logiciels malveillantsL'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. ContexteLes 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[1]. 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[2]. 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[2]. 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[2]. Analyse statiqueL'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[2]. TechniquesDécompilationLa 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[3]. Signature numériqueLa 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[4]. 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)[5]. 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[4]. Chaînes de caractèresLes 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 N-grammesLes 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 :
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[6]. OpcodesUn 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[6]. Graphe de flot de contrôleLes 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[6]. OutilsDes 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 et OllyDbg affiche 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 LordPE et 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[7]. LimitesLogiciel 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 :
OffuscationL'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[10]. À 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[8]. Les techniques d’offuscation de binaire, qui transforment les binaires des logiciels malveillants en fichiers binaires auto-compressés et à structure unique, sont conçues pour résister à l'ingénierie inverse et rendent ainsi l'analyse statique très coûteuse et peu fiable. De plus, lorsqu'on utilise des exécutables binaires (obtenus en compilant du code source) pour l'analyse statique, les informations telles que, la taille des structures de données ou des variables, se perdent, compliquant ainsi l'analyse du code malveillant[11]. Le tableau ci-dessous présente les techniques d'obfuscation couramment utilisées dans les logiciels malveillants :
Bien qu'il soit concevable d'améliorer l'analyse statique pour traiter des techniques d'obfuscation plus avancées, il y a une limite fondamentale à ce qui peut être décidé statiquement[15]. L'évolution des techniques d'évasion utilisées par les auteurs de logiciels malveillants pour contrecarrer l'analyse statique a conduit au développement de l'analyse dynamique[11] car la plupart des transformations d'obfuscation deviennent inefficaces une fois le code exécuté[16]. Analyse dynamiqueAnalyser le comportement d'un code malveillant (les interactions avec le système) pendant qu'il est exécuté dans un environnement contrôlé (machine virtuelle, simulateur, émulateur, sandbox, etc) est appelé analyse dynamique[11]. L'analyse dynamique est plus efficace comparée à l'analyse statique et ne requiert pas la rétro-conception du programme. Cette analyse dévoile le comportement naturel du malware qui résisterait mieux à l'analyse statique. Cependant, cela coûte beaucoup de temps et de ressources ce qui soulève des problèmes d'évolutivité. L'environnement virtuel, dans lequel le malware est exécuté, est différent d'un environnement réel et le malware peut adopter un comportement artificiel plutôt que son comportement naturel. De plus, il arrive que le comportement du malware ne soit déclenché que dans certaines conditions (à une date système spécifique ou via une commande spécifique) et ne puisse pas être détecté dans un environnement virtuel[11]. TechniquesPlusieurs techniques peuvent être appliquées pour réaliser une analyse dynamique comprenant la surveillance des appels de fonctions, l'analyse des paramètres de fonction, le suivi de flux d'information, les traces d'instructions, etc[11]. Le tableau ci-dessous donne un aperçu des différentes techniques qui peuvent être utilisées :
Environnement d'exécutionAnalyse dans l'espace utilisateur / noyauAnalyser le programme malveillant dans l'espace utilisateur permet une approche d'analyse qui collecte des données, par exemple les invocations d'appels de fonctions ou les appels d'API. Une telle approche peut avoir facilement accès à toutes les structures de mémoire et aux informations de haut niveau fournies par le système d'exploitation. La possibilité de cacher des informations à l'analyse dans l'espace utilisateur est vraiment limitée. Par exemple, cacher un processus ou le chargement d'une bibliothèque aux autres processus tournants sur la machine n'est généralement pas possible depuis l'espace utilisateur. Cette limitation n'est pas aussi restrictive quand l'analyse d'un composant est sur l'espace noyau. Les outils d'analyse accédant aux fonctions au niveau du noyau peuvent collecter diverses informations, comme les invocations d'appels système et peuvent cacher leurs présences au logiciel malveillant qui s'exécute seulement dans l'espace utilisateur[17]. Analyse dans un émulateurExécuter un programme à l'intérieur d'un environnement émulé permet à un composant d'analyse de contrôler chaque aspect de l’exécution du programme. Selon la partie de l'environnement d'exécution émulé, plusieurs formes d'analyse sont disponibles. Émuler le processeur et la mémoire dans une sandbox permet d'exécuter du code potentiellement malveillant sans craindre des effets néfastes sur le vrai système. Un binaire est exécuté dans une sandbox en lisant de façon successive les instructions et en réalisant les opérations équivalentes dans l'environnement virtuel émulé. Tous les effets secondaires fait par l'exécutable sont contenus dans la sandbox. Beaucoup d'anti-virus emploient l'émulation de processeur et de mémoire pour surmonter les difficultés imposées par les exécutables offusqués ou chiffrés. Pour analyser un potentiel binaire chiffré, il est exécuté dans un environnement émulé et si l'anti-virus détecte une séquence non chiffrée, les signatures sont appariées sur le contenu de la mémoire non chiffrée contenue dans la mémoire émulée[17]. Analyse dans une machine virtuelleUne machine virtuelle (VM) est une duplication efficace et isolée d'une vraie machine. Le moniteur de machine virtuelle (VMM) est responsable de la gestion de cette copie aux programmes et est responsable du matériel sous-jacent. En pratique, cela signifie qu'aucune machine virtuelle ne peut accéder aux matériels avant que la VMM le lui assigne. Un composant d'analyse implémenté dans la VMM a l'avantage d'être invisible par les programmes analysée. Généralement, un tel composant d'analyse est soit directement intégré à la VMM ou dans sa propre machine virtuelle[18]. OutilsAvant d'exécuter un échantillon de malware, les outils appropriés à la surveillance sont[11] :
Plusieurs outils automatique pour l'analyse dynamique existent en ligne, par exemple :
Les rapports d'analyse générés par ces programmes donnent en profondeur une compréhension sur le comportement du malware et des éclaircissements sur les actions faites par celui-ci. L'analyse système doit avoir une représentation appropriée des malwares, qui sont par la suite utilisés pour la classification selon leur similitude ou leurs fonctionnalités semblables[11]. Contre-mesuresL’offuscation d’exécutable n'est pas une solution efficace contre une analyse dynamique car celle-ci ne se base pas sur la signature du binaire ou les instructions produitent par celui-ci mais elle se focalise sur son comportement et il reste le même avec ou sans offuscation. Une des contre-mesures existantes pour l'analyse dans un émulateur est la suivante : Pour un échantillon malveillant qui veut détecté qu'il est exécuté dans un environnement émulé, il doit réaliser une opération sur un composant qui n'existe pas ou n'est pas suffisamment simulé dans le système. Par exemple, l'émulateur peut avoir un comportements différent d'un vrai processeur dans le cas d'une faille connu sur les CPU (si le bug n'est pas pris en considération par l'émulation)[17]. Des instances de malware essayent de détecter la plateforme d'analyse dans laquelle ils se trouvent, le cas échéant, le malware s'arrête simplement ou va exécuter un comportement non suspect pour tromper l'analyse[19]. Dysfonctionnement de la machine virtuelleFaire dysfonctionner la machine virtuelle est un moyen facile de s'échapper de l’analyse. Par exemple, certains bugs étaient présents dans l'émulateur QEMU et l'un de ces bug était "QEMU NE2000 MTU heap overflow". Exploiter ce bug rendait la machine virtuelle instable et dysfonctionner jusqu'à l'arrêt anormal de celle-ci[20]. Attaque sur le tempsL'attaque sur le temps vise pour le logiciel malveillant à différencier s'il se trouve sur une machine virtuelle ou non. En effet, les performances des applications sont différentes d'un vrai système à un virtuel. Généralement, les performances d'une machine virtuelle sont plus lente qu'une machine réelle. Quelques techniques Anti-VM consistent à exploiter ces attaques sur le temps. Ces attaques mesurent le temps d'exécution des instructions pour identifier si l'environnement où ils se trouvent correspond à une machine virtuelle. Un autre type d'attaque vise le cache d'une machine virtuelle. En effet, sur une vraie machine, une même instruction aura un temps d'exécution selon que le cache est activé ou non, sans cache, les performances seront plus mauvaises. Sur une machine virtuelle, le temps d'exécution sera le même avec ou sans cache. Par conséquent, l'utilisation de ces attaques peuvent servir à dévoiler l'environnement sur lequel le logiciel malveillant se trouve[20]. Empreinte d'un périphérique virtuelLes empreintes d'une machine peuvent être utilisées comme moyen Anti-VM pour identifier l'environnement virtuel sur lequel le malware se trouve. En effet, les machines virtuelles créent des périphériques matériel avec des identifiants spécifiques qui peuvent être utilisés afin d'identifier la machine virtuelle[20] (par exemple, VMware utilise les tags "Logic BT-958" et "pcnet32" pour le périphérique VGA et la carte réseau). Exploitation d'un bug sur la machine virtuelleCertaines machines virtuelles possèdent des bugs connus qui peuvent être utilisés pour vérifier l'environnement. L'entreprise VMware avait annoncé que leurs produits avaient un bug qui permettait de sortir de la machine virtuelle. SI un attaquant peut accéder aux fichiers de la machine hôte depuis la machine virtuelle, cela donne l'opportunité de contrôler et d'infecter la vraie machine[20]. Lutte Anti-VMLes malware Anti-VM vont avoir un comportement différent selon l'environnement s'il est réel ou virtuel. Certaines solutions utilisent un algorithme appelé algorithme de distance de comportement (behavior distance algorithm) afin de distinguer si un malware est Anti-VM ou non. Cet algorithme compare la distance de comportement en estimant la variation du comportement des logiciels malveillants Anti-VM à partir d'environnements réels et virtuels. Pour cela, il utilise des séquences d'appel système et mesure la distance comportementale entre deux processus. Cette approche est capable de détecter des attaques de mimétisme avec de faibles faux positifs. Un moniteur de processus est aussi utilisé afin de collecter ces évènements[21]. Analyse hybrideLes approches d'extraction d’analyse statiques et dynamiques ont leurs propres avantages et limites. Comparée à l'analyse dynamique, l'approche statique est moins coûteuse et peut couvrir tous les chemins de code (y compris les morceaux de programme qui ne sont pas toujours exécutés), fournissant ainsi une caractérisation plus précise et complète des fonctionnalités du programme. Cependant, cela coute de haute performance en raison de techniques de mutation de bas niveau (comme l'offuscation ou le chiffrement). Au contraire, l'analyse dynamique résiste à l'obfuscation de bas niveau et convient à la détection de variantes de logiciels malveillants et de nouvelles familles, mais exécute souvent mal sur les échantillons de logiciels malveillants basés sir des déclencheurs. En outre, l'analyse dynamique est coûteuse et non évolutive en raison de sa couverture limitée. Selon les statistiques de Comodo Cloud Security Center, environ 80 % des échantillons de fichiers peuvent être bien représentés à l'aide d'une analyse statiques alors que seulement environ 40 % des échantillons de fichiers peuvent s'exécuter avec une analyse dynamique. En raison de leurs avantages et inconvénients respectifs, aucune approche statiques ou dynamiques ne peut fournir une solution parfaite à l'extraction de caractéristiques dans l'analyse de logiciels malveillants. Par conséquent, une approche globale intégrant à la fois l'analyse statique et dynamique et bénéficiant des avantages des deux serait souhaitable. L'analyse hybride est une approche qui combine les avantages respectifs de l'analyse statique et de l'analyse dynamique. Par exemple, le logiciel malveillant chiffré peut d'abord passer par un analyseur dynamique tel que PolyUnpack, où les parties de code masqué d'une instance de logiciel malveillant chiffré sont extraits en comparant l'exécution du programme malveillant avec son modèle de code statique. Une fois que les morceaux de code caché sont découverts, un analyseur statique peut continuer l'analyse du logiciel malveillant[22]. Approche forensique![]() Cette approche intègre à la fois l'analyse statique et les approches forensiques de la mémoire et propose des améliorations, qui fournit de meilleurs résultats. La raison en est la résistance de certains échantillons de logiciels malveillants à révéler leur comportement prévu en raison du cryptage et de leur nature compacte. Par conséquent, l'approche de l'analyse des logiciels malveillants statiques et les approches forensiques peuvent être combinés pour surmonter les problèmes de comportement et de chiffrement. L'outil Volatility est utilisé dans cette méthode[23]. L'analyse forensique se fait en quatre étapes :
Par la suite, les résultats sont comparés et vérifiés avec les résultats obtenus sur l'outil en ligne de VirusTotal, qui est un outil d'analyse de malwares en ligne. ClassificationApprentissage automatiqueDiverses approches d'apprentissage automatique ont été proposées, pour détecter et classer des échantillons inconnus dans des familles de logiciels malveillants connus ou pour les analyser, telles que[11] :
De nombreux chercheurs préfèrent maintenant travailler sur des techniques dynamiques afin d'améliorer la précision et l'efficacité de la classification des logiciels malveillants[24]. Analyse phylogénétiqueL'analyse phylogénétique est l'étude des similitudes et des différences dans la structure du programme pour trouver des relations au sein de groupes de logiciels, fournissant des informations sur les nouvelles variantes de logiciels malveillants non disponibles à partir de la détection de logiciels malveillants basés sur les signatures. Un exemple de solution utilisant cette analyse est la solution DECODE. Les principales technologies de DECODE :
Références
AnnexesBibliographie
Articles connexesLiens externes
|
Portal di Ensiklopedia Dunia