Ayyadi266/sentinel-cloud-siem

GitHub: Ayyadi266/sentinel-cloud-siem

基于 Microsoft Sentinel 的云原生 SIEM 实验室,提供九条映射 MITRE ATT&CK 的 KQL 检测规则、SOC 仪表板、SOAR 自动化及分级证据验证模型,在严格成本控制下实现端到端的安全运营。

Stars: 0 | Forks: 0

# Microsoft Sentinel 云端 SIEM — 检测工程实验室 一个完全基于 **Microsoft Sentinel** 构建的原生云端 SIEM:数据连接器、映射到 **MITRE ATT&CK** 的 **9 条 KQL 分析规则**、交互式 SOC workbook,以及一个 Logic App **SOAR** playbook —— 在严格的免费层级成本控制下进行部署,并通过一种**诚实、分级的证据模型**进行验证,将每项检测标记为*已验证*、*查询验证*、*仅书面*或*已阻断*。 **作品集:** EDR Agent (C#/.NET ETW) · SOC 家庭实验室 (Wazuh + Sysmon + Atomic Red Team) · 检测即代码 (Sigma,分级证据) · SATGECAR (安全设计 Web 应用) · **→ 本项目增加了云端 + KQL 维度。** ## 目录 1. [概述](#overview) 2. [架构](#architecture) 3. [检测目录](#detection-catalogue) 4. [MITRE ATT&CK 覆盖范围](#mitre-attck-coverage) 5. [验证状态(真实)](#validation-status-honest) 6. [成本工程](#cost-engineering) 7. [仓库结构](#repo-layout) 8. [如何复现](#how-to-reproduce) 9. [截图](#screenshots) 10. [展示的技能](#skills-demonstrated) 11. [局限性与坦诚的不足](#limitations--honest-gaps) 12. [环境拆除](#teardown) ## 概述 本项目在 Microsoft Sentinel 上配置了一个可用的云端 SOC,并使用安全的、自行编写的攻击模拟对其进行测试。这是刻意为之的**真实环境,而非玩具**:每条规则都包含误报说明、调优参数和*声明的局限性*;每项检测都带有明确的验证状态并附有截图支持;整个环境在构建时加入了成本护栏和干净的环境拆除流程,因此在学生订阅上运行只需几美元。 **端到端展示的内容:** - 将免费(**Azure Activity**)、已授权(**Entra ID**)和端点(**通过 AMA 的 Windows**)遥测数据连接到 **Log Analytics workspace** 中。 - 用 KQL 编写跨 7 种 ATT&CK 战术的 **9 条计划分析规则**,包含实体映射、动态严重性和结果丰富。 - 触发每项检测,检查生成的**事件**,并如实记录结果。 - 一个 SOC **workbook** 仪表板和一个自动化的 **SOAR** 通知 playbook。 - 可选的**基础设施即代码** (Bicep),用于复现平台 + 免费规则。 ## 架构 完整图表(数据流、部署拓扑、单条规则的 pipeline)见 [`docs/architecture.md`](docs/architecture.md)。 ``` flowchart LR subgraph SRC["Data Sources"] D1["Azure Activity
FREE"] D2["Entra ID
SigninLogs · AuditLogs"] D3["Windows VM
SecurityEvent · optional"] end LAW[("Log Analytics
log-sentinel-lab
1 GB/day cap")] subgraph SENT["Microsoft Sentinel"] AR["9 Analytics Rules
KQL + MITRE"] INC["Incidents"] WB["SOC Workbook"] AUTO["Automation Rule"] end PB["Logic App
pb-notify-soc-oncall"] OUT["Email / Teams"] D1 & D2 & D3 --> LAW --> AR --> INC LAW --> WB INC --> AUTO --> PB --> OUT INC -. metrics .-> WB classDef free fill:#1b4332,stroke:#2d6a4f,color:#e8f5e9 classDef billed fill:#5c2018,stroke:#a4362b,color:#ffe9e5 class D1 free class D2,D3 billed ``` ## 检测目录 9 条规则,3 个数据源,7 种 ATT&CK 战术。每条规则的完整细节 + 门户步骤见 [`rules/`](rules/)([目录](rules/README.md))。 | # | 规则 | 来源 | 成本 | 技术 | 检测内容 | |---|---|---|---|---|---| | 01 | [大量资源删除](rules/01-azure-activity-mass-resource-deletion.kql) | AzureActivity | 🟢 | T1485 | 一个调用者快速删除大量资源 | | 02 | [特权 RBAC 分配](rules/02-azure-activity-privileged-role-assignment.kql) | AzureActivity | 🟢 | T1098.003 | 授予 Owner / User Access Admin 权限 | | 03 | [NSG 暴露于互联网](rules/03-azure-activity-nsg-exposure.kql) | AzureActivity | 🟢 | T1562.007 | RDP/SSH 对 `0.0.0.0/0` 开放 | | 04 | [登录暴力破解](rules/04-entra-signin-bruteforce.kql) | SigninLogs | 🟡 | T1110.001 | 一个账户多次登录失败 + 是否成功登入 | | 05 | [密码喷洒](rules/05-entra-password-spray.kql) | SigninLogs | 🟡 | T1110.003 | 一个 IP,多个账户,每个账户尝试次数少 | | 06 | [不可能的旅行](rules/06-entra-impossible-travel.kql) | SigninLogs | 🟡 | T1078.004 | 地理位置上不可行的登录对 (geo_distance) | | 07 | [特权账户篡改](rules/07-entra-privileged-account-manipulation.kql) | AuditLogs | 🟡 | T1136.003 | 新建账户 → 提升至管理员角色;管理员重置他人凭据 | | 08 | [Windows 远程暴力破解](rules/08-windows-rdp-bruteforce.kql) | SecurityEvent | 🔴 | T1110.001 | 4625 爆发;通过 SubStatus 区分枚举与针对性攻击 | | 09 | [可疑的 PowerShell](rules/09-windows-suspicious-powershell.kql) | SecurityEvent | 🔴 | T1059.001 | 加权评分的命令行技术 | 🟢 免费 · 🟡 计费但仅约几美分(需要 Entra P1/P2;规则 07 在免费层可用) · 🔴 需要可选的 VM **将这些与复制粘贴规则区分开来的设计亮点:** - **结果丰富** — 规则 04/05/08 将成功事件重新关联进来,因此事件会说明*攻击者是否成功进入*,而不仅仅是显示他们尝试过。 - **攻击形态分类** — 规则 08 读取 4625 `SubStatus`,将*用户名枚举*与*针对性的密码猜测*区分开来。 - **加权评分** — 规则 09 对多个指标进行评分,而不是只匹配一个关键字,因此单个无害的 `-NoProfile` 不会触发警报,但真实的攻击链会。 - **每条规则都声明了其自身的局限性** — 它如何被规避,以及它无法看到什么。 ## MITRE ATT&CK 覆盖范围 ``` flowchart LR IA["Initial Access
T1078.004"]:::c --> R6["Rule 06"] EX["Execution
T1059.001"]:::c --> R9["Rule 09"] PE["Persistence
T1136 · T1098 · T1562"]:::c --> R237["Rules 02·03·07"] PR["Priv Esc
T1098.003"]:::c --> R27["Rules 02·07"] DE["Defense Evasion
T1562 · T1027"]:::c --> R369["Rules 03·06·09"] CA["Credential Access
T1110.001 · .003"]:::c --> R458["Rules 04·05·08"] IM["Impact
T1485"]:::c --> R1["Rule 01"] classDef c fill:#12355b,stroke:#2b6cb0,color:#e3f2fd ``` 完整技术表,**包含故意未覆盖的战术**(C2、数据外发、发现、横向移动)及其原因:[`rules/README.md`](rules/README.md#mitre-attck-coverage)。 ## 验证状态(真实) 证据分级 — 本项目的核心原则(对应我的检测即代码工作): | 层级 | 含义 | |---|---| | ✅ **已验证** | 模拟攻击 → 创建事件 → 实体/MITRE 映射正确 → 捕获截图 | | 🟡 **查询验证** | KQL 在真实数据上返回正确的行,但没有完整事件(或为合成数据) | | ⚪ **仅书面** | 仅进行了语法检查;尚未实际运行 | | 🔵 **已阻断** | 无法验证 — 声明的环境原因(无 P1/P2,无 VM) | **当前状态 — 随着我的执行将进行更新**(见 [`docs/02-validation.md`](docs/02-validation.md)): | # | 规则 | 状态 | 证据 | |---|---|---|---| | 01 | 大量资源删除 | ⚪ 仅书面 | _等待运行_ | | 02 | 特权 RBAC 分配 | ⚪ 仅书面 | _等待运行_ | | 03 | NSG 暴露于互联网 | ⚪ 仅书面 | _等待运行_ | | 04 | 登录暴力破解 | ⚪ 仅书面 | _等待(需要 P1/P2)_ | | 05 | 密码喷洒 | ⚪ 仅书面 | _等待(需要 P1/P2)_ | | 06 | 不可能的旅行 | ⚪ 仅书面 | _等待(需要 P1/P2 + VPN)_ | | 07 | 特权账户篡改 | ⚪ 仅书面 | _等待运行_ | | 08 | Windows 远程暴力破解 | ⚪ 仅书面 | _等待(需要 VM)_ | | 09 | 可疑的 PowerShell | ⚪ 仅书面 | _等待(需要 VM)_ | ## 成本工程 专为在 Azure for Students 上以**总计约 0-10 美元**运行而构建。成本思考本身就是一项交付成果 — 完整细节见 [`docs/00-setup.md § 3`](docs/00-setup.md)。 | 护栏 | 机制 | |---|---| | 硬性消费停止 | Azure for Students **开启消费限额**(禁用超支,永不扣费) | | 预警 | **25 美元预算**,包含 3 个实际警报 + 1 个**预测**警报 | | 摄入量上限 | Log Analytics **每日 1 GB** 硬性上限(比预期数据量高出约 20 倍空间) | | 免费优先的数据源 | **Azure Activity**(始终免费)无需其他支持即可承载 3 条规则 | | VM 管控 | B2s **在会话间隙解除分配** + 自动关闭;这是唯一的实际成本 | | 过滤端点日志 | DCR 收集**特定事件 ID**,而不是“所有安全事件” | | 干净退出 | [环境拆除清单](docs/99-teardown.md) → 验证为 0 美元 | **我验证并指出的真实成本事实:** Entra 登录/审计日志*不是*免费的 Sentinel 数据源(它们按 GB 计费 — 只是在实验室规模下金额极小);`SigninLogs` 需要 Entra **P1/P2**;而且从 *Windows 内部*停止 VM **并不会**停止计算计费 — 只有通过门户**解除分配** 才能做到。 ## 仓库结构 ``` sentinel-cloud-siem/ ├── README.md ← you are here ├── docs/ │ ├── architecture.md Mermaid: data flow · topology · detection pipeline │ ├── 00-setup.md Account, workspace, Sentinel, budget, daily cap │ ├── 01-connectors.md Azure Activity · Entra ID (P2) · optional VM/AMA/DCR │ ├── 02-validation.md Attack sim + tiered evidence table │ ├── 03-workbook.md SOC dashboard build steps │ └── 99-teardown.md Delete-everything checklist, verified $0 ├── rules/ 9 × .kql — header, KQL, FP notes, tuning, LIMITATIONS │ └── README.md Catalogue + MITRE coverage (incl. gaps) ├── attack/ Safe simulation scripts (one per rule) ├── workbooks/ │ └── soc-overview.workbook.json Importable Sentinel workbook ├── playbooks/ │ ├── notify.md SOAR wiring steps │ └── pb-notify-soc-oncall.logicapp.json ARM template ├── infra/ Optional Bicep: workspace + Sentinel + rules 01-03 │ ├── main.bicep · main.parameters.json │ └── modules/analytics-rules.bicep └── assets/screenshots/ Evidence (you populate as you validate) ``` ## 如何复现 按顺序阅读文档;每一步结尾都有验证检查点。 | 阶段 | 文档 | 您将获得 | |---|---|---| | 1 | [`docs/00-setup.md`](docs/00-setup.md) | 带有成本护栏的 Sentinel 实例 | | 2 | [`docs/01-connectors.md`](docs/01-connectors.md) | 遥测数据流入,已在 KQL 中验证 | | 3 | [`rules/`](rules/) | 创建了 9 条分析规则 | | 4 | [`docs/02-validation.md`](docs/02-validation.md) | 触发检测 + 证据表 | | 5a | [`docs/03-workbook.md`](docs/03-workbook.md) | SOC 仪表板 | | 5b | [`playbooks/notify.md`](playbooks/notify.md) | 自动化事件通知 | | — | [`infra/`](infra/) | *(可选)* 作为代码的平台 + 免费规则 | | End | [`docs/99-teardown.md`](docs/99-teardown.md) | 全部删除,0 美元 | **最小可行项目**(无需许可证、无 VM、0 美元):阶段 1-2 的 A 部分 + 规则 01/02/03/07 + workbook + playbook。这仍然是一个完整、站得住脚的 Sentinel 项目。 ## 截图 _在执行过程中填充。以下为占位符;请替换为真实的(模糊处理 GUID)截图。_ | 区域 | 占位符 | |---|---| | Sentinel 已启用 | `assets/screenshots/05-sentinel-enabled.png` | | 每日上限 / 成本护栏 | `assets/screenshots/04-daily-cap.png` | | 示例事件(规则 01) | `assets/screenshots/inc-01-mass-deletion.png` | | 事件实体 + MITRE | `assets/screenshots/inc-04-bruteforce.png` | | SOC workbook 概览 | `assets/screenshots/wb-01-overview.png` | | 全球登录地图 | `assets/screenshots/wb-03-signin-map.png` | | Playbook 运行 + 邮件 | `assets/screenshots/pb-02-email.png` | ## 展示的技能 **云安全 / SIEM** - Microsoft Sentinel 引导、数据连接器、Log Analytics workspace 管理 - 诊断设置、数据收集规则 (DCR)、Azure Monitor Agent (AMA) - 事件分类、实体映射、警报分组、自动化规则 **检测工程 (KQL)** - 跨 7 种 ATT&CK 战术的 9 条计划分析规则 - 高级 KQL:嵌套 JSON 解析、`geo_distance_2points`、`prev()` 窗口操作、关联 join、加权指标评分、动态严重性分配 - 每条规则的误报分析、阈值调优和明确的局限性声明 **威胁检测与 ATT&CK** - 刻意规划的技术覆盖映射 — *并*如实声明未覆盖的战术 - 安全的攻击模拟(暴力破解、密码喷洒、不可能的旅行、RBAC 滥用、LOLBin) **SOAR / 自动化** - Logic App playbook(ARM 模板),使用托管标识遵循最小权限原则 - 事件触发的丰富、通知和审计评论回写 **云成本与运营** - 免费层工程:消费限额、预算、摄入量上限、VM 生命周期管控 - 完整的环境拆除,且验证花费为 0 美元 **基础设施即** - 使用 Bicep 编写 workspace + Sentinel + 分析规则;`what-if` / 验证工作流 **专业实践** - 分级证据模型(已验证 vs 仅书面 vs 已阻断)— 诚实重于绿勾 - 具备 Runbook 质量的文档,包含分阶段验证检查点 ## 局限性与坦诚的不足 特此声明 — 了解自己工作的边界才是关键。 - **未覆盖**命令与控制 (C2)、数据外发、收集、发现或(除一项次要映射外)横向移动。这些需要网络遥测(计费的 NSG 流日志)或多个端点 — 在成本限制下超出了范围。见 [`rules/README.md`](rules/README.md#acknowledged-gaps--stated-deliberately)。 - **规则 06(不可能的旅行)**容易产生误报(由 VPN 引起),并且 Entra ID Protection 的原生机器学习检测做得更好;它的存在是为了展示地理空间 KQL。 - **规则 08/09** 基于命令行/事件日志,可以通过内存执行技术规避;完全的保真度需要脚本块记录 / AMSI / Sysmon(已部分提供)。 - 在学生创建的租户上,**Entra P2 试用版的可用性** *预期可用但不保证*;文档中记录的备用方案可以确保即使没有它,项目依然完整。 - 部分规则发布时可能是**查询验证**或**已阻断**状态,而非完全验证 — 这是透明记录的,而不是被隐藏的。 ## 环境拆除 捕获证据后:[`docs/99-teardown.md`](docs/99-teardown.md) 将删除所有资源并验证持续花费为 0 美元。仓库、截图和验证表是持久的交付成果 — 实时环境只是脚手架。 *由 Mohammed (EMSI Rabat) 作为 SOC / 蓝队作品集项目构建。检测规则是为个人实验室租户编写的并映射到 MITRE ATT&CK;验证状态根据分级证据模型如实跟踪。*
标签:KQL, Libemu, Microsoft Sentinel, SOAR, 安全运营中心, 网络映射