
BOF para suplantar TrustedInstaller mediante activación de la API de DISM y suplantación de hilo
BOF para suplantar a TrustedInstaller mediante la activación de la API de DISM y la suplantación de hilos.
Eleva un Beacon de Cobalt Strike desde un contexto de administrador a NT AUTHORITY\SYSTEM con el SID NT SERVICE\TrustedInstaller en los grupos del token. Esto te da la capacidad de modificar archivos, claves de registro y otros objetos que son propiedad de TrustedInstaller (es decir, cosas para las que tener solo SYSTEM puede no ser suficiente).
La mayoría de los enfoques públicos para convertirse en TrustedInstaller inician el servicio TrustedInstaller directamente a través del Administrador de Control de Servicios (por ejemplo, sc start TrustedInstaller o StartServiceW). Esto funciona, pero interactuar con el SCM es bien conocido por los defensores y comúnmente registrado.
trustme toma un enfoque diferente:
Carga dismapi.dll y ejecuta una comprobación de salud de DISM. La API de DISM (DismCheckImageHealth) internamente hace que TrustedInstaller.exe se inicie como efecto secundario de las operaciones de la pila de servicio. La sesión de DISM se mantiene abierta para que TrustedInstaller no salga antes de que podamos usarlo.
Recorre la lista de procesos usando NtGetNextProcess. En lugar de OpenProcess o CreateToolhelp32Snapshot, enumeramos los identificadores de procesos indirectamente a través de NtGetNextProcess y los emparejamos por nombre de imagen mediante NtQueryInformationProcess(ProcessImageFileName).
Suplanta un hilo de TrustedInstaller mediante NtImpersonateThread. De manera similar, recorremos los hilos con NtGetNextThread en lugar de abrirlos por TID. Una vez que encontramos un hilo utilizable, lo suplantamos y registramos el token resultante en el Beacon mediante BeaconUseToken.
SeDebugPrivilege debe estar disponible en el token (lo está por defecto para cuentas de administrador, el BOF lo habilita automáticamente)Necesitas beacon.h del repositorio bof_template de Cobalt Strike en el mismo directorio que trustme.c.
MinGW (Linux/macOS):
x86_64-w64-mingw32-gcc -c trustme.c -o trustme.x64.o -masm=intel -Wall
MSVC (Windows, desde el símbolo del sistema de x64 Native Tools):
cl.exe /c /GS- /Fo"trustme.x64.o" trustme.c
trustme.x64.o (y/o trustme.x86.o) en el mismo directorio que trustme.cnatrustme.cna en Cobalt Strike a través del Administrador 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
Limpieza. Se cierra la sesión de DISM, se libera dismapi.dll del proceso del Beacon y se cierran los identificadores. El token de suplantación persiste en la sesión del Beacon hasta que ejecutes rev2self.