Nouveau téléchargeur Buhtrap

Aujourd'hui, nous vous parlerons d'une nouvelle approche pour l'envoi de logiciels malveillants au groupe Buhtrap.



Module Bootloader


Le 19 décembre, nous avons eu connaissance d'un mailing malveillant contenant un fichier exécutable ( md5: faf833a1456e1bb85117d95c23892368 ). Le fichier prenait différents noms: «Réconciliation pour December.exe», «Docs wednesday.exe», «Documents 19.12.exe», «Closing documents wednesday.exe».

D'intéressant - le fichier est écrit en .Net, ce qui n'est pas typique de ce groupe criminel. Pour décompiler .Net, vous pouvez utiliser n'importe quel logiciel: Reflector , dotPeek , dnSpy , ILSpy . Dans l'article, nous parlerons des caractéristiques de l'implémentation de ce fichier et de la façon dont nous l'avons analysé.

Inspection initiale du chargeur de démarrage


Pour l'analyse, nous avons utilisé dnSpy , et toutes les autres captures d'écran en seront issues.
Par habitude, ouvrez l'exécutable dans IDA Pro et regardez la section d'importation. Exemples:



La présence de certaines fonctions suggère la présence d'une charge utile compressée ( LoadCursorW , LoadIconW - a obtenu l'objet des ressources, VirtualProtect - a changé les attributs de page, puis vous pouvez exécuter le code) et un simple anti-débogage ( IsDebuggerPresent ). Mais tout s'est avéré encore plus simple. L'exécution n'a même pas atteint IsDebuggerPresent, et LoadCursorW et LoadIconW ont été inutiles car ils ont essayé d'accéder à des ressources inexistantes (LoadCursorW de " fiza " et LoadIconW de " saxikulatebutohutejijobodugore "):





Mais revenons au décompilateur dnSpy . Dans le fichier exécutable, nous voyons une quantité importante de code non managé:



Pour comprendre quel code non managé se trouve dans le fichier sous enquête, nous utiliserons IDA Pro. Le moyen le plus simple consiste à afficher le corps du code non managé sous forme hexadécimale. Pour ce faire, accédez au décalage de fichier décalé. En utilisant la fonction _main () comme exemple:





Ensuite, dans IDA Pro, nous rechercherons par séquence hexadécimale:



En sortie, nous obtenons la fonction non managée _main (), avec laquelle vous pouvez facilement travailler avec l'aide du décompilateur idov:





Obtenir la charge utile


Retour à dnSpy. L'attention est attirée sur la variable payloadData .





Nous trouvons cette séquence dans IDA Pro, obtenons des liens vers celle-ci et découvrons que l'appel se produit uniquement dans la fonction _main () :



Le code décompilé utilisant ce tampon ressemble à ceci:



Les fonctions suivantes sont responsables de la conversion de ce tampon:



Ici, la variable holdrand est initialisée à 0xEA48CB16 et la fonction foo () est appelée dans une boucle pour chaque octet de payloadData ( paramètre sbyte c ). Il convient de noter que la fonction t () provient d'un code dangereux: si vous regardez son code, vous pouvez vous assurer qu'il renvoie toujours 0x343FD .

Nous nous armons d'IDA Pro et, en regardant le tampon décompressé résultant, nous remarquons qu'il contient du code au début:



À l'offset 0x15A0 depuis le début du tampon, un fichier exécutable se trouve:



Enregistrez-le pour une analyse ultérieure.

Eh bien, dans le code exécutable lui-même, une chose assez banale est implémentée. Tout d'abord, la structure suivante est formée ( ici mz_base est l'adresse de décalage dans le tampon avec le PE décompressé, et les champs restants sont les adresses des fonctions requises et des poignées de bibliothèque ):



