Dans un précédent article, nous avons réalisé une étude sur un email malveillant et constaté que du code peut être exécuté lors de l'ouverture de pièces jointes. Aujourd'hui, nous nous consacrerons à ces codes malveillants qui sont exécutés. On va comprendre ce qu'ils réalisent et quelles sont les techniques utilisées pour compliquer le travail des analystes et outrepasser les protections.
Avant de commencer, faisons un petit rappel de certains mots clés :
Aujourd’hui, les attaquants utilisent très souvent les mêmes vecteurs d'attaques pour les downloaders et les droppers, à savoir, les macros dans les documents Office et du code JavaScript dans les fichiers PDFs. Un analyste ou un programme peut détecter ce code, l'extraire et l'analyser pour comprendre son fonctionnement et bloquer rapidement la menace. De ce fait, les attaquants sont obligés d'utiliser des techniques pour retarder au maximum la détection de leurs fichiers malveillants ; l'obfuscation de code est une des méthodes les plus employées et c'est celle-ci que nous allons voir aujourd'hui.
L'obfuscation, dans l'informatique, consiste à rendre un programme exécutable ou un code source illisible et difficile à comprendre par un être humain, tout en conservant son fonctionnement. L'objectif est de contourner le maximum d'analyseurs de code statique mais aussi de faire perdre du temps aux analystes qui vont étudier le code. L'obfuscation des chaines de caractères est l'une des techniques les plus utilisées par les créateurs de malware. Cette méthode consiste à dissimuler, ou à rendre incompréhensible, les chaines de caractères grâce à un algorithme qui va se charger de décoder les données lors de l’exécution du code. Cet article s'intéresse principalement à cette technique d'obfuscation au travers des downloaders.
Nous allons étudier deux exemples de codes trouvés dans des downloaders ces derniers mois. Dans un premier temps, nous allons commencer par un exemple simple pour comprendre le fonctionnement et l'intérêt de l'obfuscation, puis nous étudierons un cas plus compliqué car oui... la simplicité dans l'analyse de malware est rare et quand elle arrive, nous devons en profiter pleinement et voici un exemple parfait pour commencer !
Type Fichier | SHA1 | VirusTotal | VirusBay |
39809b0836b3198e472e9e5a4f15f5e75ab49265 |
Sans plus tarder, entrons dans le vif du sujet et regardons de loin ce petit bout de ce vilain code qui provient du fichier PDF malveillant ci-dessus.
D'un point de vue général, il est difficile de comprendre ce que réalise ce code, bien que la ligne 1 nous donne un très gros indice avec une URL qui pointe vers un fichier EXE... Lorsque j'analyse du code malveillant, ma première étape consiste à le rendre le plus lisible possible, par exemple en ajoutant des sauts de lignes, des espaces et en séparant le code en plusieurs parties.
Voici le résultat obtenu, un peu plus lisible et compréhensible non ?
Le code a été divisé en 6 blocs, séparés par une ligne vide :
On remarque très rapidement que les parties 2, 3, 4 et 5 commencent par '& @echo' et se termine avec '>> N2o.vbs'. À quoi cela peut-il bien correspondre ?
Pour résumer, les parties 2, 3, 4 et 5 sont uniquement des commandes qui vont écrire dans le fichier 'N2o.vbs'.
Pour le moment, voici ce que nous savons et les étapes que va réaliser le code :
Pour comprendre ce que va réaliser le code, il faut analyser le fichier 'N2o.vbs' :
On remarque que la fonction 'K4d' est appelée à plusieurs reprises (ligne 2, 4, 5 et 8) avec une chaine de caractère incompréhensible. Au vu de la fonction et du code, on peut en déduire que la chaine d'entrée va être transformée pour en ressortir une chaine compréhensible qui sera ensuite utilisée. Il est d’ailleurs très étonnant que la chaîne la plus intéressante du code, à savoir l'URL, n'a pas été obfusquée. Il s'agit probablement d'un oubli...
Regardons ce que fait exactement cette fonction :
Procédons pas à pas avec l'utilisation de la fonction K4d ligne 5 qui donne comme chaîne d'entrée "jhw". La chaîne d'entrée à une longueur de 3, il y aura donc 3 tours de boucle.
1er tour de boucle
2ème tour de boucle
3ème tour de boucle
Après les 3 tours de boucle la fonction retourne la chaîne "GET". L'appel de cette fonction aux lignes 2, 4 et 8 retourne respectivement les chaînes "ITL.EXE", "MSXML2.XMLHTTP" et "ADODB.STREAM".
Nous pouvons donc maintenant remplacer toutes les chaînes de caractères, variables et supprimer la fonction qui n'est plus nécessaire pour simplifier le code au maximum. Voici le résultat final, nettement plus simple à lire et comprendre non ?
Le code restant est divisé en 2 parties. La partie 1 (lignes 1 à 3) va récupérer les données du fichier 'albert.exe' puis la partie 2 (lignes 5 à 11) s'occupe d'écrire les données récupérées dans un fichier nommé 'ITL.EXE'.
Nous connaissons à présent toutes étapes que réalise le code malveillant :
URL | URL Scan |
hxxp://ultimatefifa[ . ]com/po/albert[ . ]exe |
Fichier | SHA1 | VirusTotal | VirusBay |
albert.exe | 33985325dd64e06a3e3af0c540073eefd07d9596 |
Nous en avons terminé pour cet exemple et comme nous avons pu le voir, ici, l'obfuscation du code est vraiment très légère et d'autant plus du fait que l'URL du fichier téléchargé est lisible dès le début (probablement une erreur...) contrairement aux autres chaînes de caractères présentes dans le code.
Dans une seconde partie, nous verrons ce qui se fait actuellement et quel niveau d'obfuscation il est possible d'atteindre.