
BOF для олицетворения TrustedInstaller через триггер DISM API и олицетворение потока
BOF для олицетворения TrustedInstaller через вызов DISM API и олицетворение потока.
Повышает привилегии Cobalt Strike Beacon из контекста администратора до NT AUTHORITY\SYSTEM с SID NT SERVICE\TrustedInstaller в группах токена. Это дает возможность изменять файлы, записи реестра и другие объекты, принадлежащие TrustedInstaller (т.е. то, для чего простого SYSTEM может быть недостаточно).
Большинство публичных подходов к получению прав TrustedInstaller запускают службу TrustedInstaller напрямую через Service Control Manager (например, sc start TrustedInstaller или StartServiceW). Это работает, но взаимодействие с SCM хорошо известно защитникам и обычно логируется.
trustme использует другой подход:
Загружает dismapi.dll и запускает проверку работоспособности DISM. DISM API (DismCheckImageHealth) внутри вызывает запуск TrustedInstaller.exe как побочный эффект операций стека обслуживания. Сессия DISM остается открытой, чтобы TrustedInstaller не завершился, прежде чем мы сможем его использовать.
Обходит список процессов с помощью NtGetNextProcess. Вместо OpenProcess или CreateToolhelp32Snapshot мы перечисляем дескрипторы процессов косвенно через NtGetNextProcess и сопоставляем по имени образа через NtQueryInformationProcess(ProcessImageFileName).
Олицетворяет поток TrustedInstaller через NtImpersonateThread. Аналогично, мы обходим потоки с помощью NtGetNextThread, а не открываем их по TID. Как только мы находим подходящий поток, мы олицетворяем его и регистрируем полученный токен в Beacon через BeaconUseToken.
SeDebugPrivilege должен быть доступен в токене (по умолчанию он есть у административных учетных записей, BOF включает его автоматически)Вам понадобится beacon.h из репозитория Cobalt Strike bof_template в той же директории, что и trustme.c.
MinGW (Linux/macOS):
x86_64-w64-mingw32-gcc -c trustme.c -o trustme.x64.o -masm=intel -Wall
MSVC (Windows, from x64 Native Tools prompt):
cl.exe /c /GS- /Fo"trustme.x64.o" trustme.c
trustme.x64.o (и/или trustme.x86.o) в ту же директорию, что и trustme.cnatrustme.cna в Cobalt Strike через 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
Очистка. Сессия DISM закрывается, dismapi.dll освобождается из процесса beacon, и дескрипторы освобождаются. Токен олицетворения сохраняется в сессии Beacon до тех пор, пока вы не выполните rev2self.