写点什么

顶级 BlueHat 奖参赛作品的技术分析:ROP 防御技术深度剖析

作者:qife
  • 2025-08-08
    福建
  • 本文字数:1174 字

    阅读完需:约 4 分钟

顶级 BlueHat 奖参赛作品的技术分析

在公布首届 BlueHat 奖获奖名单后,我们希望通过本文详细介绍前三名参赛作品的技术方案,并说明评审标准。作为评委代表,我们很高兴看到参赛者对重要安全问题的创造性防御思路!

竞赛背景

参赛者需要设计创新的运行时缓解技术,用于防御内存安全漏洞(如缓冲区溢出)的利用。评审团根据以下标准进行评估(依据竞赛规则):

实用性与功能性(30%)

  • 解决方案能否大规模部署?

  • 原型是否具有低开销?

  • 是否不存在应用兼容性或可用性退化?

  • 原型是否按预期工作?

鲁棒性(30%)

  • 该方案是否难以被绕过?

影响力(40%)

  • 是否有效解决关键开放性问题或显著改进现有方案?

  • 能否在微软现有防护体系外提供更强防御?


评审团成员来自 Windows 团队、微软研究院和微软安全工程中心(MSEC)。在 20 份参赛作品中,前三名均提出了不同的 ROP(返回导向编程)缓解方案。

第三名:基于返回地址白名单的/ROP 方案(Jared DeMott)

该方案通过白名单限制返回指令的目标地址。具体实现包括:


  1. 新增编译器标志"/ROP",在可执行文件中嵌入有效返回地址的元数据

  2. 操作系统加载镜像时,将返回地址列表加入主列表

  3. 每次执行返回指令时触发异常,由操作系统验证目标地址


原型工具包含:


  • 模拟硬件支持的 Pin 工具

  • 生成有效返回地址列表的 IDA Python 脚本

评估

  • 实用性:由于每次返回都需软件中断,执行成本较高;STL map 容器导致内存开销

  • 鲁棒性:可被有效返回地址内的 gadget 或非返回指令链绕过

  • 影响力:中等,无法完全防御所有代码复用攻击

第二名:关键函数检查机制 ROPGuard(Ivan Fractic)

该方案在调用关键 API(如 VirtualProtect)时执行以下检查:


  1. 验证栈指针是否在线程栈范围内

  2. 验证返回地址是否可执行且前接 call 指令

  3. 验证所有栈帧有效性

  4. 模拟执行验证后续返回地址

  5. 函数特定契约变更(如禁止栈内存设为可执行)

评估

  • 实用性:性能影响小,但与自定义栈切换程序及省略帧指针的程序不兼容

  • 鲁棒性:攻击者可能调用未检测的低级 API 或跳转检查代码块

  • 影响力:中等,无法从根本上解决 ROP 问题

第一名:基于 LBR 的 kBouncer 方案(Vasilis Pappas)

该创新方案利用 Intel 处理器的 LBR(Last Branch Recording)特性,在系统调用时检测 ROP:


  1. 内核组件启用返回控制转移的分支记录

  2. 系统调用时枚举 LBR 栈条目,验证目标地址前接 call 指令原型因 Windows 内核限制改在关键 API 层实施检测

评估

  • 实用性:硬件支持降低性能损耗,应用兼容性好

  • 鲁棒性:LBR 栈深度有限(16 条目),攻击者可通过有效返回填充绕过

  • 影响力:中等,API 层检测可能被绕过,且不防御所有 gadget 链

总结

获奖方案展现了防御内存安全漏洞的创造性思维。我们已在 EMET 3.5 技术预览版中整合 ROPGuard 方案的相关特性。虽然将安全理念转化为可大规模部署的产品具有挑战性,但通过持续优化,这些创新方案可能最终成为实用的解决方案。


Matt Miller


MSEC Security Science 更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码


办公AI智能小助手


用户头像

qife

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
顶级BlueHat奖参赛作品的技术分析:ROP防御技术深度剖析_网络安全_qife_InfoQ写作社区