Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
skip to main content
10.1145/2001420.2001424acmconferencesArticle/Chapter ViewAbstractPublication PagesisstaConference Proceedingsconference-collections
research-article

Automatic partial loop summarization in dynamic test generation

Published: 17 July 2011 Publication History

Abstract

Whitebox fuzzing extends dynamic test generation based on symbolic execution and constraint solving from unit testing to whole-application security testing. Unfortunately, input-dependent loops may cause an explosion in the number of constraints to be solved and in the number of execution paths to be explored. In practice, whitebox fuzzers arbitrarily bound the number of constraints and paths due to input-dependent loops, at the risk of missing code and bugs.
In this work, we investigate the use of simple loop-guard pattern-matching rules to automatically guess an input constraint defining the number of iterations of input-dependent loops during dynamic symbolic execution. We discover the loop structure of the program on the fly, detect induction variables, which are variables modified by a constant value during loop iterations, and infer simple partial loop invariants relating the value of such variables. Whenever a guess is confirmed later during the current dynamic symbolic execution, we then inject new constraints representing pre and post loop conditions, effectively summarizing sets of executions of that loop. These pre and post conditions are derived from partial loop invariants synthesized dynamically using pattern-matching rules on the loop guards and induction variables, without requiring any static analysis, theorem proving, or input-format specification. This technique has been implemented in the whitebox fuzzer SAGE, scales to large programs with many nested loops, and we present results of experiments with a Windows 7 image parser.

References

[1]
S. Anand, P. Godefroid, and N. Tillmann. Demand-Driven Compositional Symbolic Execution. In TACAS'2008, volume 4963 of LNCS, pages 367--381, Budapest, April 2008. Springer-Verlag.
[2]
S. Artzi, A. Kiezun, J. Dolby, F. Tip, D. Dig, A. M. Paradkar, and M. D. Ernst. Finding Bugs in Web Applications Using Dynamic Test Generation and Explicit-State Model Checking. IEEE Trans. Software Eng., 36(4):474--494, 2010.
[3]
T. Ball, O. Kupferman, and M. Sagiv. Leaping Loops in the Presence of Abstraction. In CAV'2007, Berlin, July 2007.
[4]
M. Barnett, B. E. Chang, R. DeLine, B. Jacobs, and K. R. M. Leino. Boogie: A modular reusable verifier for object-oriented programs. In FMCO'2005, volume 4111 of LNCS, pages 364--387. Springer-Verlag, September 2006.
[5]
B. Boigelot and P. Godefroid. Symbolic Verification of Communication Protocols with Infinite State Spaces using QDDs. In CAV'96, volume 1102 of LNCS, pages 1--12, New Brunswick, August 1996. Springer-Verlag.
[6]
C. Cadar, V. Ganesh, P. M. Pawlowski, D. L. Dill, and D. R. Engler. EXE: Automatically Generating Inputs of Death. In ACM CCS, 2006.
[7]
L. de Moura and N. Bjorner. Z3: An Efficient SMT Solver. In TACAS'2008, volume 4963 of LNCS, pages 337--340, Budapest, April 2008. Springer-Verlag.
[8]
M. Emmi, R. Majumdar, and K. Sen. Dynamic Test Input Generation for Database Applications. In ISSTA'2007, pages 151--162, 2007.
[9]
P. Godefroid. Compositional Dynamic Test Generation. In POPL'2007, pages 47--54, Nice, January 2007.
[10]
P. Godefroid. Software Model Checking Improving Security of a Billion Computers. In SPIN'2009, volume 5578 of LNCS, page 1, Grenoble, June 2009. Springer-Verlag.
[11]
P. Godefroid, N. Klarlund, and K. Sen. DART: Directed Automated Random Testing. In PLDI'2005, pages 213--223, Chicago, June 2005.
[12]
P. Godefroid, M. Y. Levin, and D. Molnar. Automated Whitebox Fuzz Testing. In NDSS'2008, pages 151--166, San Diego, February 2008.
[13]
P. Godefroid, A. V. Nori, S. K. Rajamani, and S. D. Tetali. Compositional May-Must Program Analysis: Unleashing The Power of Alternation. In POPL'2010, pages 43--55, Madrid, January 2010.
[14]
D. Molnar, X. C. Li, and D. Wagner. Dynamic test generation to find integer bugs in x86 binary linux programs. In Proc. of the 18th Usenix Security Symposium, Aug 2009.
[15]
C. Pasareanu and W. Visser. Verification of Java Programs Using Symbolic Execution and Invariant Generation. In SPIN'2004, volume 2989 of LNCS, Barcelona, April 2004. Springer-Verlag.
[16]
P. Saxena, D. Akhawe, S. Hanna, F. Mao, S. McCamant, and D. Song. A Symbolic Execution Framework for JavaScript. In IEEE Symposium on Security and Privacy, pages 513--528, 2010.
[17]
P. Saxena, P. Poosankam, S. McCamant, and D. Song. Loop-Extended Symbolic Execution on Binary Programs. In ISSTA'2009, pages 225--236, Chicago, July 2009.
[18]
N. Tillmann and J. de Halleux. Pex - White Box Test Generation for .NET. In TAP'2008, volume 4966 of LNCS, pages 134--153. Springer-Verlag, April 2008.
[19]
A. Tsitovich, N. Sharygina, Ch. Wintersteiger, and D. Kroening. Loop Summarization and Termination Analysis. In To appear in TACAS'2011, April 2011.
[20]
R. Xu, P. Godefroid, and R. Majumdar. Testing for Buffer Overflows with Length Abstraction. In ISSTA'2008, pages 27--38, Seattle, July 2008.

