alive-xd/Trace
GitHub: alive-xd/Trace
基于真实历史恶意软件执行日志对 Sigma 检测规则进行实证评估的检测工程流水线。
Stars: 1 | Forks: 0
# Trace:检测工程流水线
**基于真实的历史捕获恶意软件执行日志,对 Sigma 规则进行实证评估。**
[](#)
[](#)
[](#)
[](#)
[](#)
[**查看实时交互式 Demo**](https://trace-sigma-five.vercel.app/)
## 本项目解决的问题
检测工程师和 SOC 分析师不断编写和部署新的检测规则。问题在于,如何得知这些规则是否真能捕获真实的攻击者行为,还是仅仅捕获了理论上的教科书模式。大多数展示项目都是使用模拟的、自己编写的数据来测试检测规则。
**本项目并非如此。** 它使用真实的历史捕获恶意软件遥测数据来测试规则,以证明它们在真实世界中有效。
## 为什么使用真实捕获的日志而不是实时虚拟机 (VM)?
搭建一个实时虚拟机并自己生成攻击者行为非常有价值,但这非常耗费时间和设备。使用 **EVTX-ATTACK-SAMPLES**(一个备受推崇的公开安全研究数据集,包含来自实际执行攻击的真实 Windows Event Logs 捕获数据)能提供完全相同的核心价值。
它确保规则是通过真实的技术执行来测试的,而不是虚构或“干净”的数据,这种方式是完全可复现且可脚本化的。这用 *“我能针对任何人都可以验证的、可引用的标准数据集进行证明和复现”* 代替了 *“我个人生成了攻击”*。
## 架构
```
flowchart TD
subgraph Data Acquisition
A[(EVTX-ATTACK-SAMPLESGitHub Dataset)] -->|fetch_samples.py| B[data/raw/
Binary .evtx Logs] end subgraph Parsing & Detection B -->|parse_evtx.py| C[data/parsed/
JSONL format] C -->|match_rules.py| D{Sigma Rules Evaluator} end subgraph Output D -->|Export| E(CLI Results Table) D -->|Export| F(public/data.json) end subgraph Vercel Deployment F --> G[Static Web Frontend] G <-->|Live JSON testing| H((Vercel Serverless API)) end ``` - **EVTX-ATTACK-SAMPLES (数据源):** 包含原始 `.evtx` 文件的公开 GitHub 仓库。 - **fetch_samples.py:** 通过 GitHub API 拉取海量的二进制日志文件。 - **data/raw/:** 用于存储未解析的二进制 Windows Event Logs 的本地存储。 - **parse_evtx.py:** 将不可读的 `.evtx` 二进制文件转换为结构化的 JSONL。 - **data/parsed/:** 用于存储可读、可查询的 JSON 日志的本地存储。 - **sigma-rules/:** 包含使用 Sigma YAML 编写的实际检测逻辑的目录。 - **match_rules.py:** 我们自定义的评估引擎,用于针对 Sigma 规则测试解析后的日志。 - **结果表:** CLI 输出,准确显示哪些规则捕获了哪些攻击。 - **data.json 导出:** 供 UI 使用的调查结果结构化导出文件。 - **前端 + Serverless 后端:** 一个用于展示调查结果的响应式 UI,以及一个允许用户实时运行 Python 检测逻辑的 Vercel serverless 后端。 ## 完整规则目录 以下是针对历史数据集运行检测规则的最终执行输出: | 规则名称 | 技术 ID | 匹配数 | 状态 | | :--- | :--- | :--- | :--- | | 清除 Windows Event Logs | attack.t1070.001 | 1 | MATCHED | | 创建本地账户 | attack.t1136.001 | 2 | MATCHED | | 可疑的 PowerShell Script Block | attack.t1059.001 | 1 | MATCHED | | 可疑的编码 PowerShell 命令 | attack.t1059.001 | 0 | WRONG LOG SOURCE | | 通过命令行进行的潜在 LSASS Memory Dump | attack.t1003.001 | 0 | WRONG LOG SOURCE | | LSASS 对象访问 (Security Log) | attack.t1003.001 | 1 | MATCHED | | 可疑的 Microsoft Office 子进程 | attack.t1204.002 | 1 | MATCHED | | 通过 CreateRemoteThread 进行的 Process Injection | attack.t1055 | 3 | MATCHED | | Remote Desktop Protocol 连接 | attack.t1021.001 | 2 | MATCHED | | 直接修改 Registry Run Key | attack.t1547.001 | 2 | MATCHED | | 通过命令行修改 Registry Run Key | attack.t1547.001 | 0 | WRONG LOG SOURCE | | 可疑的计划任务创建 | attack.t1053.005 | 2 | MATCHED | | Signed Binary Proxy Execution (rundll32) | attack.t1218 | 11 | MATCHED | *针对 10 种独立技术共编写了 13 条规则 —— 在测试发现日志源不匹配后,早期的 3 条规则已被特定日志源版本所取代(示例请参见关键发现 #1)。* ## 关键发现 #1 — Registry 持久化覆盖盲区  我最初编写规则时假设攻击者会生成命令行工具(如 `reg.exe`)来修改 registry 以实现持久化。当针对真实的 Tendyron 恶意软件样本进行测试时,该规则完全失败了。 该恶意软件完全绕过了命令行工具,直接利用 Windows API 来写入其持久化密钥。解决方法是将检测源从 Process Creation (Sysmon Event ID 1) 切换到 Registry Events (Sysmon Event ID 12/13/14),无论执行方法如何,这都成功捕获了该行为。请阅读[此处的完整覆盖盲区分析](docs/coverage-gaps.md)。 ## 关键发现 #2 — Rundll32 误报膨胀  针对 Signed Binary Proxy Execution (`rundll32.exe`) 的初始规则在数据集中产生了 **85 个匹配**。在调查原始遥测数据时,我发现其中 74 个匹配属于良性的操作系统遥测事件——例如模块加载 (Event ID 7)——在这些事件中,`rundll32.exe` 只是碰巧被涉及,而不是被主动执行。 通过诊断这种膨胀并将规则收紧为明确要求 `EventID: '1'`,匹配数降至 **11 个精确、可操作的警报**。这成功在其进入生产环境的 SIEM 之前,捕获了一个大规模的误报问题。 ## 误报推理解析 即使规则触发了,分析师也必须快速确定其是良性还是恶意的。以下是我记录的 3 个场景: 1. **可疑的 PowerShell Script Block:** IT 管理员经常运行管理脚本。区分因素在于执行路径:IT 脚本从安全的存储库(`C:\Program Files\IT_Scripts`)运行,而我们的真实恶意软件则从 `C:\Users\Public\lsass_wer_ps.ps1` 处暂存执行。 2. **LSASS 对象访问:** 合法的 EDR/防病毒软件工具会不断检查 LSASS 内存。区分因素在于请求进程:EDR 使用签名的二进制文件(`CSFalconService.exe`),而恶意样本则使用通用的脚本引擎(`cscript.exe`)来请求高权限访问掩码。 3. **直接修改 Registry Run Key:** 像 Microsoft Teams 这样的合法软件会不断写入 Run keys。区分因素在于 payload 路径:合法软件指向 `C:\Program Files\`,而我们的恶意软件指向的是全局可写的暂存目录(`C:\Users\Public\tools\apt\tendyron.exe`)。 请阅读[此处的完整误报指南](docs/false-positives.md)。 ## 客观的局限性 `可疑的 Microsoft Office 子进程` 规则只是偶然得到了验证(我是在更广泛的 process injection 样本中发现其执行的),而不是通过独立获取和隔离的 Office 宏样本验证的。这并非对宏检测能力的全面验证。 ## 实时交互式 Demo  我在前端构建了一个交互式的“测试一个检测”功能。它通过真实的 Sigma 规则逻辑(通过 Vercel serverless Python 函数),针对来自数据集的真实历史样本或你粘贴的任何 JSON 日志运行。它会根据你的静态输入按需返回真实的匹配/不匹配结果,而不是实时的网络流量。 [**在此尝试实时 Demo**](https://trace-sigma-five.vercel.app/) ## 如何自行运行 ``` # 1. 安装 requirements pip install -r requirements.txt # 2. 从 GitHub 获取原始日志文件 python scripts/fetch_samples.py # 3. 将 .evtx 二进制文件解析为可查询的 JSON python scripts/parse_evtx.py # 4. 运行评估引擎 python scripts/match_rules.py # 5. 将规则、覆盖盲区发现和误报数据导出到 data.json 中,供 frontend 使用。 python scripts/export_for_frontend.py ``` *(注意:Web 前端通过 Vercel 利用 `api/index.py` 和 `public/` 自动运行)* ## 致谢 所有底层事件日志数据均源自由 Samir Bousseaden 编写的优秀 [EVTX-ATTACK-SAMPLES](https://github.com/sbousseaden/EVTX-ATTACK-SAMPLES) 数据集。
标签:DAST, Python, Sigma规则, 安全运营, 恶意软件分析, 扫描框架, 数据可视化, 无后门, 目标导入, 逆向工具