Différents malwares, différentes techniques
Depuis l'apparition des premiers vers informatiques, les malwares n'ont cesser de se transformer, et de se diversifier.
Dans un précédent article, nous avons recensé
14 familles de malwares différentes !
Chaque famille a un comportement différent : un dialer n'utilise pas les même librairies ou les mêmes API qu'un ransomware !
Du coup, au fil des années les antivirus ont développé plusieurs techniques leur permettant d'augmenter la détection de ces programmes indésirables.
La détection de malwares en utilisant les fonctions de hash
C'est certainement la technique la plus simple à mettre en oeuvre.
Quand un fichier est identifié comme malware, il suffit de faire un hash de ce fichier.
Pour ceux qui n'ont pas lu la fiche sur
les fonctions de hachage, un hash permet de générer une image condensée d'un fichier.
Ce condensé fait quelques octets de long. Par exemple, le hash "b7886dea21ca22a10190d8551c7c3283" correspond au malware "Downloader.Agent2.AQQX". Pourtant le fichier fait 284 Ko, mais le hash est en quelque sorte le "résumé unique" du fichier.
Aussi un antivirus utilisant cette technique de hash n'a plus qu'à générer les hashs de tous les fichiers d'un ordinateur, et s'il retrouve le hash du malware parmi les fichiers, il est alors sûr et certain que le malware est présent dans ce fichier, sur cet ordinateur.
Vous l'avez compris, cette technique, bien que très ancienne, a l'énorme avantage de n'avoir que très peu de faux positif.
Malheureusement c'est aussi la technique la moins souple pour détecter des malwares, car si le fichier du malware change son contenu d'un seul octet, et même d'un seul bit, alors cela produit un hash différent.
Donc le malware n'est plus reconnu car il ne correspond plus au hash enregistré dans l'antivirus. Il faut donc un hash différent par variante de malware. Et à notre époque, c'est juste impossible à faire car des virus tels que Vundo, Sality ou Expiro infectent tous les fichiers exécutables d'un ordinateur avec un payload différent à chaque fois. Il y a donc une infinité de hash différents rien qu'avec un de ces virus, rendant totalement inefficace la détection par algorithme de hachage.
L'autre inconvénient est que cette technique de détection consomme beaucoup de mémoire RAM, car une signature = un malware. Donc si vous souhaitez détecter un milliard de malwares, il vous faut un milliard de signatures en RAM.
Certains antivirus, comme ClamAV, utilisent cette technique de hash sur l'intégralité d'un fichier, mais peut aussi le faire sur les sections des exécutables Windows. Ce qui permet de rendre un peu générique la détection à base de hash, car certain malwares ont la même section dans le fichier, même si les autres sections sont différentes d'une variante à l'autre.
Pour résumer :
- La détection de malware par une fonction de hachage est rapide et très fiable.
- Mais elle est inappropriée pour les malwares qui se propagent en créant des variantes d'eux même.
- Et elle prend beaucoup de ressources en RAM
Il faut donc chercher d'autres techniques qui permettent des détections plus larges
Les signatures statiques
Une signature statique est un tout petit extrait d'un malware, qui permet de le reconnaître à coup sûr.
Un peu comme si l'on prélevait l'ADN d'un virus et que, si cet ADN est présent dans un de nos fichiers, c'est que le virus a infecté notre ordinateur.
Un petit exemple de signature statique ? La signature suivante identifie une variante du malware DownloadGuide : "6563643d5f5d5e67555354ff575556ff484647a338363767656364676563646764626329"
Les caractères hexadécimaux ne représentent plus un hash, mais une chaîne de caractères qui se retrouvent dans un fichier.
Ces signatures peuvent être génériques avec l'utilisation de wildcards ("*" ou "?" par exemple).
Il est alors possible de détecter plusieurs malwares, généralement des variantes du même malwares, avec une seule signature. Ce qui fait de la signature statique une technique de détection beaucoup plus souple et beaucoup plus efficace que le hachage.
La limite de cette technique est qu'elle est très mal adaptée à détecter les malwares qui se cryptent aléatoirement (polymorphisme), ou qui sont obscurcis par des obfuscateurs ou de compacteurs d’exécutables.
Cette technique a été employée très tôt par les antivirus, et c'était la principale technique de détection de malwares dans les années 1990.
Pour résumer :
- La détection par signature statique est beaucoup plus large car elle permet la détection de plusieurs variantes d'un même malware.
- La signature statique permet une souplesse très grande à la personne qui crée ces signatures.
- Mais elle peut engendrer quelques faux positifs
- Elle consomme beaucoup plus de temps CPU que les fonctions de hachages et quasiment autant de mémoire.
- Certains malwares passent facilement cette technique de détection, il faut donc lui trouver une autre technique...
La technique des heuristiques
Les heuristiques sont un ensemble de règles qui permettent d'identifier un malware par son comportement. Lorsque ces règles sont établies, il est alors possible de détecter un malware qui n'a jamais été vu avant. Et cela change tout !
Avant, le hash ou la signature statique ne peut être généré que si le malware est analysé par une personne.
Ici, c'est un ordinateur qui analyse le malware grâce à ses règles pré-établies de comportement. L'action humaine n'est donc plus nécessaire, et l'antivirus devient (presque) indépendant.
Par exemple, ces règles peuvent être :
Si un exécutable ouvre d'autres fichiers exécutables et les modifie, et qu'il ouvre un port TCP/IP exotique sur l’ordinateur, et qu'il ajoute une clé de registre dans la section "Run" de la base de registre, alors on en conclut que c'est un malware.
Un des premiers antivirus qui utilisait des heuristiques était ThunderByte Antivirus, sous DOS, au début des années 1990. Puis cette technique a surtout été utilisée par les antivirus au début des années 2000. A l'époque cela a fait l'effet d'une mini révolution, car était fantasmée l'idée de posséder un
antivirus qui ne se met jamais à jour (article de 2002), croyant que ces heuristiques étaient suffisantes à détecter tous les futurs malwares.
L'inconvénient est que ces règles sont très souvent statiques, et le fichier est analysé à plat (c'est à dire non exécuté pour éviter l'infection). Aussi, si ce fichier est crypté ou obscurci, la détection peut passer à côté et déclarer le fichier sain. De plus, c'est mal adapté à tous les langages de programmation. Par exemple les malwares écrits en Java et compilés n’étaient pas pris en compte par ces heuristiques qui ne se consacraient qu'aux fichiers .exe. Et je ne parle pas des malwares en perl, python ou javascript... Les compacteurs d'exécutables permettaient aussi de passer sous les radars des heuristiques.
De plus, les malwares devenant de plus en plus compliqués il est devenu très difficile de maintenir à jour cette liste de règles heuristiques.
Et le pire de tout, c'est que cette technique, si elle est mal maîtrisée, provoque beaucoup de faux positifs. C'est à dire que des programmes légitimes étaient détectés comme malwares ou suspicieux, ce qui provoquait quelquefois la panique dans les entreprises...
Pour résumer :
- C'est la première technique qui permet de détecter des malwares encore inconnus !
- Mais il peut y avoir beaucoup de faux positifs.
- Certains malwares échappent facilement à cette technique, il faut donc encore trouver une autre technique de détection...
L'analyse d'un malware avec un calcul de l'entropie
L'entroquoi ? L'entropie est, en quelque sorte, une mesure du niveau de chaos ou de désordre. Prenons quelques exemples :
"01 01 01 03 03 01 01 05 06 06 01" est une chaîne de caractères à entropie faible, car elle ressemble à une suite logique, quelque chose qui semble ordonné, quelque chose qui pourrait avoir un sens.
"99 15 03 78 54 36 70 08 42 46 87" est une chaîne de caractères à entropie forte, car on dirait que ces nombres ont été déposés à la suite les uns des autres de façon aléatoire, ou au moins désordonnée, sans aucune logique apparente.
Quel rapport entre les malwares et l'entropie ?
Si on transpose ce concept aux fichiers d'un ordinateur voici ce qu'on obtient :
- Un fichier .txt contenant un texte écrit en anglais a une entropie faible : Beaucoup de caractères se ressemblent (26 lettres de l'alphabet = seulement 26 caractères différents), et il y a toujours des espaces entre les mots.
- Un fichier .exe comporte une entropie moyenne. Si on regarde un fichier .exe avec un éditeur hexadécimal, nous voyons qu'il y a des zones du fichier qui ont une entropie forte, et d'autres une entropie faible.
- Un fichier crypté avec un logiciel de chiffrement a une entropie très élevée. Si on regarde ce fichier avec un éditeur hexadécimal nous ne voyons pas de zone avec de l'entropie faible, il n'y a que de l'entropie forte.
Mais alors, comment détecter la présence d'un malware avec un calcul d'entropie ?
Prenons l'exemple d'un virus qui infecte les fichiers .exe :
Ce virus infecte les .exe en ajoutant son code d'infection à la fin de la section n°0 de l'exécutable (la section n°0 est la section qui s'exécute quand vous exécutez l'exécutable. Elle ne contient pas d'image ou d’icône, seulement le code à exécuter).
Son code d'infection, que l'on appelle payload, fait 350 octets de taille. De plus, ce virus est polymorphe, il ne permet donc pas de créer une signature statique pour le détecter.
Mais, puisqu'il est polymorphe, il y a de très grandes chances que son payload soit de très grande entropie.
Par conséquent, nous pouvons créer la règle suivante :
Si les 350 derniers octets de la section n°0 de l'exécutable ont une grande entropie, c'est qu'un infecteur polymorphe a contaminé le fichier .exe.
Pour résumer :
- L'analyse de l'entropie est une analyse statique du fichier.
- Elle permet de détecter de très nombreuses variantes d'une même souche virale.
- Elle est rapide à effectuer.
- Elle se complémente bien avec l'analyse heuristique.
Malheureusement, dans les faits, l'analyse de l'entropie génère quelques faux positifs qui sont compliqués à détecter et à corriger.
De plus, elle ne permet pas d'être appliquée à tous les cas. Par exemple, elle fonctionne assez bien pour les .exe et les fichiers textes, mais très mal pour des fichiers Java compilés.
L'exécution dans un bac à sable (sandbox)
La technique du bac à sable est d'utiliser un environnement virtuel et contrôlé pour exécuter le fichier suspect dans cet environnement. Le terme anglais est alors "sandbox" pour l'environnement virtuel, et la technique "sandboxing".
Toutes les étapes de l'exécution du fichier dans cette virtualisation sont alors enregistrées, puis analysées pour en conclure si le fichier est un malware ou non.
Cette technique permet donc, tout comme les heuristiques, de détecter des malwares inconnus sans intervention humaine. De plus, les malwares obscurcis, cryptés ou compactés avec un compacteur d'exécutables sont détectés puisqu'ils sont exécutés.
Cette technique est fortement utilisée de nos jours. Un exemple de logiciel open source utilisant une sandbox pour analyser les malwares est
Cuckoo Sandbox. Les sandboxes en ligne sont principalement
Any.run,
Hybrid analysis et
Joe sandbox, pour ne citer qu'eux.
L'inconvénient est une proportion non négligeable de faux positifs (la distinction entre un outil d'administration de serveur et un outil de hacking est quelque fois très faible).
De plus, certains malwares utilisent des
techniques de détections d'environnements virtuels, n'exécutant pas leur code hostile s'ils se trouvent dans une machine virtuelle. Par conséquent, l'antivirus en sandbox considère que le fichier est sain alors qu'il ne l'est pas !
Le machine learning
Pour détecter les malwares qui échappent encore au sandboxing, les ingénieurs ont eu l'idée d'utiliser l'intelligence artificielle.
Seulement, pour qu'une intelligence artificielle fonctionne correctement, il lui faut une très grande quantité de fichier à analyser, et cela quotidiennement.
Ce type d'antivirus convient donc parfaitement à l'exécution dans le cloud. Car l'IA se situe dans le cloud, et votre client antivirus est un client léger, dont le but est de suspecter un malware. Si l'antivirus de votre poste suspecte un malware, il envoie le fichier à l'IA dans le cloud qui, elle, va apprendre et décider si c'est un malware ou non.
Cette intelligence artificielle, constamment en mode apprentissage pour être en phase avec la réalité du terrain, reçoit donc quotidiennement des milliers de fichiers provenant de tous les ordinateurs qui sont équipés du même antivirus cloud.
L'avantage est que votre antivirus est toujours en apprentissage, donc toujours à jour des derniers malwares, ce qui en fait une protection idéale ! Il n'y a plus besoin de mettre à jour les bases antivirales, puisqu'il suffit d'envoyer les fichiers suspects à l'IA dans le cloud.
De plus, l'analyse étant effectuée dans le cloud, très peu de ressources sont utilisées sur votre ordinateur, qui ne subit donc pas de ralentissements.
L'inconvénient est que certains de ces fichiers sont donc envoyés à votre fournisseur antivirus, et vous ne contrôlez pas lesquels vous envoyez. C'est le client antivirus qui décide pour vous.
Oui vous avez bien lu, vos fichiers partent dans le cloud sans que vous le demandiez explicitement, relisez donc les conditions générales d'utilisation de votre antivirus préféré. Et vérifiez s'il y a une clause qui prévoit le partage de vos fichiers aux autres éditeurs antivirus : c'est une pratique courante. Mais nous avons déjà parlé de l'
enjeux des données confidentielles dans le cloud.
De plus, l'intelligence artificielle n'est pas encore, en 2020, une technologie maîtrisée à 100%. L'IA n'est pas encore très intelligente, quelque soit le domaine d'activité... Il peut donc y avoir des loupés.
Le Endpoint Detection and Response, EDR, la solution ultime pour détecter les malwares ?
La technique la plus récente de détection de malwares est l'EDR. EDR signifie "Endpoint Detection and Response", c'est à dire "détection et réaction sur les terminaux". Les terminaux sont les ordinateurs (stations de travail et serveurs) et les mobiles (téléphone, tablettes) que vous utilisez quotidiennement à votre travail.
Bref, en quoi ça consiste cet EDR ? Et bien ça ressemble beaucoup au machine learning : un client léger envoie vos fichiers suspectés (ou non, certains envoient tous les fichiers exécutables par exemple) à une IA dans le cloud, qui elle, prend la décision de conclure si votre fichier est hostile ou pas.
Mais en plus l'antivirus fait de l'analyse comportementale. C'est à dire que l'activité du système d'exploitation de votre ordinateur est analysée en permanence.
Que ce soit votre activité humaine, ou celle des autres programmes. Cette analyse permet de créer un modèle, et si un comportement de programme sort du périmètre du modèle, c'est alors, par définition, suspect !
Cela permet, en théorie, de mieux détecter les malwares inconnus et d'être beaucoup plus réactif à prendre une décision pour sauvegarder l'intégrité de votre système d'information. D'où le "Response" dans l'acronyme EDR.
L'inconvénient de cette technique est l'analyse comportementale. Tout comme l'intelligence artificielle, cette analyse comportementale peut se tromper, engendrer des faux positifs ou laisser passer un malware. Tout comme l'IA, c'est une technologie en cours de développement, et pas encore totalement aboutie.
L'EDR n'est donc pas la solution ultime pour détecter un malware, même si c'est la plus évoluée et la plus récente actuellement.
La plus récente technique de détection de malwares : la transformation en image
En mai 2020, Intel et Microsoft ont annoncé une
nouvelle analyse de malwares basée sur la transformation des malwares en images.
Cela peut sembler farfelu au premier abord, mais au final c'est plutôt intelligent. Voyons comment ça marche :
- Les données d'un fichier à analyser sont convertis en pixels, ces pixels sont regroupés en image.
- L'image est redimensionnée (certainement pour la rendre carrée au lieu d'avoir une seule ligne de pixels), en fonction de la taille du fichier.
- L'image est ensuite soumise à une intelligence artificielle, qui va analyser cette image et ainsi déterminer les caractéristiques du fichier analysé.
- Cette analyse permettra de classer le fichier entre légitime ou malware, et si c'est un malware de le classer dans l'une des nombreuses familles de malwares.
Même si ce n'est pas dit dans l'article, on peut facilement imaginer que l'image ainsi créée permet de
voir l'entropie ! Les zones à entropie faible se distinguent nettement des zones à entropie forte, et cela doit créer des formes, des motifs ou des courbes dans l'image. Et cela tombe bien, puisqu'en 2020 la reconnaissance de formes dans une image est clairement à portée d'une intelligence artificielle.
Cette nouvelle technique est donc une nouvelle piste prometteuse pour détecter les malwares dans les prochaines années.
La résurrection de l'analyse statique face au cloud
Ce qui est surprenant, c'est que cette technique de détection basée sur la transformation en image est une analyse statique du malware ! Et cela va à l'encontre des techniques les plus récentes : le bac à sable, le machine learning et l'EDR sont tous dynamiques.
On croyait l'analyse statique sur le déclin face à l'analyse dans le cloud, et voilà qu'elle est remise au goût du jour !
Car l'analyse statique comporte un énorme avantage face aux meilleures intelligences artificielles : Elle peut se réaliser sur le Terminal à protéger (le Endpoint comme on dit dans ce milieu).
Car le jour où vous avez une panne de connexion à Internet, vous n'avez plus accès à l'intelligence artificielle dans le cloud, vous n'êtes donc plus protégé ! Et il y a le même problème si les services cloud de votre fournisseur antivirus ne fonctionnent plus (panne matérielle, panne réseau, panne du fournisseur d'énergie, attaque
DDoS, attaque de hackers...)
En conclusion, quelle est la meilleure technique pour détecter un malware ?
La meilleure et la plus fiable de détection, est d'utiliser toutes ces techniques. Chaque technique a des avantages et des inconvénients, mais elles ne sont pas en opposition, elles sont complémentaires.
Aujourd'hui, un antivirus digne de ce nom se doit d'utiliser un maximum de ces techniques pour augmenter la fiabilité, la vitesse, et l’exhaustivité de sa détection.
Et méfiez vous de tous les prophètes qui, depuis le début des années 2010, vous expliquent que l'analyse statique de l'antivirus à papa, c'est fini, que maintenant c'est l'analyse dynamique et le cloud... Cet excellent article de F-Secure vous apprendra que déjà
en 2016, ils utilisaient un mix de techniques de détection pour analyser les malwares, dévalorisant au passage l'article "The Real Value of a Non-Signature-Based Anti-Malware Solution to Your Organization" de Gartner...
Pour aller plus loin : les produits et services de SecuriteInfo.com dans le domaine de la détection de virus et malwares
SecuriteInfo.com vous propose nos prestations et produits dans le domaine de la détection de malwares :
Arnaud Jacques / Créateur de signatures antivirales pour l'antivirus ClamAV depuis 2009
Tags
ANTIVIRUS
MALWARE
CLOUD
DÉTECTION D'INTRUSION
MÉTHODOLOGIE
Inscription à notre lettre d'information
Inscrivez-vous à notre
lettre d'information pour vous tenir au courant de nos actualités et de nos dernières trouvailles.