Et puis, en utilisant les fonctions obtenues, le processus du même fichier exécutable est créé ( md5: faf833a1456e1bb85117d95c23892368 ), et l'exécutable décompressé est mappé aux adresses virtuelles du nouveau processus. Après avoir modifié l'adresse de l'instruction exécutable (un groupe de GetThreadContext et SetThreadContext ), le thread du nouveau processus démarre et le processus parent lui-même est tué.

Eh bien, nous passons maintenant à l'analyse du fichier exécutable résultant (charge utile).

Déballage de la charge utile


La charge utile ( vidage md5: d8f40c7060c44fab57df87ab709f058f ) est également écrite sur le .Net Framework.

Pour se protéger contre l'analyse statique et dynamique, les développeurs de logiciels malveillants ont utilisé le dernier protecteur ConfuserEx populaire:



ConfuserEx est un protecteur open source bien établi.

Déballage primaire


Le point d'entrée des fichiers protégés par ce protecteur est le suivant:



Après décryptage, le tableau d'octets est chargé en mémoire sous la forme d'un module appelé koi . Ensuite, la méthode principale de ce module est déterminée et appelée. Sur la plate-forme .Net, une méthode ou un constructeur dans un module peut être obtenu à partir du jeton de métadonnées en appelant la fonction Module.ResolveMethod () . Pour transférer le contrôle à la méthode obtenue, la fonction MethodBase.Invoke () est utilisée.



Le code exécutable du module koi est le suivant:



Pour supprimer la bande de roulement, nous avons utilisé les utilitaires suivants:


ConfuserEx-Unpacker a déchiffré les lignes et le code à l'intérieur des méthodes, et de4dot a rendu les noms des méthodes lisibles.

Le résultat est un code adapté à l'analyse statique:



Bien sûr, nous avons eu la chance d'obtenir du code lisible. Les auteurs de virus peuvent modifier le code source de la bande de roulement ConfuserEx pour compliquer davantage l'analyse.
Il y a encore deux problèmes qui ont dû être résolus pour une analyse confortable du fichier.

1er problème


Après avoir supprimé la bande de roulement, le décompilateur n'a pas pu analyser certaines des méthodes. Par exemple:



Si vous passez au code IL, vous remarquerez des appels à des pointeurs nuls:



