Although existing techniques have proposed automated approaches to alleviate the path explosion problem of symbolic execution, users still need to optimize symbolic execution by applying various searching strategies carefully. As existing approaches mainly support only coarse-grained global searching strategies, they cannot efficiently traverse through complex code structures. In this paper, we propose Eunomia, a symbolic execution technique that allows users to specify local domain knowledge to enable fine-grained search. In Eunomia, we design an expressive DSL, Aes, that lets users precisely pinpoint local searching strategies to different parts of the target program. To further optimize local searching strategies, we design an interval-based algorithm that automatically isolates the context of variables for different local searching strategies, avoiding conflicts between local searching strategies for the same variable. We implement Eunomia as a symbolic execution platform targeting WebAssembly, which enables us to analyze applications written in various languages (like C and Go) but can be compiled into WebAssembly. To the best of our knowledge, Eunomia is the first symbolic execution engine that supports the full features of the WebAssembly runtime. We evaluate Eunomia with a dedicated microbenchmark suite for symbolic execution and six real-world applications. Our evaluation shows that Eunomia accelerates bug detection in real-world applications by up to three orders of magnitude. According to the results of a comprehensive user study, users can significantly improve the efficiency and effectiveness of symbolic execution by writing a simple and intuitive Aes script. Besides verifying six known real-world bugs, Eunomia also detected two new zero-day bugs in a popular open-source project, Collections-C.
翻译:虽然现有技术已经提出了自动化方法来解决符号执行的路径爆炸问题,但用户仍然需要通过谨慎地应用各种搜索策略来优化符号执行。由于现有方法主要支持粗略的全局搜索策略,它们无法高效地遍历复杂的代码结构。在本文中,我们提出了Eunomia,一种符号执行技术,允许用户指定本地域知识以启用细粒度搜索。在Eunomia中,我们设计了一种表达力强的DSL——Aes,使用户能够准确定位目标程序不同部分的局部搜索策略。为了进一步优化局部搜索策略,我们设计了一种基于区间的算法,自动隔离不同局部搜索策略的变量上下文,避免了相同变量的局部搜索策略之间的冲突。我们将Eunomia实现为针对WebAssembly的符号执行平台,这使我们能够分析用不同语言编写(如C和Go),但可以编译成WebAssembly的应用程序。据我们所知,Eunomia是支持WebAssembly运行时的第一个符号执行引擎。我们使用专门的符号执行微基准套件和六个真实世界的应用程序对Eunomia进行评估。我们的评估显示,Eunomia可以将实际应用程序中的漏洞检测加速高达三个数量级。根据全面的用户研究结果,用户可以通过编写简单直观的Aes脚本显著提高符号执行的效率和效果。除验证六个已知的真实世界漏洞外,Eunomia还在一个流行的开源项目Collections-C中发现了两个新的零日漏洞。