分享自:

MemRay:通过捕获无效输入操作进行内存损坏诊断

期刊:IEEE Transactions on Dependable and Secure ComputingDOI:10.1109/tdsc.2022.3145022

本文介绍的研究论文《capturing invalid input manipulations for memory corruption diagnosis》由Lei Zhao、Keyang Jiang、Yuncong Zhu、Lina Wang(武汉大学国家网络安全学院)与Jiang Ming(德克萨斯大学阿灵顿分校计算机科学与工程系)合作完成,发表于2023年3月/4月的《IEEE Transactions on Dependable and Secure Computing》期刊。

学术背景

该研究聚焦于内存破坏诊断(memory corruption diagnosis)领域,这是软件安全的核心问题之一。内存破坏漏洞(如缓冲区溢出、释放后使用等)长期占据网络安全威胁前列,但现有诊断技术(如模糊测试[fuzzing])仅能检测崩溃现象,无法精确定位漏洞根本原因或提供修复所需的高层语义信息。研究团队指出,现有方法存在三大局限:
1. 根因定位模糊:多数技术通过检测内存破坏的间接症状(如无效数据依赖)推断漏洞,但难以区分具体是哪个指针操作引发问题;
2. 缺乏高层抽象:二进制层面缺失源码级数据结构信息,导致诊断结果停留在低层指令,无法解释漏洞逻辑;
3. 语义信息不足:现有统计调试技术生成的谓词(predicates)缺乏与程序输入、数据结构关联的上下文,难以支持漏洞修复。

基于此,研究团队提出MemRay技术,旨在通过动态捕获程序对输入的无效操作(invalid input manipulations)实现精准诊断,同时提供丰富的漏洞语义。

研究方法与流程

MemRay的核心创新在于提出数据结构引用序列(data structure reference sequence),通过动态跟踪程序如何处理输入数据来识别内存破坏。其工作流程分为四个关键阶段:

1. 动态数据结构与输入格式重建

  • 技术手段:采用细粒度动态污点分析(fine-grained dynamic taint analysis),监控程序执行时输入数据的传播路径。
  • 对象与样本:分析对象为触发崩溃的二进制程序(如解析网络协议或媒体文件的软件),输入样本包括正常输入与触发漏洞的畸形输入。
  • 创新方法:运行时逆向工程(reverse engineering)程序的数据结构(如数组、结构体)及输入字段的映射关系。例如,当程序解析PNG图像时,动态识别其分配的内存块与图像头部字段的对应关系。

2. 构建数据结构引用序列

  • 定义:序列中的每个元素记录程序通过特定数据结构操作输入字段的行为(如“通过结构体A的字段B读取输入偏移量0x10的数据”)。
  • 实现:结合污点传播与内存访问日志,将每条指令对输入的操作映射到对应的数据结构上。例如,检测到memcpy操作时,分析其目标地址是否属于合法数据结构范围。

3. 无效操作检测

  • 违规类型
    • 越界操作:输入操作超出关联数据结构的边界(如向长度10的数组写入12字节);
    • 无效引用:操作引用了未初始化或已释放的数据结构(如悬垂指针)。
  • 算法设计:通过比对输入操作与数据结构元数据(如基址、大小、生命周期)自动标记违规行为。

4. 语义化漏洞诊断

  • 输出内容:不仅定位崩溃点的指令,还生成以下语义信息:
    • 脆弱数据结构:如“结构体Packet的length字段未验证导致堆溢出”;
    • 危险输入字段:如“输入文件的第3个字段值过大触发越界”。
  • 工具实现:开源工具MemRay(GitHub可获取)支持 stripped binaries(剥离符号表的二进制文件)。

主要结果

  • 精准定位:在真实漏洞(如CVE-2021-25794)测试中,MemRay能直接从冗长的执行轨迹中定位根因指令,而传统工具(如Credal、Pomp)仅能标记可疑区间。
  • 语义丰富性:相比统计调试技术(如Aurora)生成的抽象谓词,MemRay输出的数据结构引用序列明确指出了漏洞触发的输入条件与程序逻辑。例如,某漏洞的诊断为“未校验输入中PNG的宽度字段,导致分配缓冲区时整数溢出”。
  • 未知漏洞发现:MemRay在测试中发现了一个未被公开的漏洞(后获CVE编号),证明其具备主动挖掘能力。

结论与价值

MemRay的学术价值体现在:
1. 理论创新:提出“数据结构引用序列”作为程序语义的新表征形式,将输入操作与内存行为关联,为二进制分析提供高层抽象;
2. 实践意义
- 助力漏洞修复:通过标识危险输入字段和脆弱代码逻辑,直接指导补丁开发;
- 增强自动化能力:为模糊测试、热补丁生成(hot patching)等下游任务提供结构化诊断结果。

研究亮点

  1. 跨层诊断:首次在二进制层面实现兼具指令级精度和源码级语义的诊断;
  2. 动态逆向工程:通过运行时重建数据结构和输入格式,解决了二进制分析中语义缺失的根本难题;
  3. 开源贡献:工具代码公开,支持学术界与工业界进一步优化。

其他价值

MemRay的框架可扩展至其他安全场景,如:
- 漏洞防御:通过历史漏洞的语义模式训练异常检测模型;
- 补丁验证:验证补丁是否彻底消除了无效输入操作。

该研究为内存破坏诊断提供了方法论突破,其技术路线对软件安全自动化分析具有广泛启示。

上述解读依据用户上传的学术文献,如有不准确或可能侵权之处请联系本站站长:admin@fmread.com