
Kit de bac à sable matériel

Kit de bac à sable matériel
Les malwares utilisent fréquemment des techniques anti-VM, qui peuvent varier dans leur difficulté à détecter et contrecarrer. Bien que l'intégration de mesures anti-détection dans nos laboratoires soit une option fréquemment utilisée, nous devrions également envisager l'utilisation d'un véritable bac à sable matériel, même si cela peut paraître étrange. En exploitant l'impressionnant projet PCILeech et l'accès matériel DMA, XenoboxX fournit une suite d'outils pour les tâches d'analyse, telles que le vidage de la mémoire allouée dynamiquement et la recherche d'IoC. Ces outils nous permettent d'injecter du code au niveau du noyau via DMA, rendant la détection beaucoup plus difficile et offrant une nouvelle perspective à l'analyse.
XenoboxX se concentre actuellement sur Windows 64 bits, mais à l'avenir il pourrait être étendu à d'autres plateformes également.
L'outil a été présenté aux DEFCON 32 Demo Labs : ici
Évidemment, nous parlons d'environnements physiques, donc :
installer la Carte DMA sur le cible PC. Connectez la carte à votre hôte PC
installer PCILeech sur votre hôte PC : si vous n'allez pas développer ou apporter des modifications, vous pouvez simplement installer les binaires (je pense que c'est l'option la plus courante) disponibles dans la page de releases
installer XenoboxX sur votre hôte PC : comme pour le point précédent, vous pouvez simplement prendre les binaires pré-compilés (dans le dossier pcileech)
injecter le module PCILeech :
./pcileech kmdload -kmd WIN10_X64_3
cela retournera une adresse mémoire que vous utiliserez pour exécuter les shellcodes (ex 0x7ffff000)
exécuter les shellcodes XenoboxX :
./pcileech wx64_dumpalloc -0 0xbac -s "\\??\C:\temp\test" -kmd 0x7ffff000
Actuellement XenoboxX dispose de 3 shellcodes wx64 :
wx64_dumpalloc : s'attache à un PID spécifique et vide toutes les allocations mémoire effectuées par le processus. Si les indicateurs de protection d'une mémoire existante sont modifiés, la région est vidée à nouveau (parfois les malwares changent de protections pour éviter les inspections)wx64_memgrep : recherche des chaînes définies par l'utilisateur dans la mémoire allouée par un PID. Il peut être attaché au processus pendant une durée spécifique.wx64_strings : recherche toutes les chaînes dans la mémoire allouée par un PID. Il peut être attaché au processus pendant une durée spécifique.Note : en tant qu'approche expérimentale, Xenobox évite actuellement tout hooking, et toutes les détections sont effectuées par sondage (polling). Évidemment, cela présente quelques inconvénients, mais c'est un choix de conception pour le moment, afin d'être aussi furtif que possible.
Exemple :
./pcileech wx64_dumpalloc -0 0xbac -s "\\??\C:\temp\test" -kmd 0x7ffff000
-0 PID auquel s'attacher au format hexadécimal (obligatoire)-1 temps de surveillance du processus. Par défaut réglé à 0x20-s dossier de sortie, où les vidages mémoire et le journal seront sauvegardésExemple :
./pcileech wx64_memgrep -0 0x564 -1 0x80 -s "Hello, 123" -2 1 -kmd 0x7ffff000
-0 PID auquel s'attacher au format hexadécimal (obligatoire)-1 temps de surveillance du processus. Par défaut réglé à 0x20-2 recherche de chaîne ASCII (0x0) ou WIDE (0x1). Par défaut réglé à 0x0-3 recherche sensible à la casse (0x1) ou insensible (0x0). La recherche sensible à la casse est plus rapide. Par défaut réglé à 0x0-4 rechercher uniquement les pages mémoire accessibles en écriture (0x0) ou toutes (0x01). Par défaut réglé à 0x0-s chaîne de recherche (entre guillemets)Exemple :
./pcileech wx64_strings -0 0x19e0 -1 0x100 -3 0x15 -kmd 0x7ffff000
-0 PID auquel s'attacher au format hexadécimal (obligatoire)-1 temps de surveillance du processus. Par défaut réglé à 0x20-2 recherche de chaîne ASCII (0x0) ou WIDE (0x1). Par défaut réglé à 0x0-3 longueur minimale de la chaîne. Par défaut réglé à 0xA-4 rechercher uniquement les pages mémoire accessibles en écriture (0x0) ou toutes (0x01). Par défaut réglé à 0x0Si vous souhaitez modifier ou reconstruire les scripts XenoboxX, n'oubliez pas que vous avez besoin de certains fichiers du dépôt PCILeech, et en particulier :
wx64_common.hwx64_common.cshellcode64.exeDans les commentaires de chaque fichier .c, vous trouverez des instructions de compilation. Par exemple :
cl.exe /O1 /Os /Oy /FD /MT /GS- /J /GR- /FAcs /W4 /Zl /c /TC /kernel wx64_common.c
cl.exe /O1 /Os /Oy /FD /MT /GS- /J /GR- /FAcs /W4 /Zl /c /TC /kernel wx64_dumpalloc.c
ml64.exe wx64_common_a.asm /Fewx64_dumpalloc.exe /link /NODEFAULTLIB /RELEASE /MACHINE:X64 /entry:main wx64_dumpalloc.obj wx64_common.obj
shellcode64.exe -o wx64_dumpalloc.exe "DUMP ALLOCATED MEMORY \n===============================================================\nREQUIRED OPTIONS: \n -0 : Process PID to open. Example '-0 0x0fe0'. \nOPTIONAL OPTIONS: \n -1 : Process monitoring timeout Default: 0x20. Example: '-1 0x100'. \n -s : Specify output folder/file for dumps. Example: \"\\??\C:\temp\test\"\n===== RESULT OF DUMPALLOC OPERATION ======================%s\nNTSTATUS : 0x%08X \n===============================================================\n"
XenoboxX n'est pas l'outil d'analyse définitif : il s'agit d'une approche très spécifique que je trouve utile pour des analyses très spécifiques : je ne pense pas que cet outil remplacera votre flux de travail actuel, mais peut-être le trouverez-vous utile pour ce sale malware spécifique.
Les contributions et suggestions sont les bienvenues. N'hésitez pas à ouvrir un ticket si vous avez des questions ou une demande d'ajout (pull request) si vous souhaitez contribuer. Merci !