据说牛顿曾经提到他一生的黄金发现都发生在1665-1666年瘟疫期间:“那些日子是他的发明的黄金时期,我对数学和哲学的清晰思路,胜过以后任何时候。” 而胡适曾说过,法国被普鲁士打败之后割地赔款。法国科学家巴斯德深信只有科学可以救国,在微生物学的研究上作出了巨大的贡献,以至于英国科学家赫胥黎在皇家学会里称颂巴斯德的功绩:“法国给了德国五十万万法朗的赔款,巴斯德先生一个人研究科学的成就足够还清这一笔赔款了。”
科学家在科研工作上的付出,在外界看不见想不到的时候,为人类的进步提供了各种奇迹。而今天,在这个既是圆周率日又是爱因斯坦生日的特殊日子,在我们又一次面对疫情导致的各种困难时,我们依然选择相信科学,依然要拼命做科研和时间赛跑,只有用这种方法,才能真正为各个被隔离的大学加油,为整个社区加油!
今天我们为大家送上的推荐论文来自USENIX security 2022,是著名的angr团队的最新研究工作。这篇论文介绍了名为Arbiter
的二进制代码分析工具,通过结合fuzzing和动态符号执行(避免各自技术的缺陷),实现了在大规模的二进制代码分析场景下依然能够保证很高精确度的特性!作者在76516个二进制程序上测试了Arbiter
,验证了工具的可靠性。同时,作者还对工具报告的436例 CWE-131、159例 CWE-252、158例 CWE-134和377例 CWE-337警告进行了确认。
正如作者所说,Arbiter
是一款结合了fuzzing和动态符号执行特色的工具,所以首先可以看看Arbiter
和同类工具的一些横向对比(上图)。可以看到Arbiter
的主要亮点在于其“二进制+大规模+低误报”的特色。如果听上去这么好的工具不开源,大家肯定要骂死作者了,所以作者也是上来就跟大家送上了代码和测试数据集:
https://github.com/jkrshnmenon/arbiter
接下来,论文首先要讲一下自己这个工作的“why”,也就是在当前已经有这么多二进制代码分析和漏洞检测/挖掘工作的前提下,为什么Arbiter
的技术仍然更为出色。作者细致地分析了fuzzing、taint tracking、动态符号执行、基于图查询的漏洞挖掘等过去20年安全研究社区投入大量精力去发展的技术方向,对它们的优劣进行了总结对比(如下表所示)。人无完人,经常阅读论文的读者肯定也对各个技术的缺陷心知肚明,于是从各项技术中取长补短就成了Arbiter
的一个主要策略。
尽管如此,通常情况下,我们往往会对一项号称“既x又x又x”的技术表示怀疑——总不能让你把所有优点都占全了吧?Arbiter
背后的黑科技号称economic, scalable, and low-human-inference,它当然也有它的专注点,那就是它所谓的vulnerability-targeted static analysis,即“挖洞导向”的静态分析技术。正是因为专注于发现vulnerability,Arbiter
的静态分析在实际应用中,大部分情况下不太需要处理复杂的指针别名情况,且进行分析时有明确的source和sink等。这些都是安全研究有别于程序分析研究之处!安全研究更关注现实问题,而程序分析研究更关心的是解决程序分析技术本身的问题。
讲完了“why”,接下来是“how”。论文从第四章开始全面介绍了Arbiter
的设计和实现。Arbiter
中包含了名为SymDFT的静态数据流分析技术,设计目标是追求precision和scalability,选择牺牲一部分soundness。同时,Arbiter
为二进制代码分析引入了源代码分析中的under-constrained symbolic execution (UCSE) 技术,即允许符号执行在不构建完整的初始化参数和环境参数的情况下,仍然可以运行。
在实验评估部分,作者对x86-64 Ubuntu 18.04 repo中所有除内核模块和debug符号模块之外的ELF文件进行了全面分析,一共测试了76516个二进制代码文件。作者针对如下四类CWE进行了分析:
CWE-131: Overflows at Allocation Sites
CWE-252: Unchecked Return Values
CWE-337: Predictable Seed in PRNG
CWE-134: Uncontrolled Format String
针对七万多个二进制代码文件的分析中,Arbiter
报告了1095处问题,作者对其中1036处问题进行了人工核查,确认其中636处,误报400处,大家(特别是那些常年被各种误报率高得令人抓狂的代码分析工具折磨的工程师)可以感受一下这个误报率。
在横向测评中,作者把Arbiter
和AFL、CodeQL、Infer等几个工业界运用广泛的框架进行了对比,还测试了Arbiter
在Juliet数据集上的表现。在安全社区中大家肯定对这些对象都非常熟悉,因此作者的对比实验也很有说服力。
除了正常的实验评估,在应用Arbiter
进行分析的过程中,研究人员还顺带发现了如下一些漏洞:
论文PDF:
https://www.s3.eurecom.fr/docs/usenixsec22_arbiter.pdf