UDRL -> Set Eaf_Bypass "true"
字数 1639 2025-08-29 22:41:10

Cobalt Strike 4.11 EAF Bypass与UDRL技术详解

1. EAF机制概述

EAF (Export Address Filtering) 是Windows Defender引入的一种安全机制,通过将PAGE_GUARD应用到特定DLL的内存区域来防止恶意代码执行。当EAF启用时:

  • 关键DLL的内存空间会被标记为PAGE_GUARD属性
  • 触发PAGE_GUARD异常时,PayloadRestrictions.dll注册的VEH(向量化异常处理)会接管
  • VEH会检查当前RIP/EIP是否在未备份内存或可疑gadget上
  • 如果检测到可疑行为,进程将被终止

2. CS4.11的EAF_Bypass功能

Cobalt Strike 4.11引入了EAF_Bypass功能,通过设置Set Eaf_Bypass "true"可以绕过EAF保护:

  • 原理是利用DLL中的合法gadget进行内存读写操作
  • 避免直接访问受保护内存区域
  • 需要精心选择不会触发EAF+检测的gadget

3. UDRL技术详解

UDRL (User Defined Reflective Loader) 是CS4.4引入的功能,允许用户自定义反射加载器:

3.1 UDRL核心功能

  • 完全控制beacon加载beacon.dll的行为
  • 可自定义API调用和行为控制
  • 提供更大的灵活性和规避能力

3.2 UDRL与EAF Bypass的结合

在实现EAF绕过时,UDRL需要处理以下关键点:

  1. 导出表访问

    • 不仅AddressOfFunctions需要gadget读写
    • 导出表的VA也受EAF保护
    • 建议将三个数组(AddressOfFunctions, AddressOfNames, AddressOfNameOrdinals)及导入表读取操作全部使用gadget
  2. Spoof Call技术

    • 直接API调用可能触发Elastic EDR等检测
    • 需要实现堆栈欺骗
    • 寻找gadget时也要注意EAF规则

3.3 实现要点

  • Library\FunctionResolving.cpp中修改函数解析逻辑
  • 使用内存中的合法gadget代替直接内存访问
  • 确保gadget选择不会触发EAF+检测
  • 实现完整的调用链欺骗

4. 实践步骤

4.1 环境配置

  1. 启用Windows Defender的EAF保护
  2. 配置Cobalt Strike 4.11+
  3. 在配置文件中设置Set Eaf_Bypass "true"

4.2 UDRL实现

  1. Gadget查找

    • 扫描内存寻找合适的读写gadget
    • 避免使用会触发EAF+的gadget
    • 示例gadget模式:
      mov reg, [reg]
      ret
      
  2. 导出表处理

    • 重写导出表访问逻辑
    • 使用gadget链代替直接内存读取
  3. 调用欺骗

    • 实现Spoof Call机制
    • 构造合法的调用栈
    • 使用ROP技术隐藏真实调用来源

4.3 测试验证

  1. 在Win10/Win11不同版本测试
  2. 验证是否触发PAGE_GUARD异常
  3. 检查EDR检测情况(特别是Elastic EDR)
  4. 确保后续操作不会被检测

5. 对抗EDR的进阶技巧

  • 模块伪装:使用Module Stomping技术
  • 调用链混淆:结合多种gadget使用
  • 行为分散:将敏感操作分散到不同线程
  • 时序混淆:加入随机延迟避免模式识别

6. 参考资源

  1. IAF-EAF-Shellcode-bypass-PoC
  2. Cobalt Strike 4.11官方博客
  3. Malleable C2扩展文档
  4. Elastic EDR检测规则

7. 注意事项

  1. 不同Windows版本可能需要调整gadget
  2. EAF规则可能随Windows更新而变化
  3. 对抗EDR需要持续更新技术
  4. 仅用于合法授权测试

通过结合CS4.11的EAF_Bypass功能和UDRL的自定义能力,可以实现更高级的规避技术,但需要注意这些技术可能被EDR厂商持续更新检测方式。

Cobalt Strike 4.11 EAF Bypass与UDRL技术详解 1. EAF机制概述 EAF (Export Address Filtering) 是Windows Defender引入的一种安全机制,通过将PAGE_ GUARD应用到特定DLL的内存区域来防止恶意代码执行。当EAF启用时: 关键DLL的内存空间会被标记为PAGE_ GUARD属性 触发PAGE_ GUARD异常时,PayloadRestrictions.dll注册的VEH(向量化异常处理)会接管 VEH会检查当前RIP/EIP是否在未备份内存或可疑gadget上 如果检测到可疑行为,进程将被终止 2. CS4.11的EAF_ Bypass功能 Cobalt Strike 4.11引入了EAF_ Bypass功能,通过设置 Set Eaf_Bypass "true" 可以绕过EAF保护: 原理是利用DLL中的合法gadget进行内存读写操作 避免直接访问受保护内存区域 需要精心选择不会触发EAF+检测的gadget 3. UDRL技术详解 UDRL (User Defined Reflective Loader) 是CS4.4引入的功能,允许用户自定义反射加载器: 3.1 UDRL核心功能 完全控制beacon加载beacon.dll的行为 可自定义API调用和行为控制 提供更大的灵活性和规避能力 3.2 UDRL与EAF Bypass的结合 在实现EAF绕过时,UDRL需要处理以下关键点: 导出表访问 : 不仅AddressOfFunctions需要gadget读写 导出表的VA也受EAF保护 建议将三个数组(AddressOfFunctions, AddressOfNames, AddressOfNameOrdinals)及导入表读取操作全部使用gadget Spoof Call技术 : 直接API调用可能触发Elastic EDR等检测 需要实现堆栈欺骗 寻找gadget时也要注意EAF规则 3.3 实现要点 在 Library\FunctionResolving.cpp 中修改函数解析逻辑 使用内存中的合法gadget代替直接内存访问 确保gadget选择不会触发EAF+检测 实现完整的调用链欺骗 4. 实践步骤 4.1 环境配置 启用Windows Defender的EAF保护 配置Cobalt Strike 4.11+ 在配置文件中设置 Set Eaf_Bypass "true" 4.2 UDRL实现 Gadget查找 : 扫描内存寻找合适的读写gadget 避免使用会触发EAF+的gadget 示例gadget模式: 导出表处理 : 重写导出表访问逻辑 使用gadget链代替直接内存读取 调用欺骗 : 实现Spoof Call机制 构造合法的调用栈 使用ROP技术隐藏真实调用来源 4.3 测试验证 在Win10/Win11不同版本测试 验证是否触发PAGE_ GUARD异常 检查EDR检测情况(特别是Elastic EDR) 确保后续操作不会被检测 5. 对抗EDR的进阶技巧 模块伪装 :使用Module Stomping技术 调用链混淆 :结合多种gadget使用 行为分散 :将敏感操作分散到不同线程 时序混淆 :加入随机延迟避免模式识别 6. 参考资源 IAF-EAF-Shellcode-bypass-PoC Cobalt Strike 4.11官方博客 Malleable C2扩展文档 Elastic EDR检测规则 7. 注意事项 不同Windows版本可能需要调整gadget EAF规则可能随Windows更新而变化 对抗EDR需要持续更新技术 仅用于合法授权测试 通过结合CS4.11的EAF_ Bypass功能和UDRL的自定义能力,可以实现更高级的规避技术,但需要注意这些技术可能被EDR厂商持续更新检测方式。