edwinnava/microsoft-sentinel-soc-lab

GitHub: edwinnava/microsoft-sentinel-soc-lab

该项目是一个基于 Microsoft Sentinel 构建的云端 SOC 模拟实验环境,用于展示如何利用真实身份遥测数据进行检测规则开发、攻击模拟验证和安全事件响应。

Stars: 0 | Forks: 0

# Microsoft Sentinel SOC 实验环境 这是一个基于 Microsoft Sentinel 构建的云端安全运营中心 (SOC) 模拟环境,展示了如何使用来自 Microsoft Entra ID 的真实身份遥测数据进行检测工程、事件响应和安全监控。 ## 项目概述 本项目模拟了真实 SOC 的运作方式——从日志接入和自定义检测规则创建,一直到事件调查和仪表盘报告。所有检测均通过对实时 Azure 租户进行模拟攻击活动进行了验证。 **展示的技能:** - SIEM 部署与配置 - 使用 KQL (Kusto Query Language) 进行检测工程 - 事件调查与实体关联 - 攻击模拟(暴力破解、不可能旅行) - 使用 Sentinel Workbooks 创建 SOC 仪表盘 ## 环境 | 组件 | 详情 | |-----------|---------| | SIEM 平台 | Microsoft Sentinel | | 身份提供者 | Microsoft Entra ID (P2) | | Log Analytics Workspace | soc-law-edwin (East US) | | 接入的日志类型 | SigninLogs, AuditLogs, SecurityAlert | | 租户 | Nava Security Inc | ## 构建的检测 ### 1. 暴力破解登录检测 **严重程度:** 中 **逻辑:** 检测在 5 分钟时间窗口内,来自同一 IP 地址针对同一账户的 5 次或更多失败身份验证尝试(结果代码 50126)。 ``` SigninLogs | where TimeGenerated > ago(5m) | where ResultType == 50126 | summarize FailedAttempts = count() by IPAddress, UserPrincipalName | where FailedAttempts >= 5 ``` | 设置 | 值 | |---------|-------| | 运行频率 | 每 5 分钟 | | 回溯窗口 | 5 分钟 | | 警报阈值 | 结果数大于 0 | | 实体映射 | 账户 → UserPrincipalName, IP → IPAddress | | 事件创建 | 已启用 | ### 2. 不可能旅行检测 **严重程度:** 高 **逻辑:** 检测在同一账户在 60 分钟时间窗口内,从不同地理位置成功登录的情况——这种模式与物理旅行不符,通常与凭据泄露有关。 ``` let timeframe = 1h; SigninLogs | where TimeGenerated > ago(timeframe) | where ResultType == 0 | project UserPrincipalName, TimeGenerated, IPAddress, Location | sort by UserPrincipalName asc, TimeGenerated asc | extend prevTime = prev(TimeGenerated), prevIP = prev(IPAddress), prevLocation = prev(Location) | where UserPrincipalName == prev(UserPrincipalName) | extend timeDiff = datetime_diff("minute", TimeGenerated, prevTime) | where timeDiff between (1 .. 60) | where IPAddress != prevIP | where Location != prevLocation ``` | 设置 | 值 | |---------|-------| | 运行频率 | 每 5 分钟 | | 回溯窗口 | 1 小时 | | 警报阈值 | 结果数大于 0 | | 实体映射 | 账户 → UserPrincipalName, IP → IPAddress | | 事件创建 | 已启用 | ## MITRE ATT&CK 映射 | 检测规则 | 战术 | 技术 | 技术 ID | |----------------|--------|-----------|--------------| | 暴力破解登录检测 | 凭据访问 | 暴力破解 | T1110 | | 不可能旅行检测 | 初始访问 | 有效账户 | T1078 | | 不可能旅行检测 | 防御规避 | 使用备用身份验证材料 | T1550 | ## 分析规则 这两条规则均作为自定义的计划分析规则部署,并启用了实体映射和自动化事件创建。 ![分析规则](https://raw.githubusercontent.com/edwinnava/microsoft-sentinel-soc-lab/main/Screenshots/AnalyticRules.png) ## 攻击模拟 ### 暴力破解模拟 通过无痕浏览器会话针对 socadmin 账户生成了失败登录尝试。这些尝试记录在 Entra ID 结果代码 50126 下,并在一个运行周期内被检测规则捕获。 ### 不可能旅行模拟 使用 Proton VPN 和 Tor Browser 在几分钟内从地理上相距甚远的位置生成了连续登录: | 会话 | 位置 | 结果代码 | |---------|----------|-------------| | 基线 | 美国 | 0 (成功) | | VPN | 新加坡 | 0 (成功) | | Tor | 波兰 | 0 (成功) | | VPN | 荷兰 | 0 (成功) | ## 生成的事件 两条自定义检测规则均被触发并在 Sentinel 中生成了事件。此外,Microsoft Defender 的内置威胁情报自动将 VPN 和 Tor 登录标记为匿名 IP 地址事件——这表明模拟活动在多个检测层产生了真实的安全信号。 ![事件列表](https://static.pigsec.cn/wp-content/uploads/repos/cas/bc/bc3e6f7d4c49855043d0838dbe2ee294e1b8b1687f57cd2ddde73621afd36c94.png) ### 暴力破解事件 事件图显示 socadmin 账户与攻击 IP 地址 (73.44.189.5) 相关联。活动选项卡在检测窗口内记录了 6 个警报事件。 ![暴力破解事件](https://static.pigsec.cn/wp-content/uploads/repos/cas/64/64723f96f2738bfe06ca0deb4d96c4878cf31bc3daa5d6ed0b599bf3fbc4549b.png) ### 不可能旅行事件 事件图显示 socadmin 账户在一个 19 分钟的时间窗口内(2026 年 3 月 19 日晚上 9:26 到 9:45)连接了来自不同国家的 4 个不同 IP 地址。 ![不可能旅行事件](https://static.pigsec.cn/wp-content/uploads/repos/cas/50/5095c36fa27d4bcab2876f3b63798d2ecbd780916278f654d065dbe526a39f89.png) ## SOC 运营仪表盘 使用 Microsoft Sentinel Workbooks 构建。涵盖了 SOC 分析师日常监控的四个核心可见性领域。 ![SOC 仪表盘](https://static.pigsec.cn/wp-content/uploads/repos/cas/16/16a54013c015ccf7f024d3c14bf45a8456d08ee32baf0c2f3bf014e0b3fc2fe9.png) ![警报严重程度](https://static.pigsec.cn/wp-content/uploads/repos/cas/8a/8a910ec7583d8f1f8f6bd986d04d463943fadb0fba50931e4f2e51f595312b4a.png) | 磁贴 | 描述 | |------|-------------| | 随时间变化的失败登录 | 显示每小时失败登录量的条形图。3 月 17 日和 3 月 19 日的两个明显峰值对应于暴力破解模拟会话。 | | 按国家/地区划分的登录位置 | 各国成功登录的分布情况:美国 (20)、波兰 (18)、新加坡 (6)、卢森堡 (3)、瑞士 (3)。反映了基线和 VPN/Tor 模拟活动。 | | 受攻击最多的用户 | 显示失败尝试次数最多的账户的网格。socadmin 记录了总共 28 次失败尝试。 | | 警报严重程度细分 | 16 个高严重性警报(不可能旅行)和 1 个中严重性警报(暴力破解)。 | ## 关键经验 **日志接入流水线验证** — SigninLogs 需要 Entra ID P2 许可证才能流入 Sentinel。如果没有它,连接器看起来已配置,但接收不到任何数据,需要主动排查以找出静默故障。 **检测窗口调优** — 最初的暴力破解规则使用了 5 分钟的回溯时间,但未能触发,因为攻击尝试跨越了更长的时间窗口。理解查询窗口与规则计划频率之间的关系对于实现可靠的检测至关重要。 **UI 时间选择器覆盖** — Sentinel 的时间范围选择器会覆盖 KQL 时间过滤器。在规则编辑器中返回零结果的查询实际上是有效的——是 UI 过滤器排除了相关的数据范围。 **地理数据限制** — 大多数登录事件的 LocationDetails.geoCoordinates 字段为空,导致无法进行地图可视化。这反映了真实环境中并非所有遥测字段都能被一致填充的限制。 **身份事件响应** — 主管理员账户上丢失的 MFA 设备需要创建辅助 Global Admin 来恢复租户访问权限——这是一个真实世界中的身份事件响应场景。 ## 仓库结构 ``` microsoft-sentinel-soc-lab/ ├── README.md ├── Detections/ │ ├── brute-force-detection.kql │ └── impossible-travel-detection.kql ├── Screenshots/ │ ├── AnalyticRules.png │ ├── BruteForceDetails.png │ ├── ImpossibleTravelDetails.png │ ├── Incident_Detection.png │ ├── SOCDash_1.png │ └── SocDash_2.png └── Documentation/ └── Sentinel_SOC_Project_Edwin_Nava.docx ``` ## 认证 - Microsoft SC-200: Microsoft Security Operations Analyst - Microsoft SC-900: Microsoft Security, Compliance, and Identity Fundamentals - CompTIA Security+ ## 联系方式 **Edwin Nava** 有志成为云端安全工程师 [LinkedIn](https://www.linkedin.com/in/edwinnava29/)
标签:KQL, Microsoft Sentinel, PB级数据处理, 安全运维, 安全运营, 扫描框架, 红队行动