sarandeny/Threat-Hunting-in-Azure-Investigating-Publicly-Exposed-Windows-VM-Activity
GitHub: sarandeny/Threat-Hunting-in-Azure-Investigating-Publicly-Exposed-Windows-VM-Activity
一个基于 MDE 和 KQL 的 Azure 虚拟机威胁狩猎实战案例,记录了针对公网暴露设备的暴力破解调查、失陷验证与响应加固的完整流程。
Stars: 0 | Forks: 0
威胁搜寻 # 🛡️ 威胁搜寻:意外暴露在互联网上的设备
## 📋 目录
- [概述](#overview)
- [场景背景](#scenario-background)
- [搜寻方法论](#hunt-methodology)
- [主要发现](#key-findings)
- [MITRE ATT&CK 映射](#mitre-attck-mapping)
- [已采取的响应行动](#response-actions-taken)
- [经验教训](#lessons-learned)
- [KQL 查询参考](#kql-query-reference)
- [项目结构](#project-structure)
- [工具与技术](#tools--technologies)
## 概述
本仓库记录了在实时网络靶场环境中,使用 **Microsoft Defender for Endpoint (MDE)** 和 **Kusto Query Language (KQL)** 进行的**实战威胁搜寻演练**。这次搜寻是在发现共享服务集群中的几台虚拟机意外暴露于公共互联网后触发的。
其目的是确定这些暴露的机器中是否有任何一台被外部威胁行为者通过暴力破解登录攻击攻陷。
**底线 upfront (BLUF):** 目标设备 (`saranpc2`) 面向互联网数天,并收到了来自 **7 个唯一外部 IP 地址** 的暴力破解登录尝试。然而,**没有暴力破解尝试成功**,所有成功的远程登录都归因于来自已知 IP 的合法 `labuser` 账户。
## 场景背景
在例行维护期间,安全团队发现共享服务集群(处理 DNS、Domain Services、DHCP 等)中的虚拟机**被错误地暴露在公共互联网上**。这开启了一个窗口期,其中:
- 设备在非预期暴露的情况下可被公开访问。
- 较旧的设备缺乏**账户锁定策略**,使其容易受到暴力破解攻击。
- 外部威胁行为者和自动化机器人可能会尝试凭证填充或暴力破解攻击。
**假设:**
## 搜寻方法论
本次调查遵循结构化的 **Threat Hunting Lifecycle**:
```
1. Preparation → 2. Data Collection → 3. Data Analysis
↑ ↓
7. Improvement ← 6. Documentation ← 4. Investigation
↓
5. Response
```
有关完整的分步演练,请参阅 [`reports/hunt-report.md`](reports/hunt-report.md)。
## 主要发现
| 发现 | 详情 |
|---|---|
| **互联网暴露时长** | 数天(最后确认时间:`2026-03-27T06:59:56Z`) |
| **唯一攻击者 IP** | 识别出 7 个外部 IP |
| **主要攻击者** | `185.156.73.74` — 失败尝试次数最多 |
| **暴力破解成功?** | ❌ 否 |
| **合法远程登录** | `labuser` 从已知 IP 进行的 5 次成功 `Network` 登录 |
| **确认失陷?** | ❌ 无失陷证据 |
## MITRE ATT&CK 映射
| TTP ID | 技术 | 战术 | 观察到 |
|---|---|---|---|
| [T1190](https://attack.mitre.org/techniques/T1190/) | Exploit Public-Facing Application | Initial Access | 设备曾暴露在互联网上 |
| [T1078](https://attack.mitre.org/techniques/T1078/) | Valid Accounts | Defense Evasion / Persistence | 已调查合法登录 |
| [T1110](https://attack.mitre.org/techniques/T1110/) | Brute Force | Credential Access | 来自外部 IP 的多次失败登录 |
| [T1587](https://attack.mitre.org/techniques/T1587/) | Develop Capabilities | Resource Development | 潜在的攻击者工具/基础设施 |
详见 [`mitre/ttp-mapping.md`](mitre/ttp-mapping.md)。
## 已采取的响应行动
1. **Network Security Group (NSG) 加固** — 将 `saranpc2` 上的 RDP 访问限制为仅限特定批准的端点。移除了公共互联网 RDP 访问权限。
2. **账户锁定策略** — 建议实施该策略以自动阻止暴力破解尝试。
3. **MFA 强制执行** — 建议对所有远程访问账户启用 Multi-Factor Authentication。
## 经验教训
- 🔴 **内部虚拟机的公共互联网暴露**是一个关键的配置错误风险——即使是短暂的暴露窗口也会引来自动化攻击。
- 🟡 **旧设备上缺少账户锁定**显著增加了暴力破解风险。
- 🟢 **主动威胁搜寻**在违规发生前发现了此问题。
- 🟢 **MDE telemetry**(DeviceInfo + DeviceLogonEvents)提供了足够的可见性来确认或排除失陷。
## KQL 查询参考
本次搜寻中使用的所有 KQL 查询均记录在 [`queries/kql-queries.md`](queries/kql-queries.md) 中,包括:
- 面向互联网的设备识别
- 按源 IP 列举失败登录
- 暴力破解成功验证
- 合法登录基线分析
## 项目结构
```
📁 soc-exposed-devices/
├── 📄 README.md ← You are here
├── 📁 reports/
│ └── 📄 hunt-report.md ← Full investigation report
├── 📁 queries/
│ └── 📄 kql-queries.md ← All KQL queries with explanations
├── 📁 mitre/
│ └── 📄 ttp-mapping.md ← MITRE ATT&CK framework mapping
├── 📁 playbooks/
│ └── 📄 exposed-device-response.md ← IR playbook for this scenario
└── 📁 assets/
└── 📄 timeline.md ← Attack timeline reconstruction
```
## 工具与技术
| 工具 | 用途 |
|---|---|
| **Microsoft Defender for Endpoint (MDE)** | 端点 telemetry 和警报来源 |
| **Kusto Query Language (KQL)** | 日志分析和威胁搜寻查询 |
| **Microsoft Sentinel / MDE Portal** | SIEM/XDR 查询界面 |
| **MITRE ATT&CK Navigator** | TTP 映射和对手行为分析 |
| **Azure CyberRange** | 实战练习的靶场环境 |
## 关于本项目
本项目是作为 **CyberRange 威胁搜寻演练**的一部分完成的,旨在模拟现实世界的 SOC 分析师工作流程。它展示了:
- 结构化的威胁搜寻方法论
- 用于日志分析的 KQL 熟练度
- MITRE ATT&CK 框架应用
- 事件文档记录和报告技能
*最后更新:2026年3月27日 | 作者:Saran*
标签:AES-256, APT, Azure VM, Azure 虚拟机, Brute Force, CISA项目, Cyber Range, Defender for Endpoint, KQL, Kusto Query Language, MDE, Microsoft Defender, Microsoft Defender for Endpoint, PE 加载器, PoC, RDP 安全, 公网暴露, 凭证攻击, 安全调查, 安全运营, 扫描框架, 暴力破解, 漏洞评估, 网络安全, 账户锁定策略, 隐私保护