Introduction
Lors de mon analyse du malware DarkGate, je me suis renseigné sur internet pour l’analyse du script AutoIt, sans vrai résultat. Je me suis ainsi mis en tête d’automatiser l’extraction du shellcode à partir du script VBS initial.
Script VBS
La première étape de cette infection passe par un script VBS. Celui-ci est légèrement obfusqué et son fonctionnement est clair
|
|
Le script contacte une URL et stocke le résultat dans une variable. Voici le résultat dans mon cas:
|
|
Il s’agit donc d’une commande cmd qui effectue les actions suivantes :
- Copie l’exécutable curl dans le dossier actuel
- Télécharge un exécutable AutoIT3 authentique depuis l’URL
- Télécharge un script AutoIT3 depuis l’URL
- Exécute ce script
Script AutoIt3
AutoIt3 est un langage de scripting souvent utilisé par les opérateurs de malwares pour dropper des exécutables.
Nous pouvons ouvrir ce fichier avec l’éditeur de scripts AutoIt pour analyser son code, or, celui-ci n’apparaît pas. Il s’agit en fait d’un script .a3x
(version compilée d’AutoIt) à laquelle on ajoute des centaines de lignes de données inutiles :
Pour extraire ce script, j’ai utilisé binary-refinery, une bibliothèque Python permettant d’interagir avec les fichiers et y appliquer différentes opérations.
|
|
Cette commande extrait le script en a3x du document et le décompile afin de nous donner accès au script en clair que nous allons pouvoir analyser.
Ce script est une nouvelle fois légèrement obfusqué par l’ajout de variables inutiles et la conversion de certains strings en format binaire. Voici le script une fois nettoyé :
|
|
Premièrement, on aperçoit 2 appels API, VirtualProtect
et CallWindowProc
, qui font partie d’une technique d’injection par callbacks, ainsi qu’une vérification de la présence du l’antivirus Sophos
sur la machine.
Le plus intéressant se déroule dans la fonction DECRYPTFILEWITHKEY
, où un fichier semble être déchiffré.
|
|
Le programme recherche de la donnée entre 2 strings (padding), ce qui correspond à du binaire dans le fichier original nbquok.au3
.
Une fois le blob binaire extrait, le script va effectuer une opération sur la clé darkgate
afin de créer une clé servant à déchiffrer le shellcode.
|
|
J’ai reproduit cette opération en Python, ce qui nous donne une clé 0xB
:
|
|
Enfin, le programme déchiffre le shellcode avec la clé 0xB
et l’exécutera dans grâce au callback CallWindowProc. J’ai automatisé l’extraction de ce shellcode en Python avec ce script :
|
|