Automatically generating malicious disks using symbolic execution
- 1 January 2006
- conference paper
- Published by Institute of Electrical and Electronics Engineers (IEEE)
- p. 15 pp.-257
- https://doi.org/10.1109/sp.2006.7
Abstract
Many current systems allow data produced by potentially malicious sources to be mounted as a file system. File system code must check this data for dangerous values or invariant violations before using it. Because file system code typically runs inside the operating system kernel, even a single unchecked value can crash the machine or lead to an exploit. Unfortunately, validating file system images is complex: they form DAGs with complex dependency relationships across massive amounts of data bound together with intricate, undocumented assumptions. This paper shows how to automatically find bugs in such code using symbolic execution. Rather than running the code on manually-constructed concrete input, we instead run it on symbolic input that is initially allowed to be "anything." As the code runs, it observes (tests) this input and thus constrains its possible values. We generate test cases by solving these constraints for concrete values. The approach works well in practice: we checked the disk mounting code of three widely-used Linux file systems: ext2, ext3, and JFS and found bugs in all of them where malicious data could either cause a kernel panic or form the basis of a buffer overflow attackKeywords
This publication has 18 references indexed in Scilit:
- IRON file systemsPublished by Association for Computing Machinery (ACM) ,2005
- Execution Generated Test Cases: How to Make Systems Code Crash ItselfPublished by Springer Nature ,2005
- An Extensible SAT-solverPublished by Springer Nature ,2004
- Generalized Symbolic Execution for Model Checking and TestingPublished by Springer Nature ,2003
- CIL: Intermediate Language and Tools for Analysis and Transformation of C ProgramsPublished by Springer Nature ,2002
- Automatic test data generation using constraint solving techniquesPublished by Association for Computing Machinery (ACM) ,1998
- The model checker SPINIEEE Transactions on Software Engineering, 1997
- The chaining approach for software test data generationACM Transactions on Software Engineering and Methodology, 1996
- Simplification by Cooperating Decision ProceduresACM Transactions on Programming Languages and Systems, 1979
- SELECT---a formal system for testing and debugging programs by symbolic executionPublished by Association for Computing Machinery (ACM) ,1975