Généralement, on distingue trois techniques pour détecter un malware : les bases de signatures, l’analyse statique et l’analyse dynamique. Mais elles ont toutes des limites. L’augmentation exponentielle du nombre de malwares rend l’utilisation de signatures de plus en plus compliquée.
L’analyse statique, qui s’appuie sur la décompilation, offre certes une vision assez complète des rouages internes d’un exécutable, mais elle peut être déjouée par les techniques d’obscurcissement.
L’analyse dynamique, qui s’appuie sur une observation « in vivo » d’un malware, n’est pas gênée par l’obscurcissement, mais le passage à grande échelle est difficile. Exécuter un malware, en effet, prend du temps. De plus, on n’est jamais certain d’avoir pu observer tous les aspects d’un code malveillant, qui dispose peut-être d’un détecteur d’environnement d’analyse.
Les octets d’un exécutable deviennent des pixels
Une nouvelle voie semble désormais percer : l’analyse statique des malwares sous la forme d’images. L’idée peut sembler saugrenue, elle est pourtant suffisamment solide pour que les chercheurs de deux géants informatiques, Microsoft et Intel, s’y engouffrent dans le cadre d’un projet baptisé « Stamina » (STAtic Malware-as-Image Network Analysis).
Sur le principe, c’est assez simple. On transforme les exécutables à analyser en fichier image, en associant chaque octet à un pixel monochrome dont l’intensité est comprise entre 0 et 255.
Ensuite, on fait passer ces images à la moulinette d’un algorithme de classification pour savoir s’il s’agit d’un malware.
Aussi étrange que cela puisse paraître, ça marche, et même plutôt bien. Les premiers à avoir expérimenté cette approche étaient des chercheurs de l’université de Californie Santa Barbara.
En 2011, ils ont calculé les textures de ces images de malwares (« gist features ») et on remarqué que celles-ci se répétaient dans une même famille. Sur une collection de près de 10 000 malwares, ils sont arrivés d’emblée à un taux de précision de 98 %, ce qui était plutôt prometteur. L’autre avantage, c’est que le taux de détection était insensible à l’obscurcissement, et même au chiffrement du code. Les motifs de textures étaient certes différents, mais restaient détectables.
En 2018, des chercheurs de l’université de San Jose ont repris le flambeau en utilisant, cette fois, un modèle d’apprentissage profond pré-entraîné sur de larges collections d’images, et dont les dernières couches de neurones ont été ré-entraînées sur des images de malwares.
Cette technique d’apprentissage dite de « transfert » évite de bâtir un réseau de neurones complexe en ne partant de rien. A qualité de détection égale, ce dispositif s’est révélé finalement plus performant, car il évite le calcul direct des textures, ce qui est assez long et pénible. Cette technique permettrait donc une application plus rapide des IA entraînées à grande échelle.
Microsoft et Intel viennent maintenant de pousser ce dispositif de deep learning par transfert un cran plus loin, en optimisant la phase d’apprentissage et en ajoutant à la transformation en images des techniques de segmentation et de redimensionnement.
Puis, ils ont appliqué le modèle obtenu à une collection de 2,2 millions d’exécutables de tailles diverses. Ils obtiennent au final un excellent taux de précision de 99,07 %, ce qui est plus qu’encourageant.
Il y a toutefois un bémol. Pour les exécutables de grande taille, les images de malwares sont composées de milliards de pixels et le traitement des images devient assez lourd à gérer. La performance de calcul en pâtit.
Mais ce n’est pas une raison pour ne pas continuer à creuser ce sillon. D’autant qu’il n’est pas impossible que cette technique se retrouve, un jour, dans nos PC, sous la forme d’un module de Windows Defender.
Sources : Microsoft, UC Santa Barbara, San Jose State University