ishehzadanwar/detection-engineering-lab

GitHub: ishehzadanwar/detection-engineering-lab

一个基于 Wazuh + Sigma + Atomic Red Team 的检测工程实践项目,演示如何从攻击模拟中提炼、编写并调优可用的 SIEM 检测规则。

Stars: 0 | Forks: 0

Detection Engineering with Sigma and MITRE ATT&CK

![Framework](https://img.shields.io/badge/MITRE-ATT%26CK-d9705f?style=flat-square&labelColor=1c1712) ![Rules](https://img.shields.io/badge/Detections-Sigma_%2B_Wazuh-d98f2b?style=flat-square&labelColor=1c1712) ![Emulation](https://img.shields.io/badge/Emulation-Atomic_Red_Team-5b9bd5?style=flat-square&labelColor=1c1712) ![SIEM](https://img.shields.io/badge/SIEM-Wazuh_4.14.6-6cc08b?style=flat-square&labelColor=1c1712) ![Endpoint](https://img.shields.io/badge/Endpoint-Windows_11_%2B_Sysmon-0078D6?style=flat-square&labelColor=1c1712) **模拟真实的攻击者技术,然后编写、部署、测试并调优能够捕获这些攻击的检测规则。**
## 📌 概述 阅读告警是一项技能。*编写*告警才是助你获得工作的关键。在这个项目中,我 挑选了三种 MITRE ATT&CK 技术,使用 **Atomic Red Team** 在我的实验室中分别执行了它们,研究了 遥测数据,然后编写了 **Sigma** 规则并将它们转换为原生的 **Wazuh** 规则 —— 让每一条规则都经历了 完整的 编写 → 测试 → 调优 循环。它直接建立在我的 [使用 Wazuh 搭建家庭 SOC](https://github.com/ishehzadanwar/home-soc-wazuh) 实验室基础之上。 | | | |---|---| | **实验室** | Wazuh 4.14.6 SIEM · Windows 11 endpoint · Sysmon (SwiftOnSecurity) · VMware,隔离网络 | | **模拟** | Atomic Red Team (`Invoke-AtomicRedTeam`) | | **检测** | 3 条自定义 Wazuh 规则 + 可移植的 Sigma 等效规则 | | **故事线** | 执行 → 持久化 → 凭据访问 | ## 🔁 方法论
The detection-engineering loop
对于每一项技术:运行攻击,寻找它产生的事件,编写一条针对能够区分恶意与正常行为的字段的规则, 部署它,重新运行以确认它被触发,然后生成正常活动并调整以排除误报。 ## 🎯 检测覆盖范围 | # | 技术 | ATT&CK | 规则 | 级别 | 数据源 | 详细说明 | |---|-----------|--------|------|:-----:|-------------|----------| | 1 | PowerShell — 编码命令 | [T1059.001](https://attack.mitre.org/techniques/T1059/001/) | `100100` | 🔴 12 | Sysmon EID 1 | [→](writeups/t1059_001_powershell_encoded.md) | | 2 | 计划任务 — 持久化 | [T1053.005](https://attack.mitre.org/techniques/T1053/005/) | `100101` | 🔴 12 | Sysmon EID 1 | [→](writeups/t1053_005_scheduled_task.md) | | 3 | LSASS 凭据转储 | [T1003.001](https://attack.mitre.org/techniques/T1003/001/) | `100102` | 🔴 14 | Sysmon EID 1 | [→](writeups/t1003_001_lsass_dumping.md) | 包含调优记录和客观缺口的完整矩阵:[`coverage/coverage-matrix.md`](coverage/coverage-matrix.md)。 ## 🧪 技术 1 — PowerShell 编码命令 (T1059.001) 攻击者使用 base64 编码的 PowerShell 来隐藏 payload。我发现的坑是:PowerShell 接受 该 flag 的**任何缩写** —— `-e`、`-en`、`-enc`、`-EncodedCommand` —— 而 Wazuh 的内置 规则只在父进程是 WMI 时才会触发。我的规则可以**不论父进程为何**捕获编码的 PowerShell,并匹配每种 flag 变体。 ![规则 100100 触发](https://static.pigsec.cn/wp-content/uploads/repos/cas/65/6574ff58e518bb934361bd8fa42e88a43e4fbabd127133e860337715efb9c6bd.png) 关键正则表达式:`(?i)\s[-/]e[a-z]*\s+[A-Za-z0-9+/=]{20,}` —— 尾部的 base64 长度要求是 防止 `-ExecutionPolicy` 触发大量误报的关键。 → [完整说明](writeups/t1059_001_powershell_encoded.md) ## 🧪 技术 2 — 计划任务持久化 (T1053.005) 攻击者会创建计划任务,以便他们的代码能在重启后继续运行。使用 `schtasks /create` 进行模拟; 内置的规则集只发出了一个 **level-3** 告警。**这条规则是我自己编写的** —— 阅读事件、 形成假设、并填写字段。 ![规则 100101 触发](https://static.pigsec.cn/wp-content/uploads/repos/cas/35/35baa86aa0a035ae953e40ff3cf5ab859b3319f179c0ef7fc054e410003fc923.png) 检测逻辑:命令行中出现 `schtasks.exe` + `[/-]create\b` → level 12。 → [完整说明](writeups/t1053_005_scheduled_task.md) ## 🧪 技术 3 — LSASS 凭据转储 (T1003.001) 这是最难的一个,也是最贴近现实的一个。转储 `lsass.exe` 会窃取内存中的所有凭据。 必须解决三个现实障碍 —— 而这些故障排除过程*本身*就是经验所在: **Defender 在测试中途自动重新启用**(防篡改保护 Tamper Protection)并阻止了攻击: ![攻击被 Defender 阻止](https://static.pigsec.cn/wp-content/uploads/repos/cas/d4/d4076c4f00c68e488a318b63ba0f4d641dd9c9fe53b4bd879d0669beb4ebce9c.png) **遥测数据未被收集。** Sysmon 的 ProcessAccess (Event ID 10) 默认是关闭的 —— 配置文件里字面意思是这么写的。我通过一行修改启用了它,并重新加载了 Sysmon: ![在 Sysmon 中启用 ProcessAccess](https://static.pigsec.cn/wp-content/uploads/repos/cas/d6/d671b398ca84fbb4bc7f46142b043067506bf43ccb4733fba478c561abed6c4b.png) **LSA Protection 阻止了转储** (`RunAsPPL = 2`) —— 这是一个真实的防御控制措施 —— 但*尝试*行为 仍然被记录了下来。在归咎于处理流水线之前,先在数据源头进行了验证: ![本地 Event 10 与 LSA Protection](https://static.pigsec.cn/wp-content/uploads/repos/cas/98/9847f1d348a2d4e63c881ae53f73606eb2818bafe58996f5fa3a4af2447b868b.png) 最终的检测在 level 14 触发,目标指向 `comsvcs.dll MiniDump` 命令行 —— 这是最可靠的信号: ![规则 100102 触发](https://static.pigsec.cn/wp-content/uploads/repos/cas/76/768e3f2b5fb30c3754463478dfd1f3ae115ea56ddd9bd91cbb614e9f55915179.png) → [完整说明,包含所有这三个障碍](writeups/t1003_001_lsass_dumping.md) ## 🎓 我学到了什么 - **SIEM 是一个关联引擎,它只会展示符合规则的内容。** 没有规则的原始事件是 不可见的 —— 编写规则才能让数据显现出来。 - **如果你不收集数据,你就无法检测。** 检测工程的一半工作是在任何规则生效之前,先 开启正确的遥测数据(Script Block Logging,Sysmon ProcessAccess)。 - **精准度是全部的核心。** 每一条规则都需要第二个条件来避免误报 —— 一个 base64 数据块、一个单词边界、一个特定的 DLL。一条嘈杂的规则在第一天就会被静音。 - **阅读错误信息,而不是凭感觉。** 我遇到的 bug —— 重复的规则、一个事件匹配多条规则、Defender 重新启用、转储被阻止 —— 都是靠阅读日志和检查源头来解决的。 ## 🚀 下一步的改进计划 - 既然现在已经启用了 ProcessAccess,可以编写一条 Sysmon **Event ID 10** 规则,用于与工具无关的 LSASS 检测(不仅能捕获 comsvcs,还能捕获 Mimikatz)。 - 构建一个 **ATT&CK Navigator** 图层来可视化覆盖范围。 - 自动化整个循环:编写一个脚本来运行每个 atomic 并断言告警是否触发(迷你版的检测 CI)。 - 为相同的技术添加 Linux (`auditd`) 检测。 ## 📂 仓库结构 ``` detection-engineering-lab/ ├── README.md ├── docs/ banner + loop diagram ├── rules/ │ ├── sigma/ portable Sigma rules (3) │ └── wazuh/ native Wazuh rules deployed to the manager (3) ├── tests/ │ └── atomics-used.md exact Atomic Red Team tests + lab conditions ├── evidence/ │ └── screenshots/ alert-fired proof for every technique ├── coverage/ │ └── coverage-matrix.md technique → rule → data source → tested → FP notes └── writeups/ full write→test→tune loop, one per technique ``` ## ⚠️ 实验室与安全提示 Atomic Red Team 仅在隔离的实验室虚拟机中运行(Host-Only 网络,断开家庭局域网连接),并且 运行自干净的快照。Microsoft Defender 作为已记录在案的实验室条件被禁用,以便这些技术 能够生成遥测数据。这里的内容均不针对任何真实或生产系统。
**保持好奇,保持安全**
标签:ATT&CK评估, Wazuh, 安全运营, 扫描框架, 检测规则, 红队模拟, 网络资产发现