dazzyddos/lsawhisper-bof
GitHub: dazzyddos/lsawhisper-bof
一款 Cobalt Strike BOF 工具,通过 LSA 客户端 API 而非直接读取 LSASS 内存来提取凭据、Kerberos 票据和云 SSO 令牌,可绕过 PPL 和 Credential Guard 保护。
Stars: 265 | Forks: 30
# LSA Whisperer BOF

这是 [LSA Whisperer](https://github.com/EvanMcBroom/lsa-whisperer) 的 Cobalt Strike Beacon Object File (BOF) 移植版 —— 该工具通过 LSA 非受信/受信客户端接口直接与 Windows 身份验证包通信,即使启用了 PPL 和 Credential Guard,也无需触碰 LSASS 进程内存。
## 为什么会有这个项目
由 [Evan McBloom](https://github.com/EvanMcBroom) (SpecterOps) 开发的 LSA Whisperer 证明了你可以通过合法的 `LsaCallAuthenticationPackage` API 调用来恢复 DPAPI 凭据密钥、提取云 SSO 令牌以及与 Kerberos 交互。无需内存读取,无需进程注入,也不需要 LSASS 的句柄。
本项目将这些能力作为 BOF 引入 C2 框架中,以便在红队行动中使用。它从不打开 lsass 进程的句柄,所有调用都通过 LsaCallAuthenticationPackage(用于与 lsass 通信的官方客户端 API)进行,因此 LSASS 上的 PPL 完全没有影响。PPL 旨在保护 LSASS 进程不被打开/读取/注入。
## 命令
### MSV1_0 模块
| 命令 | 描述 |
|---|---|
| `lsa-credkey [LUID]` | 恢复 DPAPI 凭据密钥。可在 Credential Guard 下工作。 |
| `lsa-strongcredkey [LUID]` | 恢复强 DPAPI 凭据密钥 (Win10+)。 |
| `lsa-ntlmv1 [LUID] [challenge]` | 使用选定的挑战值 (challenge) 生成 NTLMv1 响应。默认挑战值 `1122334455667788` 兼容 [crack.sh](https://crack.sh) 彩虹表。 |

### Kerberos 模块
| 命令 | 描述 |
|---|---|
| `lsa-klist [LUID]` | 列出缓存的 Kerberos 票据。 |
| `lsa-dump [LUID]` | 转储所有票据为 base64 `.kirbi` 格式,包含会话密钥。 |
| `lsa-purge [LUID] [server]` | 清除票据。支持按服务器名称选择性清除。 |

### CloudAP 模块
| 命令 | 描述 |
|---|---|
| `lsa-ssocookie [LUID]` | 通过 AAD 插件提取 Entra ID (Azure AD) SSO cookie。 |
| `lsa-devicessocookie [LUID]` | 提取设备 SSO cookie。 |
| `lsa-enterprisesso [LUID]` | 提取 AD FS 企业 SSO cookie。 |
| `lsa-cloudinfo [LUID]` | 查询云提供商信息、TGT 状态、DPAPI 状态。 |
**LUID**: `0` 或省略表示当前会话。使用十六进制值 (例如 `0x3e7`) 来指定特定的登录会话。针对其他会话需要 SYSTEM 权限。
## 使用示例
### DPAPI 凭据密钥恢复
```
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](https://github.com/GhostPack/SharpDPAPI) 使用:
```
SharpDPAPI.exe masterkeys /credkey: /target:
```
### NTLMv1 降级
```
beacon> lsa-ntlmv1 0x21d57
[*] MSV1_0 Lm20GetChallengeResponse (NTLMv1 Generation)
[+] NTLMv1 Response generated!
[*] Hashcat (mode 5500):
DOMAIN\user::HOSTNAME::NTResponse:1122334455667788
```
使用默认挑战值将响应提交到 [crack.sh](https://crack.sh/netntlm/) 即可瞬间恢复 NT 哈希。
### Entra ID SSO Cookie
```
beacon> lsa-ssocookie 0x21d57
[+] SSO Cookie received!
[*] Cookie: ESTSAUTH=
```
## 架构
```
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 针对任何登录会话的所有命令 |
使用 `logonpasswords` 或 `klist` 枚举可用的 LUID 以查找目标会话。
## 操作注意事项
- **Credential Guard**: `lsa-credkey` 和 `lsa-strongcredkey` 可在 Credential Guard 下工作。`lsa-ntlmv1` 会被其阻止。
- **CloudAP**: 需要加入 Entra ID / Azure AD 的设备且具有活动的云登录会话。在纯本地 AD 环境中无法工作。
- **NTLMv1**: 默认挑战值 `1122334455667788` 允许通过 crack.sh 进行免费的彩虹表破解。自定义挑战值虽然可行,但需要标准的暴力破解。
- **选择性清除**: 带有服务器过滤器的 `lsa-purge` 仅删除匹配的票据 —— 适用于在不中断用户会话的情况下进行针对性的 Kerberos 滥用。
## 致谢与声明
本项目是 [Evan McBroom](https://github.com/EvanMcBroom/lsa-whisperer) ([@EvanMcBroom](https://github.com/EvanMcBroom)) 来自 [SpecterOps](https://specterops.io) 的 [LSA Whisperer](https://github.com/EvanMcBroom/lsa-whisperer) 的 BOF 移植版。所有底层研究 —— 包括未公开的 MSV1_0 协议消息、CloudAP/AAD 插件调用接口以及使其成为可能的结构定义 —— 都是他的成果。
**主要参考:**
- [LSA Whisperer](https://github.com/EvanMcBroom/lsa-whisperer) — Evan McBroom / SpecterOps (MIT License)
- [Exploring Credential Guard](https://posts.specterops.io/exploring-credential-guard-39c0f4975ece) — Evan McBroom
- [nanorobeus](https://github.com/wavvs/nanorobeus) — wavvs (BOF 模式参考)
- [Kerbeus-BOF](https://github.com/RalfHacker/Kerbeus-BOF) — RalfHacker (BOF 模式参考)
标签:Azure AD, BOF, Cobalt Strike, Credential Guard, DPAPI, LSA, NTLM, PE 加载器, PPL, RFI远程文件包含, SCP, SSO Token, StruQ, Windows 安全, 内存安全, 哈希破解, 攻击诱捕, 模拟器, 横向移动, 欺骗防御, 绕过防护, 编程规范