
DISM APIトリガーとスレッド偽装を介してTrustedInstallerを偽装するBOF
BOFを使用して、DISM APIトリガーとスレッド偽装を介してTrustedInstallerを偽装します。
Cobalt Strike Beaconを管理者コンテキストから NT AUTHORITY\SYSTEM に昇格させ、トークングループに NT SERVICE\TrustedInstaller SID を追加します。これにより、TrustedInstaller が所有するファイル、レジストリキー、その他のオブジェクトを変更できるようになります(つまり、SYSTEM だけでは不十分な場合に必要です)。
TrustedInstaller になるための一般的な公開アプローチでは、サービスコントロールマネージャー (SCM) を介して TrustedInstaller サービスを直接開始します(例:sc start TrustedInstaller や StartServiceW)。これは機能しますが、SCM とのやり取りは防御側によく理解されており、一般的にログに記録されます。
trustme は異なるアプローチを取ります:
dismapi.dll をロードし、DISM ヘルスチェックを実行します。 DISM API (DismCheckImageHealth) は、内部でサービススタック操作の副作用として TrustedInstaller.exe を起動します。DISM セッションは開いたまま保持されるため、TrustedInstaller は使用前に終了しません。
NtGetNextProcess を使用してプロセスリストを走査します。 OpenProcess や CreateToolhelp32Snapshot の代わりに、NtGetNextProcess を介してプロセスハンドルを間接的に列挙し、NtQueryInformationProcess(ProcessImageFileName) でイメージ名を照合します。
NtImpersonateThread を使用して TrustedInstaller スレッドを偽装します。 同様に、TID で開くのではなく、NtGetNextThread でスレッドを走査します。使用可能なスレッドを見つけたら、それを偽装し、BeaconUseToken で結果のトークンを Beacon に登録します。
クリーンアップします。 DISM セッションを閉じ、dismapi.dll を Beacon プロセスから解放し、ハンドルを解放します。偽装トークンは、rev2self を実行するまで Beacon セッションに保持されます。
SeDebugPrivilege が利用可能であること(管理者アカウントではデフォルトで利用可能、BOFは自動的に有効にします)trustme.c と同じディレクトリに、Cobalt Strike bof_template リポジトリ から beacon.h を配置する必要があります。
MinGW(Linux/macOS):
x86_64-w64-mingw32-gcc -c trustme.c -o trustme.x64.o -masm=intel -Wall
MSVC(Windows、x64 Native Tools プロンプトから):
cl.exe /c /GS- /Fo"trustme.x64.o" trustme.c
trustme.cna と同じディレクトリに trustme.x64.o(および/または trustme.x86.o)を配置しますtrustme.cna をロードしますbeacon> 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