Zloader : Retour Du Malware Bancaire Avec Une Nouvelle Variante

En décembre 2019, les chercheurs de Proofpoint ont observé des campagnes d'emailing distribuant largement une nouvelle version du malware bancaire ZLoader, qui semble être en cours de développement actif. Nous avons vu plus de 100 campagnes depuis le 1er janvier 2020 avec des destinataires aux États-Unis, au Canada, en Allemagne, en Pologne et en Australie. Les leurres par emails frauduleux portent sur des sujets variés, notamment des conseils pour se protéger des attaques liées à la COVID-19, des tests COVID-19 et des factures.

ZLoader, une variante du tristement célèbre malware bancaire Zeus, existe depuis 2006. Il s'agit d'un malware bancaire typique qui utilise des webinjects pour voler les identifiants et autres informations privées des utilisateurs des institutions financières ciblées. Le malware peut également voler les mots de passe et les cookies stockés dans les navigateurs web des victimes. Avec les informations volées en main, le malware peut utiliser le client VNC (Virtual Network Computing) qu'il télécharge pour permettre aux criminels de se connecter au système de la victime et d'effectuer des transactions financières illicites à partir du dispositif légitime de l'utilisateur bancaire. 

Près de deux ans après la dernière activité de ZLoader en 2018, nous avons commencé à observer des campagnes utilisant un nouveau malware bancaire qui présentait des fonctionnalités et un trafic réseau similaires à ceux du ZLoader 2016-2018 original. Cependant, au cours de notre analyse, nous avons remarqué qu'il manquait l'obscurcissement du code, le cryptage des chaînes et quelques autres fonctionnalités avancées du ZLoader original. Par conséquent, le nouveau malware ne semble pas être une continuation de la souche 2018, mais probablement une bifurcation d'une version antérieure.

Dans cet article, nous analysons la nouvelle version du malware et fournissons plusieurs exemples des campagnes de courrier électronique les plus intéressantes qui le diffusent. Nous continuerons à suivre ce nouveau malware comme une "variante de ZLoader" qui a fait son chemin dans la communauté au sens large.  

Contexte des nouvelles attaques de ZLoader

De juin 2016 à février 2018, un malware bancaire connu sous le nom de ZLoader (également connu sous le nom de DELoader ou Terdot) s'est répandu dans la nature. La lettre "Z" dans son nom a été donnée parce qu'il s'agit d'une variante du malware Zeus. La partie "loader" de son nom est due à sa caractéristique distinctive : il était distribué en tant que composant téléchargeur, qui téléchargeait et exécutait le composant principal du malware bancaire et d'autres modules à partir de son serveur de commande et de contrôle (C&C). 

À l'époque, de nombreux acteurs utilisaient le malware, mais le TA511 (Hancitor) était l'un des plus répandus. Vers novembre 2017, TA511 est passé de ZLoader à Panda Banker. D'autres acteurs de la menace ont commencé à suivre le mouvement et sont passés de ZLoader à d'autres logiciels malveillants. La dernière campagne d’emails que nous avons vue utilisant le ZLoader original remonte à février 2018. 

Analyse du malware bancaire ZLoader

Historique Des Versions 

Cette variante de ZLoader est en cours de développement. Nous avons assisté à la sortie de 25 versions depuis que la première (1.0.2.0) a été repérée dans la nature en décembre 2019. Comme le montre le tableau 1, environ 1 à 2 nouvelles versions ont été publiées chaque semaine : 

Month 

Versions 

December 2019 

1.0.2.0, 1.0.4.0, 1.0.5.0, 1.0.6.0, 1.0.7.0, 1.0.8.0, 1.0.9.0 

January 2020 

1.0.10.0, 1.0.10.1, 1.011.1, 1.0.12.0, 1.0.13.0, 1.0.14.0 

February 2020 

1.0.15.0, 1.0.16.0, 1.0.17.0, 1.0.18.0 

March 2020 

1.1.18.0, 1.1.19.0, 1.1.20.0, 1.1.21.0, 1.1.22.0 

April 2020 

1.2.22.0, 1.2.23.0 

May 2020

1.2.24.0

Tableau 1 : Versions de ZLoader en circulation

