kismatkunwar89/HTB-CDSA
GitHub: kismatkunwar89/HTB-CDSA
一套面向 HTB CDSA 认证的 Sysmon 行为检测脚本包,通过 XML 查询和 PowerShell 脚本对 Windows 端点日志进行威胁狩猎与深度溯源。
Stars: 0 | Forks: 0
# HTB CDSA - Sysmon 威胁检测包
用于 [HTB Certified Defensive Security Analyst (CDSA)](https://academy.hackthebox.com/) 模块的检测脚本和 XML 查询。
配套博客文章:[sec-savvy.com CDSA 之旅](https://github.com/kismatkunwar89/writeups) - 模块 3 笔记和[技能评估](https://github.com/kismatkunwar89/writeups/blob/main/_posts/2026-06-05-module-3-skill-assessment.md)。
在此过程中构建的 SPL 搜寻查询:[spl-threat-hunting-library](https://github.com/kismatkunwar89/spl-threat-hunting-library)。
每个模块都是独立的,包含各自的用例、共享 config 和检测器脚本。
每个用例都遵循**两步工作流**:
1. **初步 XML 查询** - 粘贴到 Event Viewer 中(*筛选当前日志 -> XML ->
手动编辑查询*)以确认日志中存在 IOC。
2. **PowerShell 检测器** - 针对 `.evtx` 运行以进行深度溯源(进程
创建上下文、父进程/命令行、用户、哈希、时间线)。
所有检测器都是**基于行为且与目标无关的** - 它们的核心依据是*正在发生什么*(未签名的 DLL、非 .NET 进程中的 CLR、内存读取访问掩码),
而不是硬编码的进程名称。
## 仓库结构
```
HTB-CDSA/
├── module3-finding-evil/
│ ├── 01-dll-hijack/
│ ├── 02-clr-injection/
│ ├── 03-credential-dumping/
│ ├── 04-strange-ppid/
│ └── _shared/
│ ├── Invoke-EvtxRecon.ps1
│ ├── baseline-eventlog-queries.xml
│ └── sysmonconfig.xml
└── README.md
```
## 模块 3 - 寻找恶意活动
### 前置条件:Sysmon config (`module3-finding-evil/_shared/sysmonconfig.xml`)
只有在收集了遥测数据的情况下,检测才能发挥作用。共享的 config 启用了这些用例所依赖的事件。在目标主机上安装/更新:
```
Sysmon64.exe -accepteula -i _shared\sysmonconfig.xml # first install
Sysmon64.exe -c _shared\sysmonconfig.xml # update existing
```
启用的关键事件:
- **Event ID 1** - ProcessCreate(每个用例的溯源上下文)
- **Event ID 7** - ImageLoad(DLL 劫持 + CLR 注入)
- **Event ID 10** - ProcessAccess(凭据转储) - `onmatch="exclude"` 因此会
记录所有的进程访问,并过滤掉良性的操作系统来源。
## 用例
### 01 - DLL 劫持
`01-dll-hijack/`
- **IOC:**从 System32/SysWOW64 外部加载的未签名 DLL(以及一个被复制到可写目录下的受信任 EXE
)。
- **初步锚点:**`Signed=false`(Event 7)。
- **检测器**还涵盖了 UAC 绕过的尾随空格伪造目录技巧。
### 02 - CLR 注入 (execute-assembly / 非托管 PowerShell)
`02-clr-injection/`
- **IOC:**`clr.dll` / `clrjit.dll` 被加载到一个没有理由运行 .NET 的进程中(例如 `spoolsv.exe`)。
- **初步锚点:**CLR DLL 路径(Event 7),**无抑制** - 手动审查
`Image` 列;合法的 .NET 宿主也可能成为注入目标。
- **检测器**使用 spawn-vs-load 时间线间隙来发现 runtime 注入。
### 03 - 凭据转储 (LSASS / ProcessAccess)
`03-credential-dumping/`
- **IOC:**进程使用读取掩码
(`0x1010` 等)打开另一个进程的内存、跨用户访问、源自可写路径,或 CallTrace 中为 UNKNOWN。
- **初步锚点:**`EventID=10` + `GrantedAccess=0x1010`。
- **检测器**标记跨用户、可写路径和注入代码的访问,然后
溯源到 Event 1。
### 04 - 奇怪的 PPID / 进程注入
`04-strange-ppid/`
- **IOC:**受信任的进程(例如 `WerFault.exe`)在通过带有空的
`StartModule` / `StartFunction` 的 `CreateRemoteThread` 注入后生成 `cmd.exe` 或
`powershell.exe`。
- **初步锚点:**所有 Event ID 1 的进程创建(小型日志集)。
- **检测器**标记不可能的父-子进程对,并关联 Event ID 8。
### 技能评估映射
| 评估问题 | 文件夹 |
|---|---|
| Q1 DLL 劫持 | `01-dll-hijack/` |
| Q2–Q3 PowerShell 执行 | `02-clr-injection/` |
| Q4–Q5 转储 | `03-credential-dumping/` |
| Q6 奇怪的 PPID | `04-strange-ppid/` |
## 各用例工作流
```
1. Apply module3-finding-evil/_shared/sysmonconfig.xml on the target (once)
2. Open the .evtx (or live log) in Event Viewer
3. Paste //1-first-pass-query.xml -> confirm IOC hits exist
4. Edit $evtx path at top of //2-detect.ps1
5. powershell -ExecutionPolicy Bypass -File \\2-detect.ps1
```
## 内置的关键 XPath / Sysmon 经验
- Event Viewer XPath **仅支持精确匹配** - 不支持通配符,不支持
`contains()`/`starts-with()`,不支持字段间的比较(例如 SourceUser !=
TargetUser 必须在 PowerShell 中完成)。
- `!=` 在 EventData 上具有欺骗性(如果*任何* Data 节点不同即为 true) - 使用
`` 进行排除。
- 支持 `band()` 按位与(对于 GrantedAccess 掩码很有用),但
十六进制字符串强制转换依赖于环境 - 精确匹配更可靠。
- Sysmon `onmatch="include"` 为空 = 什么也不记录;`onmatch="exclude"` 为空 = 记录
所有内容。
- 事件 XML 中的 `SystemTime` 始终是 UTC - 从日志自身的
事件中推导偏移量,而不是从分析人员的机器上。(参见 `_shared/baseline-eventlog-queries.xml`。)
## `_shared/`
- `Invoke-EvtxRecon.ps1` - 初步侦察:验证路径,提取 XML 字段样本,
枚举 Event ID,可选择在运行检测器之前转储一个 Event ID。
- `sysmonconfig.xml` - 启用 Events 1、7、10 的 Sysmon config。
- `baseline-eventlog-queries.xml` - 参考 4624(登录)/ 4907(审核策略
更改)查询,包含 UTC 偏移和时间戳窗口说明。
标签:AI合规, AMSI绕过, API接口, IPv6, Libemu, PowerShell, Sysmon, 威胁检测, 安全, 超时处理