Ayyadi266/soc-siem-detection-lab

GitHub: Ayyadi266/soc-siem-detection-lab

一个基于 Wazuh + Sysmon 的蓝队检测工程实验室框架,提供 MITRE ATT&CK 映射的自定义检测规则、攻击模拟触发器和验证模型。

Stars: 0 | Forks: 0

# SOC / SIEM 家庭实验室 — 检测工程 一个独立的蓝队实验室,运行完整的检测生命周期: **模拟攻击 → 收集遥测数据 → 使用自定义规则进行检测 → 调查 → 记录**。 本仓库中的所有检测都是**纯手写的 Wazuh 规则**(非自带规则集的命中),每一条都 映射到 MITRE ATT&CK 技术,并配有一个专门编写的攻击模拟脚本来触发它。 ## ⚠️ 项目状态 — 框架已完成,实时验证正在进行中 本仓库是一个**检测工程实验室框架**。在继续阅读之前,请明确这意味着什么: | 组件 | 状态 | |---|---| | 规则集(17 条自定义 Wazuh 规则,4 项技术 + 变体) | ✅ **已编写** — 每条规则都附有完整的 WHY(原因)/误报说明 | | Sysmon 配置、agent 配置、遥测启用文档 | ✅ **已编写** | | 攻击模拟脚本(每项技术一个触发器) | ✅ **已编写** — 已进行语法检查,尚未在实际 VM 上运行 | | 各检测的分析报告 + 证据模型 | ✅ **已模板化** — 等待真实截图 + 观测值 | | **在实际 VM 上的端到端验证**(部署 → 触发 → 确认告警 → 截图) | 🚧 **进行中** | **本仓库中的任何规则目前都没有被标记为“已验证”,这是有意为之。** [覆盖矩阵](#4-mitre-attck-coverage-matrix)将每条规则显示为 `written`(已编写) / `planned`(已计划) / `deferred`(已推迟) — 绝没有 `validated`(已验证) — 并且[检测矩阵](validation/detection-matrix.md) 将每项技术跟踪为待处理。方法论、规则逻辑、调整依据和证据 结构是交付成果;随着 VM 上线,实战测试结果将被填补进去(参见 [路线图](#8-roadmap--what-completes-each-detection))。诚实地表明“这是框架以及我将如何证明它”才是重点 — 这里没有任何东西声称获得了它尚未实现的结果。 ## 1. 架构 ``` flowchart TB subgraph HOST["Windows 11 Host — VirtualBox 7.x"] subgraph NET["Host-Only Network 192.168.56.0/24 (no internet)"] KALI["Kali Linux — attacker
192.168.56.30 · 2 GB RAM
Atomic Red Team, manual TTPs"] WIN["WIN10-VICTIM — victim
192.168.56.20 · 4 GB RAM
Sysmon + Wazuh agent
PowerShell ScriptBlock logging"] UBU["Ubuntu victim — deferred
192.168.56.40
auditd + Wazuh agent"] WAZUH["Wazuh Server — SIEM
192.168.56.10 · 4 GB RAM
Amazon Linux 2023
Manager + Indexer + Dashboard"] end BROWSER["Host browser
https://192.168.56.10"] end KALI -- "attack traffic
SMB / RDP / WinRM / HTTP" --> WIN KALI -. "optional" .-> UBU WIN -- "agent :1514/tcp
Sysmon + Security + PowerShell channels" --> WAZUH UBU -. "agent :1514/tcp" .-> WAZUH BROWSER --> WAZUH ``` ### 遥测流水线 ``` flowchart LR A["Attack
(Atomic / manual)"] --> B["Windows Event Log
Sysmon · Security · PowerShell"] B --> C["Wazuh agent
ossec.conf localfile"] C --> D["Wazuh manager
decoders → rules"] D --> E{"local_rules.xml
custom detections"} E --> F["Alert
level + MITRE id"] F --> G["Indexer → Dashboard
MITRE tactic views"] G --> H["Investigation writeup
docs/detections/"] ``` ## 2. 仓库布局 ``` . ├── README.md # you are here ├── docs/ │ ├── 00-lab-setup.md # VM build order, network, gotchas │ ├── 01-telemetry-sources.md # which log channel answers which question │ ├── detections/ # one writeup per technique │ │ └── T1003.001-lsass-access.md (attack → log → rule → screenshot) │ ├── dashboards/ # saved query / visualization docs │ └── images/ # screenshot placeholders ├── sysmon/ │ ├── sysmonconfig-lab.xml # tuned config, commented │ └── README.md # install + update commands ├── wazuh/ │ ├── server/ │ │ ├── rules/local_rules.xml # ALL custom detections live here │ │ ├── decoders/local_decoder.xml │ │ └── README.md # where files go, restart + test commands │ └── agent/ │ ├── ossec-windows.conf # Windows agent config snippets │ └── ossec-linux.conf # Linux agent example ├── attacks/ │ ├── atomic/ # Atomic Red Team notes per technique │ └── scripts/ # standalone .ps1 / .sh triggers └── validation/ └── detection-matrix.md # attack script ↔ rule id ↔ pass/fail log ``` **设计原则:** 每项技术都有且仅有四个工件 — `local_rules.xml` 中的一条规则,`attacks/scripts/` 中的一个触发器,`docs/detections/` 中的一篇分析报告, 以及 `validation/detection-matrix.md` 中的一行记录。如果缺少任何一个,该技术就不算“完成”。 ## 3. 设置顺序 请从上到下依次执行;每一步都依赖于其上一步。 | # | 步骤 | 工件 | |---|------|----------| | 1 | 创建 Host-Only 网络 `192.168.56.0/24`,关闭 DHCP,使用静态 IP | `docs/00-lab-setup.md` | | 2 | 导入 Wazuh 4.14.6 OVA,设置静态 IP,更改默认凭据 | `docs/00-lab-setup.md` | | 3 | 构建 Windows 靶机,*仅为了实验快照*禁用 Defender 防篡改保护 | `docs/00-lab-setup.md` | | 4 | 使用调优后的配置安装 Sysmon | `sysmon/sysmonconfig-lab.xml` | | 5 | 通过 GPO/注册表启用 PowerShell ScriptBlock + Module 日志记录 | `docs/01-telemetry-sources.md` | | 6 | 安装 Wazuh agent,注册到 manager,应用配置 | `wazuh/agent/ossec-windows.conf` | | 7 | 在编写任何规则之前,**验证原始遥测数据已到达** | `validation/detection-matrix.md` | | 8 | 部署自定义规则,重启 manager,运行 `wazuh-logtest` | `wazuh/server/rules/local_rules.xml` | | 9 | 构建 Kali 攻击机,安装 Atomic Red Team(离线包) | `attacks/atomic/` | | 10 | 运行每个触发器,确认告警,截图,并记录下来 | `docs/detections/` | | 11 | 将每个 VM 快照至已知良好状态 | — | 第 7 步是人们经常跳过的一步,然后就会花一整天时间去调试一条从未被触发的规则, 因为日志通道根本没有被转发。 ## 4. MITRE ATT&CK 覆盖矩阵 自定义规则 ID 使用 Wazuh 用户范围 **100000–120000**,按 tactic(战术)划分区块,以便 ID 保持可读性。随着每项检测得到验证,`Status`(状态)会更新。 状态:**written** = 规则存在于 `local_rules.xml` 中;**validated** = 攻击脚本 触发了它并且在仪表板中确认了告警。 | 规则 ID | 技术 | 名称 | 战术 | 主要遥测数据 | 等级 | 状态 | |---------|-----------|------|--------|-------------------|-------|--------| | 100010–100030 | — | 基础规则(等级 0 的父规则,无告警) | — | 所有通道 | 0 | written | | 100100 | T1110 | 暴力破解 — 来自单一源 IP 的登录失败激增 | 凭据访问 | Security 4625 | 10 | written | | 100104 | T1110 / T1087.001 | 账户枚举 — 针对不存在用户的失败尝试 | 凭据访问 | Security 4625 `subStatus` | 12 | written | | 100105 | T1110 | 本地控制台失败突发(噪音降级) | 凭据访问 | Security 4625 | 3 | written | | 100102 | T1078 | 有效账户 — 暴力破解后紧接着成功登录 | 防御规避 | Security 4624 | 12 | written | | 100200 | T1059.001 | PowerShell — 编码命令 | 执行 | Sysmon 1 | 12 | written | | 100201 | T1059.001 | PowerShell — 下载 cradle | 执行 | PS 4104 | 12 | written | | 100202 | T1059.001 | 由可疑父进程启动的 PowerShell/cmd | 执行 | Sysmon 1 | 12 | written | | 100203 | T1059.001 / T1027 | AMSI 绕过、混淆、内存执行 | 执行 | PS 4104 | 13 | written | | 100204 | T1059.001 / T1562.001 | PowerShell v2 降级(日志规避) | 防御规避 | Sysmon 1 | 13 | written | | 100300 | T1003.001 | 通过 GrantedAccess 掩码访问 LSASS 内存 | 凭据访问 | Sysmon 10 | 14 | written | | 100301 | T1003.001/.002 | 写入磁盘的凭据转储工件 | 凭据访问 | Sysmon 11 | 14 | written | | 100302 | T1003.001/.002/.003 | LOLBIN 转储命令行 (comsvcs, procdump, reg save) | 凭据访问 | Sysmon 1 | 14 | written | | 100400 | T1053.005 | 计划任务创建(通用捕获) | 持久化 | Security 4698 | 10 | written | | 100403 | T1053.005 | 包含父进程上下文的 `schtasks.exe /create` | 持久化 | Sysmon 1 | 10 | written | | 100404 | T1053.005 | 任务动作为解释器或用户可写路径 | 持久化 | Security 4698 `taskContent` | 13 | written | | 100405 | T1053.005 | 创建以 SYSTEM 身份运行的任务 | 持久化 | Sysmon 1 | 13 | written | | 100101 | T1110.001 | 暴力破解 — SSH | 凭据访问 | `sshd` 认证日志 | 10 | deferred(没有 Ubuntu VM) | | 100401 | T1547.001 | Run key 持久化 | 持久化 | Sysmon 13 | 10 | planned | | 100402 | T1136.001 | 创建本地账户 | 持久化 | Security 4720 | 10 | planned | | 100500 | T1055 | 进程注入 — CreateRemoteThread | 防御规避 | Sysmon 8 | 13 | planned | | 100501 | T1218.011 | Rundll32 代理执行 | 防御规避 | Sysmon 1 | 12 | planned | | 100502 | T1562.001 | Defender 篡改 / 已禁用 | 防御规避 | Sysmon 13 | 13 | planned | | 100503 | T1070.001 | 事件日志被清除 | 防御规避 | Security 1102 | 13 | planned | | 100600 | T1105 | 入站工具传输 — certutil/bitsadmin | 命令与控制 | Sysmon 1 | 12 | planned | | 100700 | T1087.001 | 本地账户发现 | 发现 | Sysmon 1 | 6 | planned | | 100701 | T1046 | 网络服务扫描(端口扫描) | 发现 | Sysmon 3 | 10 | planned | | 100800 | T1021.001 | 来自攻击者子网的 RDP 登录 | 横向移动 | Security 4624 type 10 | 8 | planned | **已编写 17 条规则,涵盖 4 项技术 + 4 个子技术变体。** v1 目标: 端到端验证 15 项技术。 ### 战术覆盖一览 | 战术 | 已覆盖技术 | |--------|--------------------| | 初始访问 | — *(范围外:实验室内无互联网/电子邮件)* | | 执行 | T1059.001, T1059.003 | | 持久化 | T1053.005, T1547.001, T1136.001 | | 权限提升 | *(已计划:T1548.002 fodhelper UAC bypass)* | | 防御规避 | T1055, T1218.011, T1562.001, T1070.001, T1078 | | 凭据访问 | T1110, T1110.001, T1003.001 | | 发现 | T1087.001, T1046 | | 横向移动 | T1021.001 | | 命令与控制 | T1105 | | 数据外传 / 影响 | *(已计划:T1486 勒索软件 canary 文件检测)* | ## 5. 检测工程规范 `local_rules.xml` 中的每条规则都遵循相同的结构,并带有一个注释块, 解释其触发的**原因** — 所选字段、阈值以及预期的误报情况。 ``` ``` 此处使用的等级指南: | 等级 | 在本实验室中的含义 | |-------|---------------------| | 5–6 | 信息类 / 嘈杂的发现命令 — 仅在仪表板展示 | | 8–10 | 可疑,需要分诊 | | 12–13 | 很可能是恶意的,告警 | | 14–15 | 几乎可以确认已被入侵,立即通知自己 | ## 6. 验证 [`validation/detection-matrix.md`](validation/detection-matrix.md) 是关于 “这个实验室是否有效”的事实来源。每一行目前都处于 **pending**(待定)状态 — 这是该项目 诚实的现状,而填补这些空白正是接下来的工作: | 技术 | 触发脚本 | 预期规则 | 上次运行 | 结果 | |-----------|----------------|---------------|----------|--------| | T1110 | [`t1110_bruteforce.ps1`](attacks/scripts/t1110_bruteforce.ps1) | 100100 | — | pending | | T1059.001 | [`t1059.001_powershell.ps1`](attacks/scripts/t1059.001_powershell.ps1) | 100200–100204 | — | pending | | T1003.001 | [`t1003.001_lsass_access.ps1`](attacks/scripts/t1003.001_lsass_access.ps1) | 100300–100302 | — | pending | | T1053.005 | [`t1053.005_scheduled_task.ps1`](attacks/scripts/t1053.005_scheduled_task.ps1) | 100400–100405 | — | pending | 只有当触发器在靶机上运行,并且告警 连同正确的 MITRE id 出现在仪表板中时,检测才会被标记为 **validated**。请查看完整的 15 行矩阵,了解每条规则的 先决条件和已确认字段名检查清单。 ## 7 安全说明 - 实验 VM **没有互联网路由**。不要桥接这些适配器。 - 凭据转储模拟仅在实验室内写入磁盘;运行后会恢复快照。 - 没有真实凭据,没有生产环境主机名,本仓库中的任何内容都不能在你自己拥有的实验室之外 被重复用作攻击工具。 ## 8. 路线图 — 是什么完成了每一项检测 框架已构建完成;以下是将每条 `written` 规则转变为 `validated` 的步骤。每项技术的流程都是相同的: ``` flowchart LR A["Build VMs
(host-only net)"] --> B["Deploy Wazuh
+ Sysmon + agent"] B --> C["Enable telemetry
(4104 / 4698 / logon audit)"] C --> D["Confirm raw events
reach the manager"] D --> E["Run trigger script
attacks/scripts/"] E --> F["Confirm alert
rule.id + MITRE id"] F --> G["Screenshot →
docs/images/"] G --> H["Fill observed values
flip matrix ✅"] ``` **近期(完成 v1 — 已编写的 4 项技术):** - [ ] 在 host-only 网络上建立四个 VM 并快照干净状态。 - [ ] 部署 Wazuh manager + Windows agent;确认 Sysmon/Security/PowerShell 通道数据到达。 - [ ] 启用三个先决条件(ScriptBlock 4104,任务审计 4698,登录审计)。 - [ ] 运行每个触发器;确认每条规则以预期的等级 + MITRE id 触发。 - [ ] 在真实机器上建立 LSASS `GrantedAccess` 掩码的基线并调整规则 100300。 - [ ] 捕获截图并填写每个 [检测分析报告](docs/detections/)中的 **Observed values** 部分。 - [ ] 将矩阵行从 `written` 更改为 `validated`。 **接下来(向 10–15 项技术的目标扩展):** - [ ] 编写 `planned` 规则(T1547.001 Run keys,T1136.001 账户创建,T1055 注入,T1218.011 rundll32,T1562.001 Defender 篡改,T1070.001 日志清除, T1105 入站传输,T1087.001 / T1046 发现,T1021.001 RDP)。 - [ ] 添加推迟的 Ubuntu 靶机 + T1110.001 SSH 暴力破解规则。 - [ ] 构建仪表板视图(按来源分类的登录失败,进程树,按 MITRE 战术分类的告警)。 - [ ] 编写 `docs/00-lab-setup.md` 和各技术的 Atomic Red Team 笔记。 进度在[覆盖矩阵](#4-mitre-attck-coverage-matrix)和 [检测矩阵](validation/detection-matrix.md)中如实跟踪 — 在证据存在之前,任何一行都不会推进。 ## 作者与许可 由 **Mohammed Ayyadi** 构建并维护,作为一个实践性的检测工程作品集 项目。在 [MIT 许可证](LICENSE)下发布 — 在你自己的实验室中自由使用这些规则和方法论。
标签:AI合规, Libemu, Sysmon, Wazuh, 安全运营, 实验室环境, 扫描框架, 红队行动