Au moment où nous écrivons ces lignes, la version 1.2.24.0 est la dernière en date et elle a été repérée dans la nature en mai 2020.

Anti-analyse De Zloader

ZLoader utilise plusieurs mécanismes d'anti-analyse pour rendre la détection et la rétro-ingénierie plus difficiles. Il s'agit entre autres de junk code, d'obfuscation constante, de hachage des fonctions de l'API Windows, de chaînes cryptées et de la liste noire C&C. Un exemple de code indésirable et d’obfuscation constante constant est illustré à la figure 1 : 

Obfuscation de code & code indésirable dans ZLoader

Figure 1 Exemple de code indésirable et d'obfuscation constante

Cette fonction renvoie la version du malware sous forme de DWORD (0x1021600) par XORing de deux constantes codées en dur (0x21F89813 et 0x20FA8E13). Le reste du code est superflu et sert à distraire l'analyste. 

Un autre mécanisme anti-analyse est le hachage des fonctions de l'API (Application Programming Interface) de Windows. Une implémentation Python de l'algorithme de hachage est disponible sur notre GitHub. Le tableau 2 présente quelques exemples de fonctions de l'API Windows et leurs valeurs de hachage :

Windows API Function 

Hash Value 

ExitProcess 

0x7F96C13 

InternetConnectA 

0xAE775E1 

InternetReadFile 

0x7E90205 

CryptHashData 

0x23ED221 

Tableau 2 Exemples de fonctions de l'API Windows et leur valeur de hachage

Le prochain mécanisme anti-analyse est le cryptage des chaînes de caractères. La plupart des chaînes importantes de ZLoader sont cryptées à l'aide de XOR et d'une chaîne codée en dur (par exemple "7Gl5et#0GoTI5VV94"). Un exemple de script IDAPython pour décrypter les chaînes de l'échantillon que nous avons analysé est disponible sur notre GitHub. 

La dernière mesure anti-analyse que nous mentionnerons n'est pas intégrée dans le client malveillant mais est plutôt mise en œuvre dans le serveur C&C. Bien qu'elle varie en fonction de la campagne, nous avons remarqué une mise sur liste noire agressive des sandboxes et des systèmes d'analyse de malwares et un blocage important basé sur la géographie de l'adresse IP source de connexion. 

Configuration 

ZLoader poursuit la tradition de Zeus qui consiste à utiliser une structure de données appelée "BaseConfig" pour stocker sa configuration initiale. La figure 2 montre un exemple de la fonction de décryptage BaseConfig : 

Exemple d’une fonction de déchiffrage BaseConfig dans une version de ZLoader

Figure 2 Exemple d'une fonction de décryptage BaseConfig

Il utilise RC4 avec une clé codée en dur (par exemple "quxrfjxtmedqretawrxg"). Un exemple de configuration en texte clair est présenté à la figure 3 :

ZLoader - Exemple de texte en clair BaseConfig

Figure 3 Exemple de texte en clair BaseConfig

Les données en texte clair sont interprétées comme une structure binaire et comprennent : 

  • DWORD utilisé dans les communications C&C (par exemple 0x83) 
  • Nom du botnet (par exemple "1") 
  • Nom de la campagne (par exemple "07/04") 
  • Jusqu'à 10 URL C&C (par exemple "hxxps://xyajbocpggsr\.site/wp-config.php" et "hxxps://ooygvpxrb\.pw/wp-config.php") 
  • Clé RC4 utilisée dans les communications C&C (par exemple "41997b4a729e1a0175208305170752dd") 
  • Timeouts et flags divers 

Command and Control 

ZLoader utilise des requêtes HTTP(S) POST pour command & control. Les données POST sont cryptées en deux couches. La première couche est RC4 et utilise la clé BaseConfig. La seconde couche est un cryptage basé sur XOR typique des variantes de Zeus, appelé "Visual Encrypt". 

Les données en texte clair sont structurées en utilisant une structure de données Zeus traditionnelle connue sous le nom de "BinStorage". BinStorage se compose d'un en-tête et d'un nombre variable d'éléments de données. L'en-tête a une taille de 48 octets et contient :

  • Données aléatoires (20 octets) 
  • Taille des éléments de données (DWORD) 
  • Drapeaux (DWORD) 
  • Nombre de données (DWORD) 
  • Hachage MD5 des éléments de données (16 octets) 

