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
```


### 第 2 步 - T1078:有效账户滥用模拟
1. 打开一个私有浏览器窗口
2. 使用标准用户帐户登录 Azure Portal
3. 尝试访问 Sentinel、Defender for Cloud 和虚拟机
4. 尝试重启 VM — 访问被拒绝
发现:
| 操作 | 结果 |
|---|---|
| 查看Sentinel 事件 | 允许 — 安全读取角色 |
| 查看Defender 建议 | 允许 — 安全读取角色 |
| 重启 VM | 拒绝 — 未分配 VM 角色 |
| 创建分析规则 | 拒绝 — 只读访问 |
这证实了 RBAC 和最小权限原则正在正确工作。



检查 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 阻止了恶意 IP:
| 字段 | 值 |
|---|---|
| 源 | IP 地址 |
| 源 IP | 192.168.1.1 |
| 目标端口 | * |
| 协议 | 任何 |
| 操作 | Deny |
| 优先级 | 100 |
| 名称 | Block-Malicious-IP |

## 第 2 部分:网络威胁情报实验室
### 第 1 步 - 在 Sentinel 中启用威胁情报
1. 导航到 Sentinel -> 数据连接器
2. 启用威胁情报连接器
3. 导航到 Sentinel -> 威胁情报以验证

### 第 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
```

### 第 3 步 - 创建威胁匹配检测规则
导航到 Sentinel -> 分析 -> + 创建 -> 定时查询规则
| 字段 | 值 |
|---|---|
| 名称 | 威胁情报 IP 匹配 |
| 严重性 | 高 |
| 战术 | 命令和控制 |
| 每 | 5 分钟 |
| 查找最后 | 1 小时 |
KQL 查询:
```
ThreatIntelligenceIndicator
| where Active == true
| project NetworkIP, Description, ExpirationDateTime
| take 20
```

### 第 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
```

### 第 5 步 - ITIL 事件响应工作流程
| ITIL 阶段 | 执行的操作 |
|---|---|
| 检测 | Sentinel 分析规则在失败的密码输入上触发 |
| 记录 | Azure Monitor 将所有身份验证日志存储在日志分析工作区中 |
| 调查 | KQL 查询确定了攻击 IP 并确认没有未经授权的访问 |
| 响应 | 通过 NSG Deny 规则阻止了恶意 IP(192.168.1.1) |
| 恢复 | 确认 VM 未被入侵,服务正常运行 |
| 经验教训 | 更新 NSG 规则,限制 SSH 访问,记录发现 |

## 遇到的障碍和解决方案
| 障碍 | 解决方案 |
|---|---|
| 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 | 完成 |