
BOF para personificar TrustedInstaller via acionamento da API DISM e personificação de thread
BOF para personificar o TrustedInstaller via acionamento da API DISM e personificação de thread.
Eleva um Beacon do Cobalt Strike de um contexto de administrador para NT AUTHORITY\SYSTEM com o SID NT SERVICE\TrustedInstaller nos grupos do token. Isso lhe dá a capacidade de modificar arquivos, chaves de registro e outros objetos que pertencem ao TrustedInstaller (ou seja, coisas para as quais apenas ter SYSTEM pode não ser suficiente).
A maioria das abordagens públicas para se tornar TrustedInstaller inicia o serviço TrustedInstaller diretamente através do Gerenciador de Controle de Serviços (por exemplo, sc start TrustedInstaller ou StartServiceW). Isso funciona, mas interagir com o SCM é bem compreendido pelos defensores e comumente registrado.
trustme adota uma abordagem diferente:
Carrega dismapi.dll e executa uma verificação de integridade do DISM. A API DISM (DismCheckImageHealth) internamente faz com que o TrustedInstaller.exe seja iniciado como um efeito colateral das operações da pilha de serviços. A sessão DISM é mantida aberta para que o TrustedInstaller não saia antes que possamos usá-lo.
Percorre a lista de processos usando NtGetNextProcess. Em vez de OpenProcess ou CreateToolhelp32Snapshot, enumeramos handles de processos indiretamente através de NtGetNextProcess e correspondemos pelo nome da imagem via NtQueryInformationProcess(ProcessImageFileName).
Personifica uma thread do TrustedInstaller via NtImpersonateThread. Da mesma forma, percorremos as threads com NtGetNextThread em vez de abri-las por TID. Uma vez que encontramos uma thread utilizável, a personificamos e registramos o token resultante com o Beacon via BeaconUseToken.
SeDebugPrivilege deve estar disponível no token (por padrão está para contas admin, o BOF o habilita automaticamente)Você precisa do beacon.h do repositório bof_template do Cobalt Strike no mesmo diretório que trustme.c.
MinGW (Linux/macOS):
x86_64-w64-mingw32-gcc -c trustme.c -o trustme.x64.o -masm=intel -Wall
MSVC (Windows, a partir do prompt de Ferramentas Nativas x64):
cl.exe /c /GS- /Fo"trustme.x64.o" trustme.c
trustme.x64.o (e/ou trustme.x86.o) no mesmo diretório que trustme.cnatrustme.cna no Cobalt Strike via Gerenciador de Scriptsbeacon> 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
Limpeza. A sessão DISM é fechada, dismapi.dll é liberada do processo do beacon, e os handles são liberados. O token de personificação persiste na sessão do Beacon até que você execute rev2self.