
Uno strumento per utilizzare lo shellcode in modalità utente del payload DOUBLEPULSAR per caricare in modo riflessivo una DLL arbitraria in un altro processo, per l'uso nel testare tecniche di rilevamento o altre ricerche sulla sicurezza.
Autore: Matt Hillman ([email protected] - @sp1nl0ck)
Azienda: Countercept (@countercept)
Sito web: https://countercept.com
Una utility che utilizza lo shellcode in modalità utente del payload DOUBLEPULSAR per caricare in modo riflessivo una DLL arbitraria in un altro processo, per essere utilizzata nel testare tecniche di rilevamento o altre ricerche di sicurezza.
Il payload DOUBLEPULSAR rilasciato da Shadow Brokers viene eseguito inizialmente in modalità kernel e carica in modo riflessivo una DLL in un processo in modalità utente utilizzando una chiamata a procedura asincrona (APC). Il caricamento effettivo della DLL avviene in modalità utente, e questa utility fa uso di quello shellcode in modalità utente per caricare una DLL in un processo specificato ed eseguire un determinato ordinale. Questo serve ad aiutare nel testare tecniche di rilevamento degli attacchi e di risposta agli incidenti di digital forensics contro il payload.
Il loader è di interesse perché funziona con qualsiasi DLL arbitraria senza fare uso della chiamata standard LoadLibrary. Evitare LoadLibrary può rendere il caricamento più furtivo, poiché evita la necessità di scrivere la DLL su disco, può evitare qualsiasi cosa che monitori le chiamate LoadLibrary, e può anche evitare di avere una voce nel Process Environment Block (PEB), che è solitamente il modo in cui si ottiene un elenco dei moduli caricati. Tali tecniche sono ormai abbastanza comuni, ma fino ad ora non eravamo a conoscenza di alcun codice pubblico che potesse caricare una DLL arbitraria in questo modo - il codice esistente richiede che la DLL sia costruita su misura per supportare il caricamento. DOUBLEPULSAR è diverso in quanto implementa un loader più completo che può caricare quasi qualsiasi DLL. Questo loader funziona su quasi tutte le versioni di Windows così com'è.
Mentre DOUBLEPULSAR stesso utilizza una chiamata APC dalla modalità kernel accodata contro un processo in modalità utente, questa utility accoda l'APC dalla modalità utente; questo fa poca differenza pratica. Inoltre, questa utility può attivare lo shellcode utilizzando CreateRemoteThread.
C:\>DOUBLEPULSAR-usermode-injector.exe
USAGE: <pid> <shellcode_file> <dll_to_inject> <ordinal_to_execute> [use_CreateRemoteProcess]
L'ultimo argomento è opzionale, se specificato 'true' verrà utilizzato CreateRemoteProcess invece di una chiamata APC
che è il modo predefinito con cui funziona Doublepulsar. Questo serve a permettere alle persone di testarlo in modi diversi.
Il default è l'uso di APC. Questo inietterà in TUTTI i thread del processo target, il che rende più probabile che uno di essi
si attivi rapidamente. Questo è adatto solo per test, poiché potrebbe essere indesiderabile chiamare il payload più di
una volta.
Ad esempio, inietta somelibrary.dll nel processo 1234 utilizzando una chiamata a procedura asincrona (APC) e chiama l'ordinale 1:
C:\>dopu-usermode-injector.exe 1234 dopu-64bit-usermode-shellcode.bin somelibrary.dll 1
Using thread: 2456
Using thread: 2032
Using thread: 3876
Oppure come sopra, ma utilizzando CreateRemoteThread invece di APC:
C:\>dopu-usermode-injector.exe 1234 dopu-64bit-usermode-shellcode.bin somelibrary.dll 1 true
Un'analisi completa dello shellcode in modalità utente di DOUBLEPULSAR:
Lavori precedenti sul componente kernel di DOUBLEPULSAR: