Analyse d’un maldoc Excel (XLSB)

Ce qu’il y a de bien avec les antispams c’est qu’on n’a plus besoin d’aller rechercher des malwares sur Internet pour les analyser, on en trouve plein tous les jours dans les quarantaines.

Il y a quelques jours un fichier a attiré mon attention car c’est une extension pas très répandu, un fichier Excel au format XLSB :

Tiens c’est quoi ce truc, ce n’est pas un xlsx, ni un xlsm, ni un xslt mais un xlsb ?

En fait le b c’est pour binary et ça change pas mal de choses.

Je sais que ce fichier est malveillant car il est largement détecté sur VirusTotal mais étonnamment les outils d’analyse de fichiers Office ne détectent rien d’anormal, pas d’OLE, pas de macros.

Au niveau du format de fichier on voit qu’il s’agit d’un Open XML.

En fait il suffit de renommer l’extension xlsb en zip et de dézipper pour comprendre qu’on a bien à faire à des fichiers binaires :

Bon, à ce moment là je me décide d’ouvrir le fichier et j’y découvre une seule feuille avec l’habituel message implorant l’utilisateur à activer les macros :

Bon en fait ce fichier Excel ne contient pas qu’une seule feuille Excel mais un tas d’autres, il suffit d’afficher les feuilles masquées :

Et là mauvaise surprise les feuilles sont vierges :

Bon en fait c’est juste une ruse, les cellules contiennent bien du code mais c’est écrit en blanc sur blanc donc on n’y voit rien, il suffit de changer la couleur du texte, en rouge par exemple pour faire apparaître le code :

Bon maintenant rien qu’avec cette ligne on comprend mieux ce qui se passe :

Un fichier OCX est déposé dans ProgramData et ensuite regsvr32 se charge de l’enregistrer.

Petit rappel sur regvr32.exe qui est une vrai plaie car il permet d’exécuter du code natif, des scriptlets (objets COM de type Javascript) en local, à partir d’une URL distante et se permet le luxe de contourner des solutions comme AppLocker 🙁

Petit exemple avec une scriptlet qui lance un Powershell depuis du Javascript :

regsvr32 /u /s /n /i:stuff.txt scrobj.dll

stuff.txt :

<?XML version="1.0"?>
<scriptlet>
<registration
progid="Pentest"
classid="{10001111-0000-0000-0000-0000FEEDACDC}" >
<script language="JScript">
<![CDATA[
var r = new ActiveXObject("WScript.Shell").Run("powershell -noe -nop -c write-host Boo!");
]]>
</script>
</registration>
</scriptlet>