CyberX-O/AZURE-SENTINEL-SOC-PROJECT-Part-2-

GitHub: CyberX-O/AZURE-SENTINEL-SOC-PROJECT-Part-2-

Azure Sentinel SOC实验室项目,提供MITRE ATT&CK映射和威胁情报集成。

Stars: 0 | Forks: 0

# Azure-Sentinel-SOC-项目-第2部分 Azure Sentinel SOC 实验室与 MITRE ATT&CK 映射及威胁情报集成 Azure Sentinel SOC 实验室 – MITRE ATT&CK 映射及威胁情报集成 项目摘要 # Azure 安全项目 2:MITRE ATT&CK 映射与网络威胁情报实验室 Azure Sentinel 安全项目的延续。本项目增加了模拟攻击的 MITRE ATT&CK 映射、将网络威胁情报集成到 Microsoft Sentinel、Sentinel 工作簿仪表板以及与 ITIL 对齐的事件响应工作流程。 **角色:** 云安全分析师 **平台:** Microsoft Azure **方法:** Azure Portal(GUI)+ Azure Cloud Shell(仅 SSH 和模拟) ## 本项目展示的内容 | 技能 | 证据 | |---|---| | MITRE ATT&CK 框架 | 将 3 种真实技术映射到实验室活动中 | | 威胁情报集成 | 上传 IOCs 并创建威胁匹配规则 | | KQL 查询编写 | 检测规则和调查查询 | | Sentinel 工作簿 | 包含 3 个图表的可视化攻击仪表板 | | ITIL 事件响应 | 全生命周期文档化 | | RBAC 和最小权限 | 测试并验证标准用户访问 | ## 仓库结构 ``` azure-sentinel-soc-project/ ├── README.md ├── PROJECT2.md ├── Azure_Sentinel_Project.docx ├── Azure_Sentinel_Project_2.docx ├── docs/ │ ├── mitre-mapping.md │ └── threat-intelligence.md └── screenshots/ ├── p2-01-brute-force-incident.png ├── p2-02-brute-force-logs.png ├── p2-03-vm-restart-denied.png ├── p2-05-user-defender-view.png ├── p2-06-nsg-open-port.png ├── p2-07-nsg-restricted.png ├── p2-08-nsg-block-malicious-ip.png ├── p2-09-threat-intel-enabled.png ├── p2-10-threat-indicators-uploaded.png ├── p2-11-threat-match-rule.png ├── p2-12-workbook-dashboard.png └── p2-13-incident-closed.png ``` ## 第 1 部分:MITRE ATT&CK 映射 ### 模拟的技术 | 技术 | 名称 | 战术 | 实验室中的位置 | |---|---|---|---| | T1110 | 破解密码 | 凭据访问 | Linux VM 上的 SSH 失败登录 | | T1078 | 有效账户 | 初始访问 | Azure AD 标准用户登录 | | T1190 | 利用面向公众的应用程序 | 初始访问 | NSG 中的开放 SSH 端口 | ### 第 1 步 - T1110:破解密码攻击模拟 从 Azure Cloud Shell 登录到 Linux VM,并运行以下命令以模拟 20 次失败的登录尝试: ``` for i in {1..20}; do logger -p auth.info "Failed password for invaliduser from 192.168.1.1 port 22 ssh2"; done ``` 已验证日志出现在 Microsoft Sentinel 中: ``` Syslog | where SyslogMessage contains "Failed password" | where TimeGenerated > ago(15m) | take 20 ``` ![Sentinel 中的破解密码日志](https://raw.githubusercontent.com/CyberX-O/AZURE-SENTINEL-SOC-PROJECT-Part-2-/main/project2-screenshots/p2-02-brute-force-logs.png) ![Sentinel 生成的事件](https://raw.githubusercontent.com/CyberX-O/AZURE-SENTINEL-SOC-PROJECT-Part-2-/main/project2-screenshots/p2-01-brute-force-incident.png) ### 第 2 步 - T1078:有效账户滥用模拟 1. 打开一个私有浏览器窗口 2. 使用标准用户帐户登录 Azure Portal 3. 尝试访问 Sentinel、Defender for Cloud 和虚拟机 4. 尝试重启 VM — 访问被拒绝 发现: | 操作 | 结果 | |---|---| | 查看Sentinel 事件 | 允许 — 安全读取角色 | | 查看Defender 建议 | 允许 — 安全读取角色 | | 重启 VM | 拒绝 — 未分配 VM 角色 | | 创建分析规则 | 拒绝 — 只读访问 | 这证实了 RBAC 和最小权限原则正在正确工作。 ![VM 重启被拒绝](https://raw.githubusercontent.com/CyberX-O/AZURE-SENTINEL-SOC-PROJECT-Part-2-/main/project2-screenshots/p2-03-vm-restart-denied.png) ![标准用户 Sentinel 查看](https://raw.githubusercontent.com/CyberX-O/AZURE-SENTINEL-SOC-PROJECT-Part-2-/main/project2-screenshots/p2-04-user-sentinel-view.png) ![标准用户 Defender 查看](https://raw.githubusercontent.com/CyberX-O/AZURE-SENTINEL-SOC-PROJECT-Part-2-/main/project2-screenshots/p2-05-user-defender-view.png) 检查 Sentinel SigninLogs 以查找标准用户登录活动: ``` SigninLogs | where UserPrincipalName contains "SOCAnalyst" | where TimeGenerated > ago(1h) | take 10 ``` ### 第 3 步 - T1190:面向公众的应用程序暴露 1. 记录 SSH 端口 22 通过 NSG 对互联网开放 2. 限制规则仅允许分析师 IP 访问 SSH 3. 添加一个 Deny 规则以阻止模拟的恶意 IP ![NSG 开放端口 22](https://raw.githubusercontent.com/CyberX-O/AZURE-SENTINEL-SOC-PROJECT-Part-2-/main/project2-screenshots/p2-06-nsg-open-port.png) ![NSG 限制为分析师 IP](https://raw.githubusercontent.com/CyberX-O/AZURE-SENTINEL-SOC-PROJECT-Part-2-/main/project2-screenshots/p2-07-nsg-restricted.png) 通过 NSG 阻止了恶意 IP: | 字段 | 值 | |---|---| | 源 | IP 地址 | | 源 IP | 192.168.1.1 | | 目标端口 | * | | 协议 | 任何 | | 操作 | Deny | | 优先级 | 100 | | 名称 | Block-Malicious-IP | ![NSG 阻止恶意 IP](https://raw.githubusercontent.com/CyberX-O/AZURE-SENTINEL-SOC-PROJECT-Part-2-/main/project2-screenshots/p2-08-nsg-block-malicious-ip.png) ## 第 2 部分:网络威胁情报实验室 ### 第 1 步 - 在 Sentinel 中启用威胁情报 1. 导航到 Sentinel -> 数据连接器 2. 启用威胁情报连接器 3. 导航到 Sentinel -> 威胁情报以验证 ![启用威胁情报](https://raw.githubusercontent.com/CyberX-O/AZURE-SENTINEL-SOC-PROJECT-Part-2-/main/project2-screenshots/p2-09-threat-intel-enabled.png) ### 第 2 步 - 上传威胁指标 创建包含恶意 IP 和域的 CSV 文件并将其上传到 Sentinel: ``` Indicator,Type,Description 192.168.1.100,IP,Known malicious IP - brute force source 10.0.0.99,IP,Suspicious internal scanner malicious-site.com,Domain,Known phishing domain evil-malware.net,Domain,Known malware C2 server ``` ![上传威胁指标](https://raw.githubusercontent.com/CyberX-O/AZURE-SENTINEL-SOC-PROJECT-Part-2-/main/project2-screenshots/p2-10-threat-indicators-uploaded.png) ### 第 3 步 - 创建威胁匹配检测规则 导航到 Sentinel -> 分析 -> + 创建 -> 定时查询规则 | 字段 | 值 | |---|---| | 名称 | 威胁情报 IP 匹配 | | 严重性 | 高 | | 战术 | 命令和控制 | | 每 | 5 分钟 | | 查找最后 | 1 小时 | KQL 查询: ``` ThreatIntelligenceIndicator | where Active == true | project NetworkIP, Description, ExpirationDateTime | take 20 ``` ![威胁匹配分析规则](https://raw.githubusercontent.com/CyberX-O/AZURE-SENTINEL-SOC-PROJECT-Part-2-/main/project2-screenshots/p2-11-threat-match-rule.png) ### 第 4 步 - 构建 Sentinel 工作簿仪表板 在 Sentinel -> 工作簿中创建了一个包含 3 个可视化的工作簿。 组件 1 - 最常攻击的 IP 地址(柱状图): ``` Syslog | where SyslogMessage contains "Failed password" | extend AttackerIP = extract(@"from (\S+)", 1, SyslogMessage) | summarize Attempts = count() by AttackerIP | order by Attempts desc | take 10 ``` 组件 2 - 随时间变化的失败登录(折线图): ``` Syslog | where SyslogMessage contains "Failed password" | summarize FailedLogins = count() by bin(TimeGenerated, 1h) | order by TimeGenerated asc ``` 组件 3 - 成功与失败登录(饼图): ``` Syslog | where Facility == "auth" or Facility == "authpriv" | extend LoginResult = iif(SyslogMessage contains "Accepted", "Successful", "Failed") | summarize Count = count() by LoginResult ``` ![Sentinel 工作簿仪表板](https://raw.githubusercontent.com/CyberX-O/AZURE-SENTINEL-SOC-PROJECT-Part-2-/main/project2-screenshots/p2-12-workbook-dashboard.png) ### 第 5 步 - ITIL 事件响应工作流程 | ITIL 阶段 | 执行的操作 | |---|---| | 检测 | Sentinel 分析规则在失败的密码输入上触发 | | 记录 | Azure Monitor 将所有身份验证日志存储在日志分析工作区中 | | 调查 | KQL 查询确定了攻击 IP 并确认没有未经授权的访问 | | 响应 | 通过 NSG Deny 规则阻止了恶意 IP(192.168.1.1) | | 恢复 | 确认 VM 未被入侵,服务正常运行 | | 经验教训 | 更新 NSG 规则,限制 SSH 访问,记录发现 | ![事件关闭](https://raw.githubusercontent.com/CyberX-O/AZURE-SENTINEL-SOC-PROJECT-Part-2-/main/project2-screenshots/p2-13-incident-closed.png) ## 遇到的障碍和解决方案 | 障碍 | 解决方案 | |---|---| | SSH 连接频繁超时 | NSG 规则中存在旧 IP — 更新为当前 IP | | VM 无法正确启动 | 删除并重新创建 VM | | VNet 未出现在 VM 网络选项卡中 | 区域不匹配 — 将 VM 区域与 VNet 区域匹配 | | 标准用户可以重启 VM | 用户拥有过多的角色 — 删除了贡献者角色 | | Run Command 中的 sudo 不起作用 | Run Command 在受限容器中运行 — 删除了 sudo | ## MITRE ATT&CK 摘要 | 技术 | 名称 | 模拟 | 检测 | 响应 | |---|---|---|---|---| | T1110 | 破解密码 | 是 | Sentinel 事件 | 通过 NSG 阻止 IP | | T1078 | 有效账户 | 是 | SigninLogs | MFA 和 RBAC 审查 | | T1190 | 面向公众的应用程序 | 是 | Defender for Cloud | 限制 NSG 规则 | ## 关键经验教训 1. RBAC 必须在订阅级别分配 — 仅资源级别的 RBAC 不会显示门户资源 2. 动态 IP 导致 NSG 锁定 — 在 SSH 故障排除之前始终验证您的当前 IP 3. Run Command 不支持 sudo — Azure 受限容器环境的限制 4. 在实验室环境中重新创建损坏的 VM 比故障排除失败的启动更快 5. LOG_DEBUG 对于捕获 Syslog 中的所有身份验证设施事件至关重要 ## 项目清单 | 任务 | 方法 | 状态 | |---|---|---| | T1110 破解密码模拟和检测 | Cloud Shell + Sentinel | 完成 | | T1078 有效账户模拟 | Azure AD + Portal | 完成 | | T1190 公开暴露文档 | NSG + Portal | 完成 | | 通过 NSG 阻止恶意 IP | Portal | 完成 | | 在 Sentinel 中启用威胁情报 | Portal | 完成 | | 上传 threat-indicators.csv | Portal | 完成 | | 创建威胁匹配检测规则 | Portal + KQL | 完成 | | 构建 Sentinel 工作簿仪表板 | Portal + KQL | 完成 | | ITIL 事件响应文档化 | 文档 | 完成 | | 创建 docs/mitre-mapping.md | GitHub | 完成 | | 创建 docs/threat-intelligence.md | GitHub | 完成 |