Dans le cadre d’un CTF, j’ai eu à analyser un « maldoc », un document Word malveillant.
Vous pouvez télécharger ce maldoc « 49b367ac261a722a7c2bbbc328c32545 » sur le (très bon) site : https://cyberdefenders.org/labs/76
Tout d’abord comment savoir qu’il s’agit d’un document Office ?
Le plus simple est d’utiliser la commande file sous Linux (il existe même une version compilée pour Windows), à défaut vous pouvez ouvrir le fichier dans un éditeur hexadécimal et comparer les premières valeurs avec ce tableau (document de référence, https://www.sstic.org/media/SSTIC2021/SSTIC-actes/oletools/SSTIC2021-Slides-oletools-lagadec.pdf)
Dans notre cas on a ceci :
C’est un fichier OLE (Word/Excel/PPT 97).
S’agissant d’un fichier OLE, je vous conseille l’outil « olevba » (https://github.com/decalage2/oletools) qui va nous être d’une grande aide pour désosser ce fichier à la recherche des macros et mots-clefs suspicieux sans pour autant l’exécuter.
Voici les éléments le plus intéressant relevés par olevba, à la lecture du code des macros il semble y avoir :
- Un drop d’un fichier maintool.js dans le dossier AppData de l’utilisateur
- Exécution de ce fichier maintool.js avec la valeur EzZETcSXyKAdF_e5I2i1 en paramètre
On peut confirmer cette hypothèse en exécutant la macro dans une sandbox (en local ou sur Internet), dans un Word en vrai mais en mode debug (little dangerous) ou bien via un parseur et émulateur de code VBA (pas besoin de Word dans ce cas), par exemple avec ViperMonkey (https://github.com/decalage2/ViperMonkey)
Testons donc avec ViperMonkey (dans mon cas il tourne dans un container docker) :
On voit bien dans le flot d’exécution le drop d’un fichier (« Dropped File Hash »).
On va maintenant s’intéresser à ce fichier droppé, le fichier maintool.js.
Pour le récupérer j’ai choisi la méthode via la sanbox sur Internet via « App Any Run », en voici une exécution (https://app.any.run/tasks/5840a1fa-9ad9-4c9e-963a-7bc5b6fa3eff/)
On voit à droite l’exécution du fichier js via la commande native Windows WScript.exe.
Pour récupérer le fichier maintool.js, il suffit de cliquer sur « More Info » puis « Download » (il vous faut un compte) :
Le fichier js est compressé dans un zip avec un mot de passe (« infected »).
Comme d’habitude les fichier js sont obfusqués :
Dans un premier temps on va arranger tout ça (au sens faciliter la lecture du code) avec CyberChef et son Javascript Beautify : (https://gchq.github.io/CyberChef/#recipe=JavaScript_Beautify(‘%5C%5Ct’,’Auto’,true,true) :
On voit que ce Javascript a besoin d’un argument, sûrement la clef pour décoder/déchiffrer le vrai code malveillant.
J’ai donc remplacer la variable ssWZ par la valeur vu au début avec olevba (EzZETcSXyKAdF_e5I2i1) et j’ai remplacé l’appel à la fonction eval() par une sortie console via WScript.Echo :
Maintenant je n’ai plus qu’à lancer l’exécution avec cscript.exe sans grand risque (plus d’eval) afin de récupérer le code désofusqué :
Les choses sont plus claires maintenant, on voit les URL cibles, les commandes exécutées, les net view/share/add administrator, etc…