Pour corriger les erreurs de décompilation, remplacez les instructions incorrectes par des instructions nop. (L'utilitaire dnSpy vous permet de modifier à la fois le code décompilé et le code IL.)
Après le remplacement, le code décompilé semble correct:



En changeant le code IL dans toutes les méthodes problématiques, nous avons obtenu un fichier entièrement décompilé.

2ème problème


Il est peu probable que le fichier résultant démarre, ce qui exclut la possibilité d'une analyse dynamique. Pour résoudre ce problème, vous devez spécifier le jeton de la méthode d'entrée dans la structure du fichier exécutable.

Vous pouvez le trouver de deux manières:

  • regardez sous le débogage avec quel paramètre la fonction a été appelée

Module.ResolveMethod () avant de décompresser le fichier:



  • dans le fichier décompressé, trouvez la méthode avec l'étiquette [STAThread] :



Dans ce cas, le jeton de métadonnées pour la méthode d'entrée est 0x6000106 . Nous le modifions à l'aide de l'utilitaire CFF Explorer :



Après avoir enregistré les modifications, le fichier décompressé démarre et débogue correctement.

Analyse du chargeur de démarrage


Immédiatement après le début du travail, le chargeur de démarrage vérifie s'il fonctionne dans un environnement virtuel.
L'exécution sous VMWare ou QEMU est déterminée en recherchant les sous-chaînes «vmware» et «qemu» dans la valeur de registre suivante:

  • [HKLM \ System \ CurrentControlSet \ Services \ Disk \ Enum \ 0].

Si une machine virtuelle est détectée, le chargeur de démarrage affiche le message de fenêtre correspondant:



Fait intéressant, la sortie de ce message n'affecte pas le fonctionnement du processus.

Après cela, le malware essaie de charger les bibliothèques de la liste suivante dans la mémoire: SbieDll.dll, dbghelp.dll, api_log.dll, dir_watch.dll, pstorec.dll, vmcheck.dll, wpespy.dll, snxhk.dll, guard32.dll .

De plus, à l'aide des appels aux fonctions Debugger.IsLogging () et Debugger.get_IsAttached () , le chargeur vérifie s'il s'exécute sous le débogueur.
Si au moins l'une des bibliothèques se charge avec succès ou si le chargeur détecte qu'elle s'exécute sous le débogueur, elle se supprimera automatiquement à l'aide de la commande « cmd / C ping 8.8.8.8 -n 1 -w 3000> Nul & Del ». Fait intéressant, le chargeur de démarrage peut s'auto-supprimer même sur un système réel en chargeant la bibliothèque dbghelp.dl l.

Ensuite, le malware vérifie s'il est lancé à partir du répertoire contenant la sous-chaîne "Mozilla".

Si le processus n'est pas démarré à partir du répertoire contenant la sous-chaîne "Mozilla"


  • Le malware crée une liste de répertoires situés sur le bureau et contient les sous-chaînes suivantes (toutes les lignes à l'intérieur du chargeur de démarrage sont cryptées à l'aide de l'algorithme AES-256-ECB, les clés de cryptage sont générées à l'aide de mots de passe codés en dur):



  • Génère une liste d'URL à partir de l'historique du navigateur qui contiennent les sous-chaînes suivantes:



  • Génère une liste des fichiers situés dans les répertoires "% UserProfile% \\ Desktop", "% AppData%", "C: \\ Program Files (x86)", "C: \\ Program Files (x86) (x86)" et avoir les noms suivants:



  • Compte le nombre de listes non vides à partir d'indicateurs liés aux opérations bancaires (dans la version actuelle du chargeur de démarrage, cette fonctionnalité n'affecte rien).
  • Crée une tâche pour exécuter ce fichier chaque fois qu'un utilisateur se connecte à l'aide de la commande "schtasks / create / f / sc ONLOGON / RL HIGHEST / tn LimeRAT-Admin / tr".
  • Si la tâche n'a pas pu être créée, crée le raccourci "% AppData% \\ Microsoft \\ Windows \\ Menu Démarrer \\ Programmes \\ Démarrage \\ MozillaUpdate.lnk", indiquant "% Appdata% \\ Mozilla \\ xaudiodg.exe" , ce qui garantit que le fichier xaudiodg.exe est lancé à chaque redémarrage du système.
  • Il se copie le long du chemin "% AppData% \\ Mozilla \\ xaudiodg.exe".
  • Supprime le fichier <self_path>: Zone.Identifier, exécute xaudiodg.exe et se supprime automatiquement.

Si le processus est démarré à partir du répertoire contenant la sous-chaîne "Mozilla"


  • Les logiciels malveillants recherchent également les indicateurs ci-dessus des opérations bancaires au sein du système infecté.
  • Collecte d'autres informations système pour les envoyer au serveur de gestion.
  • Dans un thread séparé envoie des informations au C&C et attend une réponse du serveur.
  • Dans un autre thread, il envoie une chaîne cryptée «PING?» Au serveur dans une boucle sans fin.

Interaction avec le serveur d'administration


L'adresse IP du serveur dans l'exemple de logiciel malveillant testé est 213.252.244 [.] 200. La connexion est initialisée par un port sélectionné au hasard dans la liste:

• 8989,
• 5656,
• 2323.

Immédiatement après l'initialisation de la connexion, le chargeur de démarrage envoie des informations sur le système infecté au C&C:

• ID utilisateur,
• nom d'utilisateur
• Version OS,
• sa propre version (chargeur v0.2.1),
• listes d'indicateurs d'opérations bancaires trouvés sur le système infecté.

Un exemple de ligne envoyée par le chargeur au serveur de gestion:

«INFO<NYANxCAT>9D3A4B22D21C<NYANxCAT>IEUser<NYANxCAT> Windows 7 Enterprise SP 1 <NYANxCAT>loader v0.2.1<NYANxCAT><NYANxCAT><NYANxCAT>1c, » 