Chaque élément de données commence par un en-tête de 16 octets contenant : 

  • Id (DWORD) -- également connu sous le nom de "CFGID 
  • Flags (DWORD) 
  • Taille des données (compressées) (DWORD) -- ZLoader n'utilise pas la compression 
  • Taille des données (non comprimées) (DWORD) 

Les données de réponse sont chiffrées de la même manière que les demandes. Une fois déchiffrées, elles utilisent aussi généralement la structure BinStorage. Nous examinerons trois demandes : la requête « hello » initiale, le téléchargement du composant principal et la mise à jour de la configuration. 

Les requêtes « hello » initiales contiennent un BinStorage avec les éléments de données du tableau 3 :

CFGID 

Data 

10029 

DWORD value from the BaseConfig 

10002 

Botnet string from the BaseConfig 

10001 

Bot ID 

10022 

Flag from BaseConfig indicating whether this is a debug version 

10006 

Hardcoded 0x0 (DWORD) 

Tableau 3 BinStorage requête « Hello » initiale 

Une réponse affirmative du serveur C&C à la demande "hello" est un BinStorage vide.

Demande De Module 

Le composant "loader" de ZLoader télécharge le composant principal en utilisant un BinStorage décrit dans le tableau 4 

CFGID 

Data 

10029 - 10022 

The same as the “hello” request in Table 3 above 

11014 

Module ID (32-bit main component is ID 1006) 

11015 

Module Version (typically the same as the malware version) 

Tableau 4 Demande de module BinStorage

Le composant principal utilise également cette demande pour télécharger des modules supplémentaires pour divers éléments de fonctionnalité. Les modules comprennent OpenSSL, SQLite, Zlib, Certutil et VNC.

La réponse d'un module est chiffrée et formatée différemment des autres réponses. Elle est uniquement chiffrée en RC4 à l'aide de la clé BaseConfig. Une fois déchiffrée, elle contient un en-tête de 21 octets suivi d'un fichier PE. L'en-tête contient : 

  • ID du module (DWORD) 
  • Version du module (DWORD)  
  • Inconnu (DWORD) 
  • Longueur du module (DWORD) 
  • Somme de contrôle du module CRC32 (DWORD) 
  • Inconnu (BYTE)

Demande De Mise A Jour De La Configuration 

La dernière demande que nous examinerons est la demande de mise à jour de la configuration - généralement connue sous le nom de "DynamicConfig" dans le langage de Zeus. Elle utilise un BinStorage contenant les éléments du tableau 5 :

CFGID 

Data 

10029 - 10022 

The same as the “hello” request in Table 3 above 

10012 

Windows version and architecture 

10003 

Malware version 

10023 

Process integrity level 

10024 

Number of monitors 

10016 

IPv4 address 

10025 

BaseConfig campaign name 

10026 

MD5 hash of loader component 

10020 

Running process list 

10027 

Time zone 

Tableau 5 Demande de mise à jour de la configuration

Les DynamicConfigs comprennent une variété de données, notamment :

  • URL C&C supplémentaires 
  • Commandes à exécuter  
  • user_execute - télécharger et exécuter  
  • bot_uninstall – auto désinstallation 
  • user_cookies_get - voler les cookies des navigateurs web 
  • user_cookies_remove - supprimer les cookies des navigateurs web 
  • user_passwords_get - voler des mots de passe 
  • user_files_get - voler des fichiers  
  • user_url_block - bloquer l'accès à l'URL 
  • user_url_unblock - débloquer l'accès à l'URL 
  • Webinjects (voir figure 4) 
  • Utilisé en conjonction avec le mécanisme person-in-the-browser de Zeus pour manipuler et voler les identifiants des utilisateurs et d'autres données des sites web financiers (généralement).

Extrait d’un webinject analysé dans une version du malware bancaire ZLoader

Figure 4 Exemple d'extrait d'un webinject analysé

Algorithme De Generation De Domaines 

