Ahmad-Obeid7/Microsoft-sentinel-soc-lab

GitHub: Ahmad-Obeid7/Microsoft-sentinel-soc-lab

基于 Microsoft Sentinel 的 SOC 实验室项目,通过 SSH 认证日志完成从 KQL 检测工程到事件调查与分类的完整安全运营流程实践。

Stars: 0 | Forks: 0

# Microsoft Sentinel SOC 检测与分类实验室 ## 项目摘要 我部署了 Microsoft Sentinel,摄取了 292 个受控的 SSH 身份验证事件,并开发了九个 KQL 威胁狩猎和调查查询。 我将检测逻辑转换为计划分析规则,并调查了由此产生的三个事件: - 已确认的 SSH 账户入侵 - 密码喷射尝试 - 良性的自动备份失败 该项目证明,告警数量本身并不能决定严重程度:数量最高的来源是良性的,而数量较低的来源却成功入侵了一个账户。 ## 快速链接 - [查看 KQL 查询](queries/) - [阅读检测与响应报告](report/detection-and-response-report.md) - [查看调查证据](screenshots/) - [查看 Sentinel 工作簿](#sentinel-workbook) ## 主要成果 该检测识别出了三个可疑的源 IP 地址: | 源 IP | 活动 | 结论 | |---|---|---| | `203.0.113.77` | 多次失败后成功进行 SSH 登录并访问了 `/etc/shadow` | 真阳性 — 确认入侵 | | `198.51.100.23` | 一个外部源针对 11 个不同的账户 | 真阳性 — 密码喷射尝试 | | `10.20.14.9` | 内部备份服务每 60 秒重试一次过期的密码 | 良性阳性 — 配置错误的备份作业 | ## 工具与技能 **SIEM 与云** - Microsoft Sentinel - Azure Log Analytics - Azure Monitor Logs Ingestion API - Data Collection Endpoints 和 Data Collection Rules **检测与调查** - Kusto Query Language - 威胁狩猎 - 计划分析规则 - 实体映射和告警分组 - 事件分类和定级 - 检测调优 - MITRE ATT&CK 映射 **报告与可视化** - Microsoft Sentinel Workbooks - 基于证据的事件报告 - 补救建议 - Azure 资源清理 **辅助工具** - PowerShell - Azure Cloud Shell - Git 和 GitHub ## 架构与工作流 该项目遵循了完整的 SOC 生命周期: ``` flowchart LR A[SSH Authentication Logs] --> B[Azure Logs Ingestion API] B --> C[Data Collection Endpoint] C --> D[Data Collection Rule] D --> E[Log Analytics Workspace] E --> F[Microsoft Sentinel] F --> G[KQL Threat Hunting] G --> H[Scheduled Analytics Rule] H --> I[Sentinel Incidents] I --> J[Investigation and Triage] J --> K[Classification and Closure] K --> L[Workbook Dashboard and Report] ``` ### 工作流 1. **摄取** — 将受控的 SSH 数据集加载到自定义的 `MeridianLogs_CL` 表中。 2. **检查** — 审查了原始字段和最初的身份验证事件。 3. **狩猎** — 使用 KQL 提取源 IP 地址、用户名和身份验证结果。 4. **检测** — 为在 10 分钟时间窗口内产生五次以上 SSH 登录失败的源创建了计划规则。 5. **告警** — 将源 IP 映射为实体并生成独立的 Sentinel 事件。 6. **分类** — 调查每个事件,以确定身份验证是否成功以及随后发生了什么。 7. **定级** — 将两个事件作为真阳性关闭,一个作为良性阳性关闭。 8. **可视化** — 构建了一个 Sentinel 工作簿,显示了一段时间内的失败登录和顶级源 IP。 9. **报告** — 记录了证据、MITRE ATT&CK 映射、补救措施和检测局限性。 10. **清理** — 在保存项目证据后删除了 Azure 资源组。 ## 我构建的内容 - 连接到 Azure Log Analytics 工作区的 Microsoft Sentinel 部署 - 包含 SSH 身份验证活动的自定义 Log Analytics 表 - Data Collection Endpoint 和 Data Collection Rule - 九个记录在案的 KQL 威胁狩猎和调查查询 - 计划的暴力破解分析规则 - IP 实体映射和告警分组 - 三个经过全面调查的 Sentinel 事件 - 用于身份验证监控的工作簿仪表板 - 详细的检测和响应报告 - 用于作品集发布的已脱敏证据集 ## 数据摄取故障排除 最初的传统摄取脚本返回了成功的 HTTP 响应,但并未填充自定义表。 为了解决这个问题,我执行了以下操作: 1. 验证了工作区 ID 和目标表。 2. 确认自定义表已成功预配。 3. 测试了单个受控记录的摄取。 4. 将表从经典摄取迁移到基于 Data Collection Rule 的摄取。 5. 创建了 Data Collection Endpoint 和 Data Collection Rule。 6. 分配了所需的 Azure 角色。 7. 通过 Azure Monitor API 进行了身份验证。 8. 使用当前的 Logs Ingestion API 成功摄取了数据集。 此故障排除提供了有关 Azure 身份验证、权限、自定义表和现代日志摄取管道的实践经验。 ## 检测证据 ### 识别出的可疑源 第一个狩猎查询按源 IP 对失败的 SSH 身份验证尝试进行了分组。有三个源的活跃度显著高于正常的背景活动。 ![按源 IP 显示的失败登录](https://static.pigsec.cn/wp-content/uploads/repos/cas/a4/a477b402babf122d17dfcc9f5b11a0014cfb84d33b3a56301e5b0e259cf5358e.png) ### 计划分析规则 狩猎逻辑被转换为已启用的 Microsoft Sentinel 计划分析规则,严重程度为中级。 ![已启用的 Sentinel 分析规则](https://static.pigsec.cn/wp-content/uploads/repos/cas/30/307d3cdeafc9e713f27d870d75088ced032a161782fbbdff88ee7f6dffc528ea.png) ### 生成的事件 该规则为三个可疑的源 IP 地址生成了独立的事件。 ![生成的 Sentinel 事件](https://static.pigsec.cn/wp-content/uploads/repos/cas/91/9138a75e0155499650d4a47ceb49deb2071e74679abaae21cf385dc1c7bbe225.png) ### 确认的账户入侵 对 `203.0.113.77` 的调查显示,在多次身份验证尝试失败后,成功通过 SSH 登录到了 `opsadmin` 账户。 ![失败尝试后接着成功登录](https://static.pigsec.cn/wp-content/uploads/repos/cas/b6/b64af72128084f5c9b9557f2ac50a19c4ca05ab4c380a0e8ff72d01898b6fe9c.png) 调查还发现了入侵后对 Linux 密码哈希文件的访问。 ![入侵后对 shadow 文件的访问](https://static.pigsec.cn/wp-content/uploads/repos/cas/ba/ba42c9fc46a65216b49d4763278364543f9154b9c0a0546ae2a8e86a74454ae2.png) ### 密码喷射尝试 源 `198.51.100.23` 尝试针对 11 个不同的用户名进行身份验证,但没有成功登录。 ![密码喷射证据](https://static.pigsec.cn/wp-content/uploads/repos/cas/76/7655b06ca80856cdcc597b7e3be2fb08f233c0d1e876aaef145746bb80150bf9.png) ### 良性备份服务活动 内部源 `10.20.14.9` 针对凭据 `svc-backup` 产生了 30 次失败尝试,没有成功的身份验证,且尝试之间的时间间隔正好为 60 秒。 ![良性备份作业证据](https://static.pigsec.cn/wp-content/uploads/repos/cas/73/73ee36ded4173772e04f1a34c24e02c5ef35b68be0b015d78e50a8d51bb5e136.png) ### 已完成的事件队列 所有主要事件都经过了调查、分类、记录和关闭。 ![已完成的事件队列](https://static.pigsec.cn/wp-content/uploads/repos/cas/47/479e1fbe527f7de05ed258445cc2cc9d7c314c310df2722e558ca1bbf0cface0.png) ### Sentinel 工作簿 创建了一个自定义工作簿,以可视化一段时间内的 SSH 失败登录,并对顶级源 IP 地址进行排名。 ![Sentinel 身份验证仪表板](https://static.pigsec.cn/wp-content/uploads/repos/cas/92/927d62f9118cca034dd4e2cb14b4c1cb99b8da105268a2a3b2e4bb36691c5d17.png) ## KQL 查询 项目中使用的完整 KQL 可在 [`queries`](queries/) 目录中找到。 | 文件 | 用途 | |---|---| | [`01-raw-log-inspection.kql`](queries/01-raw-log-inspection.kql) | 检查自定义表结构和示例原始事件 | | [`02-failed-logins-by-ip.kql`](queries/02-failed-logins-by-ip.kql) | 按源 IP 计算失败登录次数并进行排名 | | [`03-brute-force-detection.kql`](queries/03-brute-force-detection.kql) | 检测 10 分钟时间窗口内超过五次的失败 | | [`04-confirmed-compromise-investigation.kql`](queries/04-confirmed-compromise-investigation.kql) | 重构失败后接着成功身份验证的过程 | | [`05-post-compromise-shadow-access.kql`](queries/05-post-compromise-shadow-access.kql) | 识别对 `/etc/shadow` 的访问 | | [`06-password-spray-investigation.kql`](queries/06-password-spray-investigation.kql) | 提取密码喷射所针对的用户名 | | [`07-benign-backup-investigation.kql`](queries/07-benign-backup-investigation.kql) | 总结自动备份的重试模式 | | [`08-failed-logins-over-time.kql`](queries/08-failed-logins-over-time.kql) | 为工作簿身份验证时间线提供数据支持 | | [`09-top-source-ips.kql`](queries/09-top-source-ips.kql) | 为工作簿源 IP 排名提供数据支持 | ## 调查报告 完整的检测与响应报告包含事件证据、分析师决策、MITRE ATT&CK 映射、补救建议、检测局限性和经验教训。 [阅读完整的检测与响应报告](report/detection-and-response-report.md) ## MITRE ATT&CK 映射 | 技术 | 名称 | 项目证据 | |---|---|---| | `T1110` | 暴力破解 | 针对账户 `opsadmin` 的重复失败 SSH 登录 | | `T1110.003` | 密码喷射 | 一个外部 IP 尝试针对 11 个不同用户名进行身份验证 | | `T1078` | 有效账户 | 攻击者使用账户 `opsadmin` 成功进行了身份验证 | | `T1003.008` | 操作系统凭据转储:`/etc/passwd` 和 `/etc/shadow` | 被入侵的账户在身份验证后访问了 `/etc/shadow` | ## 检测局限性 计划分析规则在识别集中的登录失败活动方面非常有效,但它存在一些局限性: - 低速且慢速的攻击可能会保持在 10 分钟内失败五次以上的阈值之下。 - 基于 IP 的分组可能会漏掉轮换源地址的攻击者。 - 共享代理或 NAT 网关可能会导致多个系统显示在同一个源 IP 下。 - 该规则无法独立判断活动是恶意的还是良性的。 - 该规则不会将失败的尝试与随后的成功登录直接相关联。 - 该实验室使用的是静态导入的数据集,而不是持续的生产数据连接器。 - 对相同静态记录的重复评估会产生重复的事件。 - 可用的遥测数据仅限于一台虚构的 Linux 服务器。 生产环境的实施应将此规则与身份、端点、防火墙、网络和云审计日志相结合。 ## 我在生产环境中会做的改进 - 创建一个更高严重性的规则,针对重复失败后接着成功身份验证的情况。 - 基于一个源所针对的唯一账户数量添加密码喷射规则。 - 添加使用更长分析周期的低速且慢速攻击检测。 - 使用历史身份验证基线来调整阈值。 - 使用连续的数据连接器代替手动摄取日志。 - 添加告警抑制和去重。 - 将身份验证事件与进程执行和端点遥测相关联。 - 使用威胁情报信息丰富源 IP 实体。 - 仅在适当的验证后才自动执行遏制措施。 - 通过审查假阳性和假阴性来跟踪检测性能。 ## 仓库结构 ``` microsoft-sentinel-soc-lab/ ├── README.md ├── .gitignore ├── queries/ │ ├── 01-raw-log-inspection.kql │ ├── 02-failed-logins-by-ip.kql │ ├── 03-brute-force-detection.kql │ ├── 04-confirmed-compromise-investigation.kql │ ├── 05-post-compromise-shadow-access.kql │ ├── 06-password-spray-investigation.kql │ ├── 07-benign-backup-investigation.kql │ ├── 08-failed-logins-over-time.kql │ └── 09-top-source-ips.kql ├── report/ │ └── detection-and-response-report.md └── screenshots/ ├── 01-sentinel-enabled.png ├── 02-log-ingestion-confirmed.png ├── 03-raw-log-sample.png ├── 04-failed-logins-by-source-ip.png ├── 06-analytics-rule-enabled.png ├── 07-sentinel-incidents-generated.png ├── 08-incident-details-confirmed-compromise.png ├── 09-confirmed-compromise-success-login.png ├── 10-post-compromise-shadow-file-access.png ├── 11-confirmed-compromise-closed.png ├── 13-password-spray-evidence.png ├── 14-password-spray-closed.png ├── 15-incident-details-benign-backup.png ├── 16-benign-backup-job-evidence.png ├── 17-benign-backup-incident-closed.png ├── 18-incidents-triaged-and-closed.png ├── 19-sentinel-workbook-dashboard.png └── 20-resource-group-deleted.png ``` ## 负责任的使用与署名 该项目是在授权的实验室环境中完成的,使用了虚构的银行业务场景和受控的训练数据。 最初的场景和样本数据集是通过 MyFirstHack Mentorship Weekly Project 05 材料提供的。Azure 部署、摄取故障排除、KQL 分析、检测配置、事件调查、书面报告和脱敏截图均作为我自己实验工作的一部分完成。 本仓库不包含原始数据集、培训指南、摄取脚本、凭据和未经脱敏的证据。 ## 云清理 在保存了必要的项目证据后,删除了 Azure 资源组。 ![Azure 资源组已删除](https://static.pigsec.cn/wp-content/uploads/repos/cas/5d/5dcc4ade15310d36a66bf59b92f764afb4c31146f6f5a4586726fc19d28be157.png) 这删除了 Sentinel 部署、Log Analytics 工作区、自定义表、分析规则、事件、工作簿、Data Collection Endpoint 和 Data Collection Rule。 ## 核心要点 从这个项目中得到的最重要的教训是,告警数量并不等于严重性。 数量最高的来源是一个良性的备份过程,而数量较低的来源却成功入侵了一个账户并访问了敏感的凭据数据。因此,有效的 SOC 分析需要基于证据的调查、上下文推理和清晰的文档,而不是仅仅依赖于告警数量。
标签:AI合规, KQL, Microsoft Sentinel, 安全运营, 库, 应急响应, 扫描框架, 红队行动, 网络安全研究