Cette ligne sera envoyée s'il existe un dossier «1c» sur le bureau de l'utilisateur infecté et qu'il n'y a pas d'autres indicateurs.
La fonction de traitement de la réponse du serveur est la suivante:



La réponse décryptée du serveur est la suivante:

  •  COMMAND<NYANxCAT>DATA1<NYANxCAT>DATA2<NYANxCAT> 

Comme le montre la capture d'écran, COMMAND peut prendre l'une des valeurs suivantes:

  • FERMER - met fin à la connexion et ferme le processus en cours;
  • DW - décode le contenu base64 de DATA2, l'écrit dans le fichier <temp_file_name> avec l'extension de DATA1 et lance le fichier pour exécution;
  • UPDATE - décode le contenu base64 de DATA1, l'écrit dans un fichier avec le nom <temp_file_name> et l'extension .exe, lance un nouveau fichier exécutable et s'efface de lui-même;
  • RD- - envoie la chaîne "RD-" en réponse;
  • RD + - envoie une capture d'écran au serveur de gestion;
  • DEL - supprime automatiquement.

Au cours de l'enquête du chargeur de démarrage, nous avons réussi à obtenir la commande DW du serveur attaquant. En conséquence, le logiciel Punto Switcher a été installé avec la DLL malveillante winmm.dll (md5: 9d25553bb09e2785262b2f7ba7923605), qui est un module de logiciel espion Buhtrap.

Le flux TCP est le suivant:





Pour crypter les données transmises entre le client et le serveur de gestion, l' algorithme AES-128-ECB est utilisé. La clé de chiffrement est initialisée avec un mot de passe codé en dur.

Après décryptage, le trafic est le suivant:





À partir de base64, le programme d'installation NSIS est décodé avec le contenu suivant:



Fait intéressant, le serveur a répondu, bien que la liste des indicateurs bancaires soit vide.

DLL malveillante


La bibliothèque winmm.dll est exécutée à l'aide de la technique de détournement de DLL. Le module malveillant envoie des informations sur le système infecté et une liste de lecteurs de cartes à puce actifs au C&C. De plus, il possède un composant enregistreur de frappe et est capable de recevoir d'autres modules malveillants du serveur de gestion, de les exécuter à partir du disque ou dans la mémoire du processus en cours. Les serveurs C&C de l'échantillon de test sont situés aux adresses suivantes:

  • hxxp: // my1cprovider [.] xyz: 6060 / klog [.] php
  • hxxp: // tinderminderorli1999 [.] xyz: 7764 / klog [.] php

Conclusion


Le processus d'infection peut être représenté comme le schéma suivant:



Malgré la bonne protection contre l'analyse, il est clair qu'à l'heure actuelle le chargeur de démarrage ne fonctionne pas correctement et est très probablement en cours de développement:

  • peut s'auto-supprimer même sur un système réel;
  • vérifie la connexion du système infecté avec les opérations bancaires avant de se copier dans «% AppData% \\ Mozilla \\ xaudiodg.exe» et avant d'interagir avec C&C, mais n'utilise pas ces informations de quelque manière que ce soit.

Enfin, rappelez-vous l'étrange message de la fenêtre. Fait intéressant, est-ce une faille dans les développeurs - ou est-ce fait spécifiquement pour encourager les utilisateurs à quitter l'environnement virtuel et à démarrer sur une vraie machine? Bienvenue dans les commentaires.

CIO


MD5:

faf833a1456e1bb85117d95c23892368
9d25553bb09e2785262b2f7ba7923605

URL:

hxxp: // my1cprovider [.] xyz: 6060 / klog [.] php
hxxp: // tinderminderorli1999 [.] xyz: 7764 / klog [.] php
IP:
213.252.244 [.] 200

Source: https://habr.com/ru/post/fr434626/


All Articles