sandeepmothukuri/sentinel-detection-engine
GitHub: sandeepmothukuri/sentinel-detection-engine
面向 Microsoft Sentinel 和 Defender XDR 的检测即代码工具包,提供经过筛选的高质量检测规则、威胁狩猎查询、SOAR 自动化剧本及完整 SOC 工作流文档,帮助安全团队快速建立从检测到响应的闭环能力。
Stars: 1 | Forks: 0
# sentinel-detection-engine
**作者:** Sandeep Mothukuri — SOC L3 / 事件响应
**仓库:** [`sandeepmothukuri/sentinel-detection-engine`](https://github.com/sandeepmothukuri/sentinel-detection-engine)
[](https://github.com/sandeepmothukuri/sentinel-detection-engine/actions/workflows/validate.yml)




## 预览
### ATT&CK 覆盖范围 (MITRE Navigator)
加载到 [MITRE ATT&CK Navigator](https://mitre-attack.github.io/attack-navigator/) 中(数据来自 [`attack-navigator/layer.json`](attack-navigator/layer.json))—— 该层级是由 [`scripts/generate_coverage.py`](scripts/generate_coverage.py) 从规则 YAML 自动生成的。

### L3 分诊仪表板(设计预览)
[`Workbooks/L3-Triage-Dashboard.json`](Workbooks/L3-Triage-Dashboard.json) 的静态渲染 —— 包含 KPI、严重程度环形图、最高频触发规则、ATT&CK 密度热力图、Top 实体和活动事件表。将此 JSON 部署到 Microsoft Sentinel 即可查看实时数据。

## 为什么会有这个项目
大多数公开的 Sentinel 内容要么 是单篇博客文章中手写的单个查询,要么 是包含数千条规则却缺乏筛选的完整 Microsoft 社区仓库。本工具包介于两者之间:提供了一套**聚焦且经过精心筛选的高信噪比检测规则**,这是 L3 分析师在第一天就会真正部署的,同时具备了生产级检测工程团队的工程严谨性(schema 验证、ATT&CK 映射、ART 测试)。
## 包含内容
| 领域 | 数量 | 文件夹 |
|---|---|---|
| 计划分析规则 | 12 | [`Detections/`](Detections/) |
| 搜寻查询 | 10 | [`Hunting Queries/`](Hunting%20Queries/) |
| Workbook(L3 分诊仪表板) | 1 | [`Workbooks/`](Workbooks/) |
| Logic App Playbook (SOAR) | 4 | [`Playbooks/`](Playbooks/) |
| ATT&CK Navigator 层级 | 1 | [`attack-navigator/`](attack-navigator/) |
| Atomic Red Team 映射 | 22 项测试 | [`tests/atomics.md`](tests/atomics.md) |
| 工作流文档(IR Runbook、分诊 SOP、升级矩阵、调优日志、SOAR 流程、成熟度评估) | 6 | [`docs/workflows/`](docs/workflows/) |
| CI 工作流(validate、PR diff 报告、release) | 3 | [`.github/workflows/`](.github/workflows/) |
| Sigma → KQL 转换器 | 1 | [`scripts/sigma_to_kql.py`](scripts/sigma_to_kql.py) |
### 覆盖范围快照
- **覆盖战术:** 初始访问、执行、持久化、权限提升、防御规避、凭证访问、发现、收集、命令与控制、数据渗出
- **覆盖技术:** 18 种独特的 ATT&CK 技术(参见 [`coverage.md`](coverage.md))
- **数据源:** Microsoft Entra ID、Microsoft 365 (Exchange、SharePoint、OAuth)、Microsoft Defender for Endpoint、Azure Activity、Azure Key Vault
## 规则一览
### 身份与云身份
- `EntraID_ImpossibleTravel.yaml` — 地理距离 + 时间差登录关联
- `EntraID_MFAFatigue.yaml` — 连续多次 MFA 提示后成功验证
- `EntraID_LegacyAuthSuccess.yaml` — 通过旧版协议成功进行身份验证
- `EntraID_ServicePrincipalCredAdd.yaml` — 在 CI/CD 允许列表之外为 SP 添加凭证
### Microsoft 365
- `M365_InboxRuleExfil.yaml` — 创建自动转发 / 删除的收件箱规则
- `M365_MassSharePointDownload.yaml` — 单个用户的异常文件下载量
- `M365_OAuthConsentSuspiciousApp.yaml` — 向未经验证的发布者授予具有高风险权限的同意
### 终端 (Defender for Endpoint)
- `MDE_LOLBin_Rundll32_Network.yaml` — rundll32 发起外部网络连接
- `MDE_MSHTA_RemoteScript.yaml` — mshta 执行远程 HTA/脚本
- `MDE_PowerShell_EncodedCommand.yaml` — 冗长的 Base64 -EncodedCommand 调用
### Azure 基础设施
- `Azure_NSG_OpenToInternet.yaml` — 将端口开放至 0.0.0.0/0 的 NSG 规则
- `Azure_KeyVault_SecretAccessSpike.yaml` — 单个身份的异常机密访问量
## 搜寻查询 (10)
位于 [`Hunting Queries/`](Hunting%20Queries/) 中基于假设的搜寻。示例:
- 每个用户首次出现的 ASN(登录基线漂移)
- 每台设备父-子链中罕见出现的进程
- 向外部域的异常邮箱转发
- 从 `%TEMP%` 执行的未签名二进制文件
- 来自数据中心 ASN 的登录(Tor/VPS 代理)
## 部署
三种部署路径,按推荐顺序排列:
### 1. Sentinel Repositories (GitOps,推荐)
本仓库遵循官方的 `Azure/Azure-Sentinel` 文件夹结构,因此你可以直接连接它:
1. Sentinel → **Repositories** → **Add new**
2. 连接此 GitHub 仓库
3. 选择 `main` 分支
4. 每次推送时,Sentinel 都会拉取并部署所有 12 条规则 + 10 个搜寻查询 + 1 个 Workbook
文档:
### 2. 手动导入
每个 YAML 文件都是一个独立的 Sentinel 规则。将 `query:` 代码块粘贴到 Sentinel → Analytics → New scheduled rule 中,复制元数据,然后保存即可。
### 3. ARM / Bicep
Logic App Playbook 以 ARM 模板的形式提供,位于 [`Playbooks/AutoEnrichDisableUser/azuredeploy.json`](Playbooks/AutoEnrichDisableUser/azuredeploy.json)。通过以下方式部署:
```
az deployment group create \
--resource-group \
--template-file Playbooks/AutoEnrichDisableUser/azuredeploy.json
```
### 免费层设置
你可以在全新的 Azure 租户上以 **$0 成本** 在前 30 天内运行完整的工具包。
- **快速入门:** [`docs/30-minute-walkthrough.md`](docs/30-minute-walkthrough.md) — 逐步点击指导,耗时 30 分钟,生成真实的 Sentinel 截图
- **参考文档:** [`docs/free-tier-setup.md`](docs/free-tier-setup.md) — 节奏更慢地详细解释每个组件
## 验证 (CI)
GitHub Actions 在每次 PR 时运行([`.github/workflows/validate.yml`](.github/workflows/validate.yml)):
1. **YAML schema lint** — 每条规则都符合 Sentinel 规则 schema
2. **KQL 解析检查** — 查询语句没有语法错误
3. **ATT&CK ID 验证** — 每个 `tactics:` / `relevantTechniques:` 的值都存在于当前的 ATT&CK 矩阵中
4. **Markdown 链接检查** — 没有损坏的内部链接
## 使用 Atomic Red Team 进行测试
每个检测都映射到一个或多个应触发该检测的 [Atomic Red Team](https://github.com/redcanaryco/atomic-red-team) 测试。参见 [`tests/atomics.md`](tests/atomics.md)。
示例:
```
T1059.001 (PowerShell) → MDE_PowerShell_EncodedCommand.yaml → Atomic Test-1, Test-3
```
## 仓库布局
```
sentinel-detection-engine/
├── Detections/ # 12 analytic rules (Sentinel YAML schema)
├── Hunting Queries/ # 10 hunts
├── Workbooks/
│ └── L3-Triage-Dashboard.json
├── Playbooks/
│ └── AutoEnrichDisableUser/
│ ├── azuredeploy.json
│ └── README.md
├── attack-navigator/
│ └── layer.json # drop into mitre-attack.github.io/attack-navigator
├── tests/
│ └── atomics.md # ART test ID → rule mapping
├── scripts/
│ └── generate_coverage.py # regenerates coverage.md + Navigator layer
├── docs/
│ ├── free-tier-setup.md
│ └── images/
├── .github/workflows/
│ └── validate.yml
├── coverage.md # auto-generated ATT&CK matrix
└── README.md
```
## SOAR 编排
本工具包附带四个 Logic App Playbook。它们组合成了记录在 [`docs/workflows/soar-decision-flow.md`](docs/workflows/soar-decision-flow.md) 中的决策管道:
| Playbook | 触发器 | 动作 |
|---|---|---|
| [AutoEnrichDisableUser](Playbooks/AutoEnrichDisableUser/) | 任何带有 IP 实体的事件 | VT + AbuseIPDB 富化;在置信度高于阈值时禁用 Entra ID 用户 |
| [IsolateDeviceMDE](Playbooks/IsolateDeviceMDE/) | 来自 `MDE_*` 规则的事件 | 通过 Defender for Endpoint 对设备进行网络隔离 |
| [BlockIPAzureFirewall](Playbooks/BlockIPAzureFirewall/) | TI 标记的事件 | 将公共 IP 添加到 Azure Firewall 的拒绝 IP 组 |
| [CreateServiceNowTicket](Playbooks/CreateServiceNowTicket/) | 严重程度为高 / 危急 | 打开一个严重级别映射的 INC 工单,并进行交叉链接 |
## SOC 工作流文档
本仓库不仅仅是规则列表 —— 它还附带了 L3 分析师所需的文档:
- [事件响应 Runbook](docs/workflows/ir-runbook.md) — 应用于本工具包的 SANS / NIST 800-61r2 阶段
- [分诊 SOP](docs/workflows/triage-sop.md) — 带有处理标签的 L1 → L2 → L3 移交流程
- [升级矩阵](docs/workflows/escalation-matrix.md) — 通知谁、何时通知以及如何通知
- [SOAR 决策流程](docs/workflows/soar-decision-flow.md) — Mermaid 图表 + 针对每条规则的自动化矩阵
- [检测调优日志](docs/workflows/tuning-log.md) — 带有 PR 链接的开启和关闭的调优条目
- [成熟度自我评估](docs/workflows/maturity-assessment.md) — 10 维 SOC 成熟度评分
## 检测生命周期 (CI / CD)
| 工作流 | 触发器 | 功能 |
|---|---|---|
| [validate](.github/workflows/validate.yml) | 每次推送 + PR | yamllint、schema + UUID + ATT&CK + KQL 完整性检查、覆盖率漂移检查 |
| [pr-detection-report](.github/workflows/pr-detection-report.yml) | PR 涉及检测文件时 | 发布一条置顶的 PR 评论,总结规则差异、版本号提升和 lint 警告 |
| [release](.github/workflows/release.yml) | 推送 `v*.*.*` 标签时 | 验证,将规则打包为带有 SHA-256 校验的 tarball,生成更新日志,并发布 GitHub Release |
## 导入 Sigma 规则
对于来自公共 Sigma 项目的临时规则,可以使用捆绑的转换器:
```
python scripts/sigma_to_kql.py path/to/proc_creation_susp_powershell.yml
```
输出是一个可手动调整的 Defender XDR 风格 KQL 块,其中 ATT&CK 标签作为注释保留。这不是一个完整的 pySigma 替代品 —— 它主要处理常见的 `process_creation`、`network_connection`、`image_load` 和 `registry_event` 类别。
## 路线图
- [ ] 添加 AWS GuardDuty / CloudTrail 类似工具包(`aws-hunt-pack`)
- [ ] 添加 Defender for Cloud Apps (MCAS) 覆盖
- [ ] 针对某个检测端到端触发的 Notebook(`.ipynb`)IR Playbook
- [ ] 用于提升可移植性的 Sigma → KQL 转换映射
## 许可证
[MIT](LICENSE)
📷 实时 Sentinel 门户截图(在我通过30 分钟演练完成租户部署后添加)
该演练会在真实的 M365 开发租户 + Azure 免费试用 + MDE 试用环境中生成以下内容。每一项都是通过运行触发相应规则的 Atomic Red Team 测试来捕获的: - `01-sentinel-overview.png` — Sentinel 工作区概览 - `02-data-connectors.png` — 数据连接器页面(包含 ≥ 4 个已连接的数据源) - `03-analytics-rules.png` — 分析规则列表(包含 12 个已部署的检测规则) - `05-incident-list.png` — 来自 Atomic Red Team 测试的真实事件 - `06-investigation-graph.png` — 调查实体图 - `07-workbook-live.png` — 针对实时数据运行的 Workbook标签:AMSI绕过, ATT&CK Navigator, Azure安全, CI验证, Cloudflare, Defender XDR, Detection-as-Code, IP 地址批量处理, KQL, L3安全分析, M365安全, Microsoft Sentinel, MITRE ATT&CK, Playbook, SOAR, 分析查询, 威胁检测, 子域名变形, 安全仪表盘, 安全信息与事件管理, 安全运营中心, 开源框架, 微软安全, 持续集成, 插件系统, 搜索引擎爬取, 无线安全, 检测即代码, 网络安全, 网络映射, 自动化防御, 逆向工具, 隐私保护