Skip to main content
Log in

A Formal Model for Detecting Bugs by Symbolic Execution of Programs

  • Published:
Programming and Computer Software Aims and scope Submit manuscript

Abstract

Automatic detection of bugs in programs is an extremely important direction of current research and development in the field of program reliability and security assurance. Earlier studies covered, methods for program analysis that combine the dynamic symbolic execution, randomized testing, and static analysis. In this paper, a formal model for detecting bugs using the symbolic execution of programs and its implementation for detecting the buffer bounds violation is presented. A formal model of the program symbolic execution is described, and a theorem on detecting a bug on the basis of the violation of the operation domain is formulated and proved. An implementation of the buffer bounds violation analyzer in the process of symbolic program execution is described, and the application of the implemented prototype for analyzing a set of programs in Debian Linux is presented. The experiments confirm the actionability of the proposed method.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Institutional subscriptions

Fig. 1.

Similar content being viewed by others

REFERENCES

  1. Miller, B.P., Fredriksen, L., and So, B., An empirical study of the reliability of UNIX utilities, Comm. ACM, 2009, vol. 33, no. 12, pp. 32–44.

    Article  Google Scholar 

  2. Zalewski, M., Symbolic execution in vuln research. https://lcamtuf.blogspot.com/2015/02/symbolic-execution-in-vuln-research.html

  3. Boyer, R.S., Elspas, B., and Levitt, K.N., SELECT – a formal system for testing and debugging programs by symbolic execution, Proc. of the International Conference on Reliable software, 1975, pp. 234–245.

  4. Gerasimov, A. Yu. and Kruglov, L.V., Input data generation for reaching specific function in program by iterative dynamic analysis method, Trudy ISP RAN, 2016, vol. 28, no. 5, pp. 159–174.

    Google Scholar 

  5. Gerasimov, A. Yu. Kruglov, L.V., Ermakov, M.K., and Vartanov, S.P., An approach to determining reachability of program flaws detected by static analysis using dynamic symbolic execution of programs, Trudy ISP RAN, 2017, vol. 29, no. 5, pp. 111–134.

    Google Scholar 

  6. Godefroid, P., Levin, M.Y., and Molnar, D., SAGE: Whitebox fuzzing for security testing, Comm. ACM, 2012, vol. 55, no. 3, pp. 40–44.

    Article  Google Scholar 

  7. CWE-476: NULL Pointer Dereference. https://cwe.mitre.org/data/definitions/476.html

  8. CWE-121: Stack-based Buffer Overflow. https://cwe.mitre.org/data/definitions/121.html

  9. CWE-122: Heap-based Buffer Overflow. https://cwe.mitre.org/data/definitions/122.html

  10. CWE-123: Write-what-where Condition. https://cwe.mitre.org/data/definitions/123.html

  11. CWE-125: Out-of-bounds Read. https://cwe.mitre.org/data/definitions/125.html

  12. CWE-787: Out-of-bounds Write. https://cwe.mitre.org/data/definitions/787.html

  13. Gerasimov, A., Vartanov, S., Ermakov, M., Kruglov, L., Kutz, D., Novikov, A., and Asryan, S., Anxiety: A dynamic symbolic execution framework, Proc. of the 2017 Ivannikov ISP RAS Open Conference, 2017, pp. 16–21.

  14. Fedotov, A.N., Kaushan, V.V., Gaissaryan, S.S., and Kurmangaleev Sh.F., Building security predicates for some types of vulnerabilities, Trudy ISP RAN, 2017, vol. 29, no. 6, pp. 151–162.

    Google Scholar 

  15. Bruening, D, Garnett, T., and Amarasinghe, S., An infrastructure for adaptive dynamic optimization, Proc. of the International Symposium on Code Generation and Optimization, 2003, pp. 265–275.

Download references

Funding

The work was supported by the Russian Foundation for Basic Research, project no. 17-07-00702.

Author information

Authors and Affiliations

Authors

Corresponding authors

Correspondence to A. Yu. Gerasimov, D. O. Kuts or A. A. Novikov.

Additional information

Translated by A. Klimontovich

Rights and permissions

Reprints and permissions

About this article

Check for updates. Verify currency and authenticity via CrossMark

Cite this article

Gerasimov, A.Y., Kuts, D.O. & Novikov, A.A. A Formal Model for Detecting Bugs by Symbolic Execution of Programs. Program Comput Soft 46, 731–736 (2020). https://doi.org/10.1134/S0361768820080046

Download citation

  • Received:

  • Revised:

  • Accepted:

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1134/S0361768820080046

Navigation