S2E: The Selective Symbolic Execution Platform¶
S2E is a platform for writing tools that analyze the properties and behavior of software systems. S2E comes as a modular library that gives virtual machines symbolic execution and program analysis capabilities. S2E runs unmodified x86, x86-64, or ARM software stacks, including programs, libraries, the kernel, and drivers. Symbolic execution then automatically explores hundreds of thousands of paths through the system, while analyzers check that the desired properties hold on these paths and selectors focus path exploration on components of interest.
This documentation explains in details how to set up S2E, how to symbolically execute programs, and how to find vulnerabilities in them.
- Automated proof of vulnerability generation with S2E
- Combining Kaitai Struct and S2E for analyzing parsers (external link)
- Measuring code coverage with S2E
- Analysis of Linux binaries
- Analysis of Windows binaries
- Customizing stock VM images
- Moving files between the guest and host
- Communicating between the guest and S2E plugins
- Running S2E on multiple cores
- Writing S2E plugins
- Using execution tracers
- Equivalence testing
Scaling symbolic execution¶
To implement selectivity, S2E relies on several OS-specific plugins to detect module loads/unloads and execution of modules of interest.
These plugins record various types of multi-path information during execution. This information can be processed by offline analysis tools. Refer to the How to use execution tracers? tutorial to understand how to combine these tracers.
These plugins allow the user to write plugins in Lua.
- Function and Instruction Annotations
- FunctionMonitor provides client plugins with events triggered when the guest code invokes specified functions.
- FunctionModels reduces path explosion by transforming common functions into symbolic expressions.
- EdgeKiller kills execution paths that execute some sequence of instructions (e.g., polling loops).
- S2E: A Platform for In-Vivo Multi-Path Analysis of Software Systems. Vitaly Chipounov. EPFL PhD Thesis, July 2014
- The S2E Platform: Design, Implementation, and Applications. Vitaly Chipounov, Volodymyr Kuznetsov, George Candea. ACM Transactions on Computer Systems (TOCS), 30(1), Special issue: Best papers of ASPLOS, February 2012.
- Enabling Sophisticated Analysis of x86 Binaries with RevGen. Vitaly Chipounov and George Candea. 7th Workshop on Hot Topics in System Dependability (HotDep), Hong Kong, China, June 2011
- S2E: A Platform for In Vivo Multi-Path Analysis of Software Systems. Vitaly Chipounov, Volodymyr Kuznetsov, George Candea. 16th Intl. Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS), Newport Beach, CA, March 2011.
- Testing Closed-Source Binary Device Drivers with DDT. Volodymyr Kuznetsov, Vitaly Chipounov, George Candea. USENIX Annual Technical Conference (USENIX), Boston, MA, June 2010.
- Reverse Engineering of Binary Device Drivers with RevNIC. Vitaly Chipounov and George Candea. 5th ACM SIGOPS/EuroSys European Conference on Computer Systems (EuroSys), Paris, France, April 2010.
- Selective Symbolic Execution. Vitaly Chipounov, Vlad Georgescu, Cristian Zamfir, George Candea. Proc. 5th Workshop on Hot Topics in System Dependability, Lisbon, Portugal, June 2009