【成果分享】MTSan: Yet Another Sanitizer for Binary Fuzzing

admin 2023年5月25日02:10:11评论89 views字数 6576阅读21分55秒阅读模式

今天为大家分享VUL337团队的陈星曼同学在USENIX Security 2023发表的MTSan: A Feasible and Practical Memory Sanitizer for Fuzzing COTS Binaries

【成果分享】MTSan: Yet Another Sanitizer for Binary Fuzzing

Sanitizer 与 Binary Sanitizer

模糊测试中,为了及时发现触发的漏洞,研究人员往往部署消毒剂技术,即 Sanitizer。例如,最常用的消毒剂 Address Sanitizer[1] 被广泛用于检测基于空间的内存安全违例(如缓冲区溢出),以及基于时序的内存安全违例(如堆释放后重用)。

【成果分享】MTSan: Yet Another Sanitizer for Binary Fuzzing

然而,适用于 Binary 的 Sanitizer 数量较少,仅有 Valgrind[2]、ASan-Retrowrite[3]、QASan[4] 可用(补充:截止本文撰写时,BoKASan[5] 尚未发布)。它们和 Address Sanitizer 类似,基于 Redzone 实现(见上图),且不可避免的存在一些局限性。

【成果分享】MTSan: Yet Another Sanitizer for Binary Fuzzing

  1. 仅支持堆对象;该问题由编译过程中边界信息的缺失导致;

  2. 即使内存对象的边界信息可用,仍然无法支持栈和全局变量对象;该问题由二进制程序内存布局调整的困难导致。

  3. 运行时开销较大;该问题由各 Sanitizer 采用的技术路线导致,例如 DBI 框架可能导致大量时间开销,而 Redzone 可能导致大量内存开销。


Memory Tagging Extension

作者就如何改进 Binary Sanitizer 进行了思考,而近年来 ARM 引入的硬件特性 MTE[6] 引起了作者的注意。简单而言,ARM 在 ARMv8.5-A 指令集中引入了内存标记扩展指令,由地址(指针)标记和内存标记组成;运行时基于硬件检查指针标签和访问目标地址是否匹配,从而检测内存安全违例。

【成果分享】MTSan: Yet Another Sanitizer for Binary Fuzzing

由此作者想到,假设边界信息可用,可以基于此硬件特性有效检测内存安全违例!此方案不需要改变内存布局,且避免引入大量运行时开销,有效解决了局限性二和三,计划通!

等一下,边界信息呢?


内存对象的属性

对于 Binary Sanitizer 而言,最大的挑战来源于编译过程中变量类型等属性信息的丢失,这导致 Sanitizer 无法确定 (1) 指针解引用的目标地址是否位于预期访问的内存对象边界内,以及 (2) 此时内存对象是否有效。
一个直接的思路是基于已有反编译工具获取该信息,例如 Angr、IDA Pro、Ghidra、Osprey[7] 等。然而,这些工作目前仍然还无法做到尽善尽美,如 Osprey 的变量类型恢复精度已经达到了 90.18%,但仍然存在的错误仍可能导致出现误报;大量误报的产生可能导致模糊测试无法正常进行:若误报发生在 main 函数中,会导致程序直接退出或调用额外的错误处理流程。

另一种思路是动态恢复变量属性信息,例如 Reward[8] 和 Howard[9]。然而,这些方法同样无法直接用于二进制程序的模糊测试,因为良性和恶意输入混合在一起,而 Reward 和 Howard 必须事先使用良好测试集进行训练。

听上去不妙🤔

AoE II 的启示

Binary Sanitizer 改良计划无法正常实施了吗?思考的同时,作者不小心打开了帝国时代二决定版,为此问题的解决带来了一些启发。

【成果分享】MTSan: Yet Another Sanitizer for Binary Fuzzing

帝国时代2(Age of Empires II [10])是一款古老的即时战略游戏。游戏中,玩家需要经营城市并建立军事力量,并与其他文明进行战争。某文明的单位,只应在该文明的土地进行耕种或巡逻;而该单位访问的土地,应被视为该文明的势力范围

【成果分享】MTSan: Yet Another Sanitizer for Binary Fuzzing

然而,当两个文明的单位访问同一块土地时,而该土地只应属于一个文明。尽管该土地所属并不明确,但可以确定的是战争一触即发。

【成果分享】MTSan: Yet Another Sanitizer for Binary Fuzzing

如果将“单位”理解为指针,将“土地”理解为内存空间,该思路能不能用于检测发生在内存中的安全违例呢?

MTSan 的工作流程

答案是肯定的!作者发现,动态推理所恢复的对象边界之间所产生的冲突,可能标志着内存安全违例的触发。作者设计了原型系统 MTSan 以验证此思路的有效性。为此,MTSan 需要解决两个关键问题,其一为如何在运行时恢复内存对象边界信息,其二为如何有效避免误报,并检测真实的内存安全违例。