À partir de la version 1.1.22.0 (mars 2020), un algorithme de génération de domaine de secours (DGA) a été ajouté. Si ZLoader ne parvient pas à se connecter aux C&C à partir de la BaseConfig ou de la DynamicConfig, il génère 32 domaines ".com" à essayer. La DGA utilise la clé RC4 de BaseConfig pour crypter la date du jour comme amorce de départ. Cette seed est utilisée avec un algorithme de hachage de base pour générer 20 lettres minuscules. Une implémentation Python de l'algorithme est disponible sur notre GitHub. Le tableau 6 montre les premiers domaines générés par la DGA pour l'échantillon analysé le 8 avril 2020 :

ctmaetpfoecphxxqlgfk\.com 

irtdojdrlgodkgfkyxab\.com 

mtpfmkyxaaceblyjlwxv\.com 

vrwuosfciqjcgvvrliup\.com 

sdauiqukokclpxtpirkh\.com 

Table 6 Example DGA generated domains from April 8, 2020

Analyse De La Campagne Du Malware Bancaire Zloader

Depuis que nous avons commencé à observer la nouvelle variante en décembre 2019, elle est devenue populaire et répandue. Au moment où nous écrivons ces lignes, nous documentons au moins une campagne ZLoader par jour, menée par divers acteurs et visant principalement des organisations aux États-Unis, au Canada, en Allemagne, en Pologne et en Australie. Vous trouverez ci-dessous des exemples de campagnes qui ont diffusé ZLoader au cours des derniers mois.  

Le 6 décembre 2019, nous avons observé une campagne par courrier électronique qui prétendait livrer une facture (figure 5).

Exemple de PDF utilisé pour livré ZLoader

Figure 5 Exemple de courrier électronique utilisé lors de la campagne du 6 décembre 2019

Les messages contenaient des pièces jointes au format PDF (figure 6) qui utilisaient la marque de plusieurs sociétés de logiciels de facturation

Exemple de document Word utilisé pour télécharger le malware bancaire ZLoader

Figure 6 Exemple de PDF utilisé dans la campagne du 6 décembre 2019

Les PDF contenaient des URL renvoyant à un document Microsoft Word (figure 7). Le document utilisait des macros pour télécharger et exécuter la version "1.0.2.0" de ZLoader. Chacun des téléchargements a été filtré par Keitaro TDS (Traffic Distribution System) pour empêcher l'analyse automatisée

Exemple d’email utilisé pour propager le malware ZLoader

Figure 7 Exemple de document utilisé lors de la campagne du 6 décembre 2019

Le 30 mars 2020, nous avons observé une campagne d’emails utilisant de multiples leurres (figure 8) qui "avertissent" l'utilisateur de diverses arnaques COVID-19.

Exemple de CAPTCHA utilisé pour propager ZLoader

Figure 8 Exemple de courrier électronique utilisé dans la campagne du 30 mars 2020

Ces emails contenaient des URL renvoyant à une page d'accueil qui présente un défi CAPTCHA (figure 9) avant de renvoyer au téléchargement d'un document Microsoft Word (figure 10). Le document contenait des macros qui, si elles étaient activées, permettraient de télécharger la version "1.1.21.0" de ZLoader.

Exemple de document utilisé dans la campagne ZLoader du 30 mars 2020

Figure 9 Exemple de CAPTCHA utilisé dans la campagne du 30 mars 2020

Exemple d’email utilisé dans le cadre de la campagne du 4 avril 2020

Figure 10 Exemple de document utilisé dans la campagne du 30 mars 2020

Le 4 avril 2020, nous avons observé une campagne d’emails (figure 11) qui contenait un message sur un membre de la famille, un collègue ou un voisin ayant contracté la COVID-19, et qui aurait fourni des informations sur les endroits où se faire tester

Exemple de fichier Excel contenant le malware ZLoader

Figure 11 Exemple d’email utilisé dans le cadre de la campagne du 4 avril 2020

Les emails contenaient des fichiers Excel protégés par un mot de passe (figure 12). Le fichier utilisait des macros Excel 4.0 pour télécharger et exécuter la version "1.1.22.0" de ZLoader

ZLoader_12

Figure 12 Exemple de tableur utilisé dans le cadre de la campagne du 4 avril 2020

