sunilselvaraj1/threat-hunting-apt-intrusion-mde
GitHub: sunilselvaraj1/threat-hunting-apt-intrusion-mde
一份完整的 APT 入侵威胁狩猎实战报告,演示如何使用 MDE 高级搜寻和 KQL 查询调查企业间谍活动并还原完整攻击链。
Stars: 0 | Forks: 0
# 威胁狩猎 — 企业间谍活动调查
## Azuki 进出口贸易公司 · Microsoft Defender for Endpoint · KQL
## 场景概述
一家日本航运物流公司怀疑竞争对手获取了其机密的供应商合同和定价数据——以恰好 3% 的优势抢走了一份为期 6 年的合同。被泄露的数据已经出现在地下论坛上。
**环境:** 拥有 23 名员工的公司,在日本/东南亚地区运营
**受损资产:** AZUKI-SL(IT 管理员工作站)
**证据来源:** Microsoft Defender for Endpoint 日志
**调查窗口:** 2025-11-19 至 2025-11-20
**威胁行为者:** JADE SPIDER(受追踪的威胁组织)
## 方法论
本次调查遵循假设驱动的威胁狩猎方法,并使用 MITRE ATT&CK 框架作为结构化参考。狩猎不是在等待警报,而是基于一项业务异常发起的——竞争对手所获情报的精确度表明存在内部访问权限或针对性入侵。
调查的每个阶段包括:
1. 针对攻击者在攻击杀伤链该阶段的行为提出假设
2. 编写针对性的 KQL 查询,对 MDE 表进行测试以验证假设
3. 将各表中的发现关联起来以构建时间线
4. 将已确认的技术映射到 MITRE ATT&CK TTP
## 攻击链摘要
| 阶段 | MITRE 战术 | 技术 | 发现 |
|---|---|---|---|
| 初始访问 | TA0001 | T1021.001 — 远程桌面协议 (RDP) | 来自可疑 IP 的外部 RDP |
| 发现 | TA0007 | T1016 — 系统网络配置发现 | 访问后的网络枚举 |
| 防御规避 | TA0005 | T1562.001 — 削弱防御机制 | 添加了 Windows Defender 排除项 |
| 防御规避 | TA0005 | T1074.001 — 本地数据暂存 | 创建了隐藏的暂存目录 |
| 防御规避 | TA0005 | T1197 — BITS Jobs / LOLBin 滥用 | 滥用原生二进制文件进行下载 |
| 持久化 | TA0003 | T1053.005 — 计划任务 | 伪装成 Windows Update 的任务 |
| 凭据访问 | TA0006 | T1003.001 — LSASS 内存 | 部署 Mimikatz 进行凭据转储 |
| 收集 | TA0009 | T1560.001 — 通过实用工具归档 | 压缩数据以进行外发 |
| 外发 | TA0010 | T1567 — 通过 Web 服务外发 | 通过消费级云平台发送数据 |
| 反取证 | TA0005 | T1070.001 — 清除 Windows 事件日志 | 安全和系统日志被清除 |
| 持久化 | TA0003 | T1136.001 — 创建本地账户 | 添加了隐藏的后门账户 |
| 横向移动 | TA0008 | T1021.001 — 远程桌面协议 (RDP) | RDP 枢纽转向至次要目标 |
## 调查亮点
### 初始访问 — 来自外部的 RDP
调查首先查询事件窗口期间源自非 RFC1918 地址的 `DeviceLogonEvents` 远程交互会话。识别出了一个成功的外部 RDP 连接,确立了初始据点和受损的用户账户。
```
DeviceLogonEvents
| where DeviceName == "azuki-sl"
| where Timestamp between (datetime(2025-11-19) .. datetime(2025-11-20))
| where ActionType == "LogonSuccess"
| where LogonType in ("RemoteInteractive", "Network")
| where isnotempty(RemoteIP)
| where RemoteIP !startswith "10."
and RemoteIP !startswith "192.168."
and RemoteIP !startswith "172."
| project Timestamp, AccountName, LogonType, RemoteIP, RemotePort, Protocol
| order by Timestamp asc
```
### 防御规避 — Defender 排除项与数据暂存
在初始访问之后,攻击者通过修改注册表对 Windows Defender 配置进行了针对性修改,添加了文件扩展名排除项和文件夹路径排除项。在 `C:\ProgramData\` 下创建了一个隐藏的暂存目录,用于存储工具和收集的数据——这是为了最大限度地减少文件系统噪音的常见模式。
```
DeviceRegistryEvents
| where DeviceName == "azuki-sl"
| where Timestamp between (datetime(2025-11-19) .. datetime(2025-11-20))
| where RegistryKey has "Exclusions\\Extensions"
or RegistryKey has "Exclusions\\Paths"
| project Timestamp, RegistryKey, RegistryValueName, RegistryValueData
```
### 持久化 — 计划任务伪装
创建了一个计划任务,其名称旨在与合法的 Windows 维护活动融合。该任务从暂存目录执行二进制文件,确保在重启后保持持久性。
```
DeviceProcessEvents
| where DeviceName == "azuki-sl"
| where Timestamp between (datetime(2025-11-19) .. datetime(2025-11-20))
| where FileName == "schtasks.exe"
| where ProcessCommandLine has "/create"
| project Timestamp, ProcessCommandLine
```
### 凭据访问 — Mimikatz 部署
攻击者使用 LOLBin (`certutil.exe`) 将凭据转储工具下载到暂存目录中,然后使用 `sekurlsa::logonpasswords` 执行它,以从 LSASS 内存中提取明文凭据。该工具被重命名以规避基于特征的检测。
```
DeviceProcessEvents
| where DeviceName == "azuki-sl"
| where Timestamp between (datetime(2025-11-19) .. datetime(2025-11-20))
| where ProcessCommandLine has_any ("sekurlsa", "logonpasswords", "privilege::debug")
| project Timestamp, FileName, ProcessCommandLine
```
### 外发 — 数据暂存与云上传
收集的数据被压缩成 ZIP 存档,并通过消费级云/消息平台外发——这是通过查询 `DeviceNetworkEvents` 中发往已知文件共享和通信服务的外部连接识别出来的。
```
DeviceNetworkEvents
| where DeviceName == "azuki-sl"
| where Timestamp between (datetime(2025-11-19) .. datetime(2025-11-20))
| where RemoteUrl has_any ("dropbox", "mega.nz", "discord", "telegram",
"onedrive", "drive.google", "slack", "pastebin",
"anonfiles", "gofile", "wetransfer")
| project Timestamp, RemoteUrl, RemoteIP, InitiatingProcessFileName
```
### 反取证 — 事件日志清除
在攻击接近尾声时,使用了 `wevtutil.exe` 依次清除多个 Windows 事件日志,从安全日志开始——这是蓄意销毁取证痕迹的企图。尽管日志被清除,MDE 的遥测数据依然捕获了这些操作。
```
DeviceProcessEvents
| where DeviceName == "azuki-sl"
| where Timestamp between (datetime(2025-11-19) .. datetime(2025-11-20))
| where FileName == "wevtutil.exe"
| where ProcessCommandLine has "cl"
| project Timestamp, ProcessCommandLine
| order by Timestamp asc
```
### 横向移动 — RDP 枢纽转向
使用通过 Mimikatz 获取的凭据,攻击者利用 `cmdkey` 缓存凭据,并使用 `mstsc.exe` 横向枢纽转向至次要内部目标——这表明入侵范围已超出了最初的工作站。
```
DeviceProcessEvents
| where DeviceName == "azuki-sl"
| where Timestamp between (datetime(2025-11-19) .. datetime(2025-11-20))
| where ProcessCommandLine has_any ("mstsc", "cmdkey")
| project Timestamp, FileName, ProcessCommandLine
| order by Timestamp asc
```
## 关键结论
**识别出的检测机会:**
- RDP 暴露在互联网上是一个关键风险——NSG/防火墙规则应将 RDP 限制在授权的 IP 范围内或要求使用 VPN
- 对 Windows Defender 排除项的注册表修改是高保真的入侵指标,应立即触发调查
- LOLBin 滥用(使用 certutil 下载文件)是一种有据可查的规避技术——通过进程命令行监控并在发现 certutil + URL 模式时发出警报是有效的
- 名称模仿 Windows 组件的计划任务需要仔细审查——对合法的计划任务进行基线化能够实现异常检测
- 即使在清除事件日志之后,MDE 遥测依然保留了完整的攻击链——这证明了云端 EDR 遥测数据的价值,攻击者难以轻易篡改
**使用的工具和平台:**
- Microsoft Defender for Endpoint (MDE)
- KQL (Kusto Query Language)
- MITRE ATT&CK Framework
- Microsoft Sentinel(用于基于调查结果开发检测规则)
## 关于本次调查
本次调查作为 **Cyber Range SOC 挑战赛**(Azuki 系列,2025 年 11 月)的一部分进行,由 Mohammed A. 设计,旨在模拟真实世界的事件响应痕迹。所有分析均使用 Microsoft Defender for Endpoint 高级搜寻表执行。
**分析师:** Sunil Selvaraj
**认证:** BTL1 | CompTIA Security+(进行中)
**背景:** 网络安全理学硕士 — 优异成绩,Oxford Brookes University
**LinkedIn:** [linkedin.com/in/sunilselvaraj](https://linkedin.com/in/sunilselvaraj)
标签:ATT&CK框架, KQL, Microsoft Defender for Endpoint, Threat Hunting, 企业间谍调查, 后渗透, 安全分析报告