灰盒自动化利用生成:语言解释器堆溢出的突破性研究

本文探讨了针对语言解释器中堆溢出的灰盒自动化利用生成技术,通过多阶段分解、模板驱动和人类参与的新型架构,突破传统AEG系统的局限性,为复杂漏洞利用提供可行方案。

灰盒自动化利用生成:语言解释器堆溢出的突破性研究

背景

2009年作者在硕士论文中首次尝试利用混合执行(concolic execution)构建SMT公式来表示导致程序崩溃的输入路径语义,然后将这些公式与表示成功利用的逻辑条件结合,通过SMT求解器推导出所需输入。这种方法在有限保护机制的场景(如IoT设备)中有效,但存在根本性概念缺陷:传统系统将利用生成视为两阶段过程(发现漏洞路径→一次性转换为利用),而实际利用开发往往需要多阶段协作和人工干预。

2016年的开放性问题

回顾DARPA网络大挑战赛及相关研究,发现以下关键问题:

  1. 所有系统追求全自动化,缺乏人机协同能力
  2. 忽略"利用原语"概念(手动利用开发的核心)
  3. 将AEG视为单次转换而非多阶段编程问题
  4. 未充分运用灰盒输入生成(模糊测试)技术
  5. 仍专注于栈溢出漏洞
  6. 未整合信息泄露或应对ASLR
  7. 缺乏对语言解释器/浏览器的研究
  8. 缺少内核级研究

研究创新

多阶段分解架构

将利用生成分解为独立阶段,为每个阶段设计专用求解器。关键突破包括:

  • 惰性解析机制:允许阶段乱序求解,先模拟昂贵阶段的解决方案,验证有效性后再实际求解
  • 堆布局假设验证:先假设特定堆布局,检查可利用性,仅当确认可利用时才实际构造该布局

灰盒优先方法

  • 为每个阶段设计纯灰盒解决方案(受模糊测试启发)
  • 通过问题分解大幅缩减状态空间,使反馈机制设计成为可能
  • 在需要精确推理时有限度使用符号执行

模板驱动协同

设计模板语言实现:

  • 多求解器交互和可替换性
  • 人工解决方案集成(“人在环路"模式)
  • 阶段间解决方案传递和组合

目标选择

  • 漏洞类型:选择未被充分研究的堆溢出(而非过度研究的栈溢出)
  • 目标软件:针对普及但未被研究的语言解释器(PHP和Python)

实践成果

  • 自动堆布局操作(USENIX Security 2018):堆布局问题的灰盒解决方案
  • Gollum系统(ACM CCS 2019):完全基于灰盒组件的端到端利用生成架构

未来方向

论文第1.2节明确列出了系统假设和局限性,第6.1节提出了多个有趣的开放性问题,为后续研究提供了丰富的研究方向。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计