Cited By

View all

Recommendations

Comments

Information & Contributors

Information

Published In

cover image ACM Conferences
ISSTA '11: Proceedings of the 2011 International Symposium on Software Testing and Analysis
July 2011
394 pages
ISBN:9781450305624
DOI:10.1145/2001420
Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]

Sponsors

In-Cooperation

Publisher

Association for Computing Machinery

New York, NY, United States

Publication History

Published: 17 July 2011

Permissions

Request permissions for this article.

Check for updates

Author Tags

  1. loop invariant generation
  2. program summarization
  3. program testing and verification

Qualifiers

  • Research-article

Conference

ISSTA '11
Sponsor:

Acceptance Rates

Overall Acceptance Rate 58 of 213 submissions, 27%

Upcoming Conference

ISSTA '25

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • Downloads (Last 12 months)42
  • Downloads (Last 6 weeks)1
Reflects downloads up to 18 Jan 2025

Other Metrics

Citations

Cited By

View all
  • (2025)On Extending Incorrectness Logic with Backwards ReasoningProceedings of the ACM on Programming Languages10.1145/37048509:POPL(391-415)Online publication date: 9-Jan-2025
  • (2025)State Merging for Concolic Testing of Event-driven ApplicationsScience of Computer Programming10.1016/j.scico.2025.103264(103264)Online publication date: Jan-2025
  • (2024)A Survey of Software Dynamic Analysis MethodsProgramming and Computing Software10.1134/S036176882401007950:1(90-114)Online publication date: 1-Feb-2024
  • (2024)PASDAJournal of Systems and Software10.1016/j.jss.2024.112037213:COnline publication date: 1-Jul-2024
  • (2024)Knowledge transfer based many-objective approach for finding bugs in multi-path loopsComplex & Intelligent Systems10.1007/s40747-023-01323-wOnline publication date: 24-Jan-2024
  • (2024)Reachability Analysis for Multiloop Programs Using Transition Power AbstractionFormal Methods10.1007/978-3-031-71162-6_29(558-576)Online publication date: 9-Sep-2024
  • (2024)AISE: A Symbolic Verifier by Synergizing Abstract Interpretation and Symbolic Execution (Competition Contribution)Tools and Algorithms for the Construction and Analysis of Systems10.1007/978-3-031-57256-2_19(347-352)Online publication date: 6-Apr-2024
  • (2023)Extracting protocol format as state machine via controlled static loop analysisProceedings of the 32nd USENIX Conference on Security Symposium10.5555/3620237.3620630(7019-7036)Online publication date: 9-Aug-2023
  • (2023)State Merging with Quantifiers in Symbolic ExecutionProceedings of the 31st ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering10.1145/3611643.3616287(1140-1152)Online publication date: 30-Nov-2023
  • (2023)LCVDJournal of Systems and Software10.1016/j.jss.2023.111706202:COnline publication date: 1-Aug-2023
  • Show More Cited By

View Options

Login options

View options

PDF

View or Download as a PDF file.

PDF

eReader

View online with eReader.

eReader

Media

Figures

Other

Tables

Share

Share

Share this Publication link

Share on social media