Conclusion sur la dernière variante du malware bancaire ZLoader

Cet article a analysé la dernière variante du malware bancaire Zeus et certaines des campagnes que nous avons vues le propager. Il utilise les fonctionnalités typiques des malwares bancaires, comme les webinjects, le vol de mots de passe et de cookies, et l'accès à des dispositifs via VNC pour voler des identifiants, des informations personnelles et finalement de l'argent aux cibles. Le malware bancaire Zeus et ses descendants sont un élément de base dans le paysage de la cybercriminalité depuis 2006. De Zeus à Citadel, Ice IX, Murofet, Gameover, ZLoader, KINS, Flokibot, Chthonic, Panda Banker, et de nouveau à ZLoader.

Indicateurs De Compromission

IOC 

IOC Type 

Description 

2b5e50bc3077610128051bc3e657c3f0e331fb8fed2559c6596911890ea866ba 

SHA256 

Zloader (1.2.22.0) 

hxxps://xyajbocpggsr\.site/wp-config.php 

URL 

Zloader (1.2.22.0) C&C 

hxxps://ooygvpxrb\.pw/wp-config.php 

URL 

Zloader (1.2.22.0) C&C 

6348bded936831629494c1d820fe8e3dbe3fb4d9f96940bbb4ca0c1872bef0ad 

SHA256 

Zloader (1.1.21.0) 

hxxps://vfgthujbxd\.xyz/milagrecf.php 

URL 

Zloader (1.1.21.0) C&C 

hxxps://todiks\.xyz/milagrecf.php 

URL 

Zloader (1.1.21.0) C&C 

4725e0e2e358e06da19de9802b4c345f1a5ab572dd688c78adf317ce8be85be6 

SHA256 

PDF Attachment from Zloader campaign 

f1bdd2bcbaf40bb99224fa293edc1581fd124da63c035657918877901d79bed8 

SHA256 

Zloader (1.0.2.0) 

hxxps://brihutyk\.xyz/abbyupdater.php 

URL 

Zloader (1.0.2.0) C&C 

hxxps://asdmark\.org/ph4xUMChrXId6.php 

URL 

Example Landing Page 

fe10daf5e3de07d400ca37b6b151eb252b71d013312e2958d1281da6626813d9 

SHA256 

Example Document Delivering Zloader 

ea190ef11b88e830fa8835ff9d22dcab77a3356d3b1cb7b9f9b56e8cd7deb8c0 

SHA256 

Zloader (1.1.21.0) 

hxxps://105711\.com/docs.php 

URL 

Zloader (1.1.21.0) C&C 

hxxps://209711\.com/process.php 

URL 

Zloader (1.1.21.0) C&C 

hxxps://106311\.com/comegetsome.php 

URL 

Zloader (1.1.21.0) C&C 

hxxps://124331\.com/success.php 

URL 

Zloader (1.1.21.0) C&C 

bfe470b390f20e3e189179fc1372d6e66d04d7676fa07d2a356b71362cd03e53 

SHA256 

Example Excel Sheet Delivering Zloader 

b4e0478cf85035852a664984f8639e98bee3b54d6530ef22d46874b14ad0e748 

SHA256 

Zloader (1.1.22.0) 

 

hxxp://march262020\.best/post.php 

URL 

Zloader (1.1.22.0) C&C 

hxxp://march262020\.club/post.php 

URL 

Zloader (1.1.22.0) C&C 

hxxp://march262020\.com/post.php 

URL 

Zloader (1.1.22.0) C&C 

hxxp://march262020\.live/post.php 

URL 

Zloader (1.1.22.0) C&C 

hxxp://march262020\.network/post.php 

URL 

Zloader (1.1.22.0) C&C 

hxxp://march262020\.online/post.php 

URL 

Zloader (1.1.22.0) C&C 

hxxp://march262020\.site/post.php 

URL 

Zloader (1.1.22.0) C&C 

hxxp://march262020\.store/post.php 

URL 

Zloader (1.1.22.0) C&C 

hxxp://march262020\.tech/post.php 

URL 

Zloader (1.1.22.0) C&C 

Subscribe to the Proofpoint Blog