
Hardware-Sandbox-Toolkit
Malware setzt häufig Anti-VM-Techniken ein, deren Erkennung und Bekämpfung unterschiedlich schwierig sein kann. Obwohl die Integration von Anti-Erkennungsmaßnahmen in unseren Laboren eine häufig genutzte Option ist, sollten wir auch den Einsatz einer echten Hardware-Sandbox in Betracht ziehen, selbst wenn das seltsam klingt. Durch die Nutzung des großartigen PCILeech-Projekts und DMA-Hardwarezugriff bietet XenoboxX eine Reihe von Werkzeugen für Analyseaufgaben, wie das Auslesen dynamisch zugewiesenen Speichers und die Suche nach IoCs. Diese Tools ermöglichen es uns, Code auf Kernel-Ebene über DMA zu injizieren, was die Erkennung erheblich erschwert und der Analyse eine neue Perspektive verleiht.
XenoboxX konzentriert sich derzeit auf 64-Bit-Windows, könnte aber in Zukunft auch auf andere Plattformen erweitert werden.
Das Tool wurde auf den DEFCON 32 Demo Labs vorgestellt: hier
Natürlich sprechen wir hier von physischen Umgebungen, also:
Installieren Sie die DMA-Karte im Ziel-PC. Verbinden Sie die Karte mit Ihrem Host-PC
Installieren Sie PCILeech auf Ihrem Host-PC: Wenn Sie keine Entwicklung oder Änderungen vornehmen möchten, können Sie einfach die Binärdateien (ich denke, das ist die häufigste Option) aus der Release-Seite installieren
Installieren Sie XenoboxX auf Ihrem Host-PC: Wie im vorherigen Punkt möchten Sie vielleicht nur die vorkompilierten Binärdateien (im Ordner pcileech)
Injizieren Sie das PCILeech-Modul:
./pcileech kmdload -kmd WIN10_X64_3
Dies gibt eine Speicheradresse zurück, die Sie zum Ausführen der Shellcodes verwenden (z. B. 0x7ffff000)
Führen Sie die XenoboxX-Shellcodes aus:
./pcileech wx64_dumpalloc -0 0xbac -s "\\??\C:\temp\test" -kmd 0x7ffff000
Derzeit verfügt XenoboxX über 3 wx64-Shellcodes:
wx64_dumpalloc: Hängt an eine bestimmte PID an und gibt alle vom Prozess durchgeführten Speicherzuweisungen aus. Wenn die Schutzflags eines vorhandenen Speichers geändert werden, wird der Bereich erneut ausgegeben (manchmal wechselt Malware den Schutz, um Inspektionen zu vermeiden)wx64_memgrep: Sucht nach benutzerdefinierten Zeichenfolgen im von einer PID zugewiesenen Speicher. Es kann für eine bestimmte Zeitspanne an den Prozess angehängt werden.wx64_strings: Sucht nach allen Zeichenfolgen im von einer PID zugewiesenen Speicher. Es kann für eine bestimmte Zeitspanne an den Prozess angehängt werden.Hinweis: Als experimenteller Ansatz vermeidet Xenobox derzeit jegliches Hooking, und alle Erkennungen erfolgen durch Polling. Dies hat offensichtlich einige Nachteile, ist aber zum jetzigen Zeitpunkt eine Designentscheidung, um so unsichtbar wie möglich zu sein.
Beispiel:
./pcileech wx64_dumpalloc -0 0xbac -s "\\??\C:\temp\test" -kmd 0x7ffff000
-0 PID, an die angehängt werden soll, im Hexadezimalformat (erforderlich)-1 Überwachungszeit des Prozesses. Standardwert ist 0x20-s Ausgabeordner, in dem Speicherabbilder und Protokolle gespeichert werdenBeispiel:
./pcileech wx64_memgrep -0 0x564 -1 0x80 -s "Hello, 123" -2 1 -kmd 0x7ffff000
-0 PID, an die angehängt werden soll, im Hexadezimalformat (erforderlich)-1 Überwachungszeit des Prozesses. Standardwert ist 0x20-2 Suche nach ASCII (0x0) oder WIDE (0x1) Zeichenfolge. Standardwert ist 0x0-3 Groß-/Kleinschreibung beachten (0x1) oder nicht (0x0). Groß-/Kleinschreibung beachten ist schneller. Standardwert ist 0x0-4 Nur beschreibbare Speicherseiten durchsuchen (0x0) oder alle (0x01). Standardwert ist 0x0-s Suchzeichenfolge (in doppelten Anführungszeichen)Beispiel:
./pcileech wx64_strings -0 0x19e0 -1 0x100 -3 0x15 -kmd 0x7ffff000
-0 PID, an die angehängt werden soll, im Hexadezimalformat (erforderlich)-1 Überwachungszeit des Prozesses. Standardwert ist 0x20-2 Suche nach ASCII (0x0) oder WIDE (0x1) Zeichenfolge. Standardwert ist 0x0-3 Minimale Länge der Zeichenfolge. Standardwert ist 0xA-4 Nur beschreibbare Speicherseiten durchsuchen (0x0) oder alle (0x01). Standardwert ist 0x0Wenn Sie die XenoboxX-Skripte ändern oder neu erstellen möchten, denken Sie daran, dass Sie einige Dateien aus dem PCILeech-Repository benötigen, insbesondere:
wx64_common.hwx64_common.cshellcode64.exeIn den Kommentaren jeder .c-Datei finden Sie Kompilieranweisungen. Beispiel:
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 ist nicht das endgültige Analysetool: Dies ist ein sehr spezifischer Ansatz, den ich für sehr spezifische Analysen nützlich finde. Ich glaube nicht, dass dieses Tool Ihren derzeitigen Workflow ersetzen wird, aber vielleicht werden Sie es für diese spezielle nervige Malware nützlich finden.
Beiträge und Anregungen sind mehr als willkommen. Bitte erstellen Sie ein Issue, wenn Sie Fragen haben, oder einen Pull-Request, wenn Sie etwas beitragen möchten. Vielen Dank!