Eunomia: Enabling User-specified Fine-Grained Search in Symbolically Executing WebAssembly Binaries

04/14/2023
by   Ningyu He, et al.
0

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.

READ FULL TEXT
research
01/22/2020

Benchmarking Symbolic Execution Using Constraint Problems – Initial Results

Symbolic execution is a powerful technique for bug finding and program t...
research
05/09/2018

Evaluating Manual Intervention to Address the Challenges of Bug Finding with KLEE

Symbolic execution has shown its ability to find security-relevant flaws...
research
05/23/2019

SynFuzz: Efficient Concolic Execution via Branch Condition Synthesis

Concolic execution is a powerful program analysis technique for explorin...
research
07/08/2019

Manticore: A User-Friendly Symbolic Execution Framework for Binaries and Smart Contracts

An effective way to maximize code coverage in software tests is through ...
research
02/24/2023

autofz: Automated Fuzzer Composition at Runtime

Fuzzing has gained in popularity for software vulnerability detection by...
research
12/05/2017

On Benchmarking the Capability of Symbolic Execution Tools with Logic Bombs

Symbolic execution is an important software testing approach. It has bee...
research
12/13/2020

Fine-Grained Lineage for Safer Notebook Interactions

Computational notebooks have emerged as the platform of choice for data ...

Please sign up or login with your details

Forgot password? Click here to reset