
BOF per impersonare TrustedInstaller tramite trigger API DISM e impersonazione del thread
BOF per impersonare TrustedInstaller tramite attivazione dell'API DISM e impersonazione di thread.
Eleva un Beacon di Cobalt Strike da un contesto amministrativo a NT AUTHORITY\SYSTEM con il SID NT SERVICE\TrustedInstaller nei gruppi del token. Questo ti dà la possibilità di modificare file, chiavi di registro e altri oggetti che sono di proprietà di TrustedInstaller (cioè cose per cui avere solo SYSTEM potrebbe non essere sufficiente).
La maggior parte degli approcci pubblici per diventare TrustedInstaller avviano il servizio TrustedInstaller direttamente tramite Service Control Manager (ad es. sc start TrustedInstaller o StartServiceW). Funziona, ma l'interazione con SCM è ben compresa dai difensori e comunemente registrata nei log.
trustme adotta un approccio diverso:
Carica dismapi.dll ed esegue un controllo di integrità DISM. L'API DISM (DismCheckImageHealth) internamente avvia TrustedInstaller.exe come effetto collaterale delle operazioni dello stack di manutenzione. La sessione DISM viene mantenuta aperta in modo che TrustedInstaller non termini prima che possiamo usarlo.
Scorre l'elenco dei processi usando NtGetNextProcess. Invece di OpenProcess o CreateToolhelp32Snapshot, enumeriamo gli handle dei processi indirettamente tramite NtGetNextProcess e li abbiniamo per nome di immagine tramite NtQueryInformationProcess(ProcessImageFileName).
Impersona un thread di TrustedInstaller tramite NtImpersonateThread. Analogamente, scorriamo i thread con NtGetNextThread piuttosto che aprirli per TID. Una volta trovato un thread utilizzabile, lo impersoniamo e registriamo il token risultante con Beacon tramite BeaconUseToken.
SeDebugPrivilege deve essere disponibile nel token (lo è per impostazione predefinita per gli account amministratore, il BOF lo abilita automaticamente)Hai bisogno di beacon.h dal repository bof_template di Cobalt Strike nella stessa directory di trustme.c.
MinGW (Linux/macOS):
x86_64-w64-mingw32-gcc -c trustme.c -o trustme.x64.o -masm=intel -Wall
MSVC (Windows, dal prompt x64 Native Tools):
cl.exe /c /GS- /Fo"trustme.x64.o" trustme.c
trustme.x64.o (e/o trustme.x86.o) nella stessa directory di trustme.cnatrustme.cna in Cobalt Strike tramite Script Managerbeacon> trustme
[+] SeDebugPrivilege enabled
[*] DISM health check complete, TrustedInstaller should be running
[*] Found TrustedInstaller.exe (PID: 31337)
[+] Thread impersonation successful (identity: SYSTEM)
[+] Token applied to Beacon session
[+] Now running as TrustedInstaller. Use 'rev2self' to revert.
beacon> shell whoami /groups | findstr TrustedInstaller
NT SERVICE\TrustedInstaller Well-known group S-1-5-80-956008885-... Enabled by default, Enabled group, Group owner
beacon> rev2self
Pulisce. La sessione DISM viene chiusa, dismapi.dll viene rilasciata dal processo del beacon, e gli handle vengono rilasciati. Il token di impersonazione persiste nella sessione di Beacon finché non esegui rev2self.