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, 威胁检测, 安全, 超时处理