L’un des champs applicatifs les plus surprenants des réseaux de convolution — et plus largement du machine learning — est la détection de malware. Le nombre de signatures de logiciels malveillants a explosé de façon exponentielle à la fin des années 2000, décuplant la tension entre la sécurisation des systèmes et l’analyse effective des menaces.
Les limites des approches classiques
Jusqu’alors, l’étude d’un programme suspect se décline en deux approches complémentaires : l’analyse statique, sur le programme désassemblé, et l’analyse dynamique, au sein d’un environnement contingenté (une sandbox isolée). Ces deux méthodes restent coûteuses, fastidieuses, et se heurtent à des problèmes de mise à l’échelle. Les développeurs de malware, de leur côté, cherchent en permanence de nouveaux dérivatifs et de nouvelles stratégies d’obfuscation ; et il n’est pas toujours aisé de reproduire, en laboratoire, les conditions précises qui déclenchent le comportement malveillant d’un échantillon.
Le machine learning apparaît alors comme une alternative palliant ces limites, tout en offrant une simplicité d’adaptation continue aux évolutions des pratiques malveillantes.
Transformer un binaire en image
L’intuition centrale est la suivante : une image n’est jamais qu’un signal bidimensionnel. Or cette configuration s’obtient aisément en redimensionnant le bytecode d’un programme — son écriture binaire brute — en une matrice . La largeur de l’image, , est fixée à l’avance ; sa hauteur, , dépend de la taille du fichier considéré. Le fichier source est parsé en tokens de 8 bits, produisant une matrice de valeurs projetées dans — ce qui donne, très concrètement, une image en niveaux de gris.
Cette transformation, presque triviale d’un point de vue technique, ouvre la voie à l’application directe des réseaux de convolution développés pour la classification d’images classiques : on ne détecte plus un malware en lisant son code, mais en regardant sa texture.
Ce que révèlent ces images
Les images ainsi produites révèlent des textures représentatives des différents segments du programme — segment de code, segment de données — que l’œil, entraîné ou non, peut apprendre à distinguer visuellement. Un trait notable, et sans doute la raison principale de l’intérêt porté à cette approche, est sa robustesse face à l’obfuscation du code : une transformation qui modifie la structure syntaxique d’un programme sans en changer profondément la texture binaire globale laisse souvent une empreinte visuelle reconnaissable, là où une analyse statique traditionnelle se retrouverait aveuglée.