为了便于解释该过程,作者使用 libxml2 中的漏洞 CVE-2017-9047 作为示例。CVE-2017-9047 是 libxml2 库中的一个栈溢出漏洞,漏洞位于函数 xmlSnprintfElementContent 中,第 14 行的长度检查存在问题,其在对 buf 的长度检查中使用了初始值 len,当 buf 的长度超出了该缓冲区的最大长度时,则会触发栈溢出。

【成果分享】MTSan: Yet Another Sanitizer for Binary Fuzzing

当目标漏洞触发时,expr 的相邻内存对象被覆盖,包括 list、stack canary 和 return address。然而,由于 list 的长度为 5,000,所以此缓冲区溢出很难直接导致程序崩溃,且现有的 Binary Sanitizer 暂时无法支持此类栈缓冲区溢出的检测

Progressive Object Recovery

模糊测试开始时,MTSan 加载插桩后的二进制程序,并进入对象边界推断模式,在运行时更新和维护对象元数据,并同时等待对象边界恢复结果冲突的出现。此时,MTSan 将检测到内存错误,并进入自适应处理过程。以 CVE-2017-9047 的检测过程为例,渐进式对象恢复过程中,程序合法访问变量 expr 和 list 中的部分或者全部字节。通过观察变量 expr 和 list 对应的内存如何被相应指针访问,MTSan 进行对象边界的推断。当恶性输入触发漏洞时,访问 expr 变量的指针将被用于访问变量 list。此时,MTSan 发现该次内存访问(导致的推断)和之前推断的对象边界存在冲突,这预示着该缓冲区溢出漏洞被触发

【成果分享】MTSan: Yet Another Sanitizer for Binary Fuzzing

而模糊测试中,MTSan 无法假设良性和恶性测试用例的出现顺序。若恶性测试用例在良性测试用例之前出现,MTSan 仍然按照同样的方式推断变量 expr 和 list 的边界,而该输入导致 MTSan 作出了错误的推断,得出 expr 变量长度大于 5,000 字节的推断结果。然而,此错误的存在是暂时的,后续执行中,MTSan 会继续推断变量 list 的边界,此时变量 expr 和 list 的边界将出现冲突,这预示着缓冲区溢出漏洞被触发。

听上去不错!那如何避免推断错误导致的误报呢🤔

Adaptive Sanitization

MTSan 将所检测到的内存错误分为两个级别,并分别应用不同的处理策略。如果某内存错误仅依赖于确定性属性的检查(如堆块大小),MTSan 将其分类为严重错误,MTSan 将终止此次执行,并直接报告此错误。对应地,当被检测到的内存错误依赖于非确定性属性的检查(如推断得到的边界),将被分类为非严重错误,MTSan 将记录测试用例并恢复模糊测试过程,同时进行回归模糊测试。

【成果分享】MTSan: Yet Another Sanitizer for Binary Fuzzing

听上去不错!和已有方案相比效果如何🤔

实验评估

作者首先使用 Valgrind、QASan 以及 ASan-Retrowrite 作为比较对象,测试各个工具的漏洞检测能力。实验结果表示,MTSan 的漏报率最低,且对于检测栈和全局内存对象上发生的内存安全违例,具有独特的优势。
值得一提的是,在漏洞检测能力评估中,作者针对单个 PoC 进行了扩增,从而更好的模拟模糊测试中漏洞触发的不同情况。下表中的数字即表示检测到 PoC 的数目。

【成果分享】MTSan: Yet Another Sanitizer for Binary Fuzzing

真实漏洞数据集实验评估结果

除此之外,作者还评估了各个 Binary Sanitizer 在模糊测试中的实际表现,由于目前支持 MTE 的商用硬件仍不可用,作者采用了模拟指令和 libMTE 两种方案对 MTSan 的实际性能进行测试。结果表示,MTSan 在引入较小运行时开销的同时,可以检测到更多的漏洞

【成果分享】MTSan: Yet Another Sanitizer for Binary Fuzzing

模糊测试评估中目标程序每秒平均执行次数

在模糊测试评估中,作者还进行了一些统计,包括渐进式对象恢复的效果、收敛性分析,以及回归模糊测试的有效性分析等,具体数据可以参考论文原文。

看上去不错!但貌似此方案也无法检测到所有漏洞🤔

局限性

  • MTE 粒度限制:MTE 将每个对齐于 16 字节的内存块与一个内存标记相关联。由于此硬件限制,MTSan 无法检测到发生在这些 16 字节内存块内的溢出,这可能导致漏报;

  • 复合对象:当对象的长度小于 16 个字节,或者内存对象的边界未对齐到 16 字节时,MTE 无法为单个内存对象分配标记。为此,MTSan 引入了复合对象的概念,将相邻且未对齐到 16 字节的多个对象视为同一对象。然而,MTSan 无法检测到发生在复合对象内的溢出,这可能导致漏报。

除此之外,还可以在原文中找到更多局限性的讨论。然而,通常而言,Binary Sanitizer 无法检测到所有内存错误;希望在此基础上,研究者们可以开发更强力的 Binary Sanitizer,本文抛砖引玉的目的也就达到了!

论文下载:

https://www.usenix.org/system/files/sec23fall-prepub-279-chen-xingman.pdf



VUL337 团队简介

VUL337是清华大学NISL实验室张超老师带领的软件与系统安全课题组,目前团队主要研究兴趣为:针对软件与系统安全领域漏洞与恶意代码等问题,面向主机、移动设备、区块链、物联网、车联网等目标,研究自动化、智能化攻防技术,构建智能分析系统;针对数据安全与隐私计算问题,研究芯片、系统、算法协同的实用化解决方案。团队长期招聘对安全感兴趣的博士后、工程师、客座研究生、实习生等。

张超博士,清华大学长聘副教授,蓝莲花战队教练、华为冠名教授、CCF杰出会员。曾获国家级青年人才、清华大学“学术新人奖”、MIT TR35 China等奖励和荣誉。在国际四大安全会议上发表论文数十篇。提出的自动漏洞挖掘、利用、防御方案分别获得了腾讯 CSS 安全探索论坛专业奖/突破奖、微软 BlueHat 竞赛特别提名奖、华为优先合作奖、FATE社区年度技术特别贡献奖等;带队研发的系统获得了 DARPA CGC 机器自动攻防竞赛初赛防御第一、决赛攻击第二。


作者简介

陈星曼(星博),清华大学计算机系博士生,蓝莲花、Tea-Deliverers 战队队员,导师为张超副教授与段海新教授,来自清华大学软件与系统安全课题组(VUL337)。他的主要研究方向是软件与系统安全,他在 Usenix Security、CCS、TDSC、DAC 等国际学术会议与刊物上发表多篇论文。他还参加过多项国内外知名竞赛,曾多次在 Defcon CTF、强网杯、Geekpwn 等中获奖。

引用

[1] Serebryany K, Bruening D, Potapenko A, et al. AddressSanitizer: A fast address sanity checker [C/OL]//Heiser G, Hsieh W C. 2012 USENIX Annual Technical Conference, Boston, MA, USA, June 13-15, 2012. USENIX Association, 2012: 309-318. https://www.usenix.org/confe rence/atc12/technical-sessions/presentation/serebryany. [2] Nethercote N, Seward J. Valgrind: A framework for heavyweight dynamic binary instrumentation[C/OL]//Ferrante J, McKinley K S. Proceedings of the ACM SIGPLAN 2007 Conference on Programming Language Design and Implementation, San Diego, California, USA, June 10-13, 2007. ACM, 2007: 89-100. https://doi.org/10.1145/1250734.1250746. [3] Fioraldi A, D’Elia D C, Querzoni L. Fuzzing binaries for memory safety errors with qasan [C/OL]//IEEE Secure Development, SecDev 2020, Atlanta, GA, USA, September 28-30, 2020. IEEE, 2020: 23-30. https://doi.org/10.1109/SecDev45635.2020.00019. [4] Dinesh S, Burow N, Xu D, et al. Retrowrite: Statically instrumenting COTS binaries for fuzzing and sanitization[C/OL]//2020 IEEE Symposium on Security and Privacy, SP 2020, San Francisco, CA, USA, May 18-21, 2020. IEEE, 2020: 1497-1511. https://doi.org/10.1109/SP40000. 2020.00009. [5] BoKASan, https://www.usenix.org/system/files/sec23fall-prepub-325-cho-mingi.pdf [6] ARM. Armv8.5-A memory tagging extension. whitepaper[EB/OL]. 2019[2022-12-29]. https://developer.arm.com/-/media/Arm%20Developer%20Community/PDF/Arm_Memory_Taggi ng_Extension_Whitepaper.pdf. [7] Zhang Z, Ye Y, You W, et al. OSPREY: recovery of variable and data structure via probabilistic analysis for stripped binary[C/OL]//42nd IEEE Symposium on Security and Privacy, SP 2021, San Francisco, CA, USA, 24-27 May 2021. IEEE, 2021: 813-832. https://doi.org/10.1109/SP 40001.2021.00051. [8] Lin Z, Zhang X, Xu D. Automatic reverse engineering of data structures from binary execution [C/OL]//Proceedings of the Network and Distributed System Security Symposium, NDSS 2010, San Diego, California, USA, 28th February - 3rd March 2010. The Internet Society, 2010. https://www.ndss-symposium.org/ndss2010/automatic-reverse-engineering-data-structures-b inary-execution. [9] Slowinska A, Stancescu T, Bos H. Howard: A dynamic excavator for reverse engineering data structures[C/OL]//Proceedings of the Network and Distributed System Security Symposium, NDSS 2011, San Diego, California, USA, 6th February - 9th February 2011. The Internet Society, 2011. https://www.ndss-symposium.org/ndss2011/howard-a-dynamic-excavator-for-reverse-engineering-data-structures. [10] Age of Empires II: Definitive Edition, https://www.ageofempires.com/games/aoeiide/


原文始发于微信公众号(NISL实验室):【成果分享】MTSan: Yet Another Sanitizer for Binary Fuzzing

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月25日02:10:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【成果分享】MTSan: Yet Another Sanitizer for Binary Fuzzinghttps://cn-sec.com/archives/1758813.html

发表评论

匿名网友 填写信息