
Ein Dienstprogramm, das den Usermode-Shellcode aus dem DOUBLEPULSAR-Payload nutzt, um eine beliebige DLL reflektiv in einen anderen Prozess zu laden – für den Einsatz beim Testen von Erkennungstechniken oder für andere Sicherheitsforschung.
Autor: Matt Hillman ([email protected] - @sp1nl0ck)
Firma: Countercept (@countercept)
Website: https://countercept.com
Ein Dienstprogramm, das den Usermode-Shellcode aus dem DOUBLEPULSAR-Payload verwendet, um eine beliebige DLL reflektiv in einen anderen Prozess zu laden – für Tests von Erkennungstechniken oder andere Sicherheitsforschung.
Der von Shadow Brokers veröffentlichte DOUBLEPULSAR-Payload läuft zunächst im Kernel-Modus und lädt eine DLL mithilfe eines Asynchronous Procedure Call (APC) reflektiv in einen Usermode-Prozess. Das eigentliche Laden der DLL erfolgt im Usermode, und dieses Dienstprogramm nutzt diesen Usermode-Shellcode, um eine DLL in einem bestimmten Prozess zu laden und einen angegebenen Ordinal auszuführen. Dies dient dazu, Angriffserkennung und Techniken der digitalen Forensik und Incident Response gegen den Payload zu testen.
Der Loader ist von Interesse, da er mit jeder beliebigen DLL funktioniert, ohne den standardmäßigen LoadLibrary-Aufruf zu verwenden. Das Vermeiden von LoadLibrary kann das Laden heimlicher machen, da es die Notwendigkeit umgeht, die DLL auf die Festplatte zu schreiben, Überwachung von LoadLibrary-Aufrufen umgehen kann und auch einen Eintrag im Process Environment Block (PEB) vermeidet, über den normalerweise eine Liste geladener Module abgerufen wird. Solche Techniken sind inzwischen recht verbreitet, aber bisher war uns kein öffentlicher Code bekannt, der eine beliebige DLL auf diese Weise laden konnte – bestehender Code erfordert, dass die DLL speziell für die Unterstützung des Ladens angepasst ist. DOUBLEPULSAR ist anders, da es einen vollständigeren Loader implementiert, der fast jede DLL laden kann. Dieser Loader funktioniert ohne Änderungen auf fast jeder Windows-Version.
Während DOUBLEPULSAR selbst einen APC-Aufruf aus dem Kernel-Modus verwendet, der gegen einen Usermode-Prozess eingereiht wird, reiht dieses Dienstprogramm den APC aus dem Usermode ein; dies macht praktisch keinen Unterschied. Zusätzlich kann dieses Dienstprogramm den Shellcode stattdessen mithilfe von CreateRemoteThread auslösen.
C:\>DOUBLEPULSAR-usermode-injector.exe
VERWENDUNG: <pid> <shellcode_datei> <zu_injizierende_dll> <auszufuehrender_ordinal> [use_CreateRemoteProcess]
Das letzte Argument ist optional; wenn 'true' angegeben wird, wird CreateRemoteProcess anstelle eines APC-Aufrufs verwendet,
was die Standardmethode von Doublepulsar ist. Dies ermöglicht es, das Tool auf verschiedene Weise zu testen.
Standardmäßig wird APC verwendet. Dies injiziert in ALLE Threads im Zielprozess, was die Wahrscheinlichkeit erhöht, dass einer
schnell ausgelöst wird. Dies ist nur für Tests geeignet, da es unerwünscht sein kann, den Payload mehr als einmal aufzurufen.
Zum Beispiel somelibrary.dll in Prozess 1234 mithilfe eines Asynchronous Procedure Call (APC) injizieren und Ordinal 1 aufrufen:
C:\>dopu-usermode-injector.exe 1234 dopu-64bit-usermode-shellcode.bin somelibrary.dll 1
Verwende Thread: 2456
Verwende Thread: 2032
Verwende Thread: 3876
Oder wie oben, aber mit CreateRemoteThread anstelle von APC:
C:\>dopu-usermode-injector.exe 1234 dopu-64bit-usermode-shellcode.bin somelibrary.dll 1 true
Eine vollständige Analyse des Usermode-Shellcodes von DOUBLEPULSAR:
Frühere Arbeiten zur Kernel-Komponente von DOUBLEPULSAR: