skip to main content
10.1145/2699026.2699098acmconferencesArticle/Chapter ViewAbstractPublication PagescodaspyConference Proceedingsconference-collections
research-article

The BORG: Nanoprobing Binaries for Buffer Overreads

Published:02 March 2015Publication History

ABSTRACT

Automated program testing tools typically try to explore, and cover, as much of a tested program as possible, while attempting to trigger and detect bugs. An alternative and complementary approach can be to first select a specific part of a program that may be subject to a specific class of bug, and then narrowly focus exploration towards program paths that could trigger such a bug.

In this work, we introduce the BORG (Buffer Over-Read Guard), a testing tool that uses static and dynamic program analysis, taint propagation and symbolic execution to detect buffer overread bugs in real-world programs. BORG works by first selecting buffer accesses that could lead to an overread and then guiding symbolic execution towards those accesses along program paths that could actually lead to an overread. BORG operates on binaries and does not require source code. To demonstrate BORG's effectiveness, we use it to detect overreads in six complex server applications and libraries, including lighttpd, FFmpeg and ClamAV.

References

  1. T. Avgerinos, S. K. Cha, B. L. T. Hao, and D. Brumley. AEG: Automatic Exploit Generation. In Proceedings of the Network and Distributed System Security Symposium (NDSS), 2011.Google ScholarGoogle Scholar
  2. D. Babić, L. Martignoni, S. McCamant, and D. Song. Statically-directed dynamic automated test generation. In Proceedings of the Symposium on Software Testing and Analysis (ISTA), 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. F. Bellard. Qemu, a fast and portable dynamic translator. In Proceedings of the USENIX Annual Technical Conference (USENIX ATC), 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. E. Bosman, A. Slowinska, and H. Bos. Minemu: The World's Fastest Taint Tracker. In Proceedings of the Symposium on Research in Attacks, Intrusions and Defenses (RAID), 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. S. Bucur, V. Ureche, C. Zamfir, and G. Candea. Parallel symbolic execution for automated real-world software testing. In Proceedings of the European conference on Computer systems (EuroSys), 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. S. Bugrara and D. Engler. Redundant State Detection for Dynamic Symbolic Execution. In Proceedings of the USENIX Annual Technical Conference (USENIX ATC), 2013. Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. J. Burnim and K. Sen. Heuristics for scalable dynamic test generation. In Proceedings of the IEEE/ACM Conference on Automated Software Engineering (ASE), 2008. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. C. Cadar, D. Dunbar, and D. Engler. Klee: unassisted and automatic generation of high-coverage tests for complex systems programs. In Proceedings of the USENIX Conference on Operating Systems Design and Implementation (OSDI), 2008. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. C. Cadar, V. Ganesh, P. M. Pawlowski, D. L. Dill, and D. R. Engler. Exe: Automatically generating inputs of death. In Proceedings of the ACM Conference on Computer and Communications Security (CCS), 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. S. K. Cha, T. Avgerinos, A. Rebert, and D. Brumley. Unleashing mayhem on binary code. In Proceedings of the IEEE Symposium on Security and Privacy (S&P), Washington, DC, USA, 2012. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. X. Chen, A. Slowinska, and H. Bos. Who allocated my memory? Detecting custom memory allocators in C binaries. In Proceedings of the Working Conference on Reverse Engineering (WCRE), Koblenz, Germany, 2013.Google ScholarGoogle ScholarCross RefCross Ref
  12. V. Chipounov, V. Kuznetsov, and G. Candea. S2e: a platform for in-vivo multi-path analysis of software systems. In Proceedings of the Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS), 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  13. C. Y. Cho, D. Babić, P. Poosankam, K. Z. Chen, E. X. Wu, and D. Song. MACE: Model-inference-Assisted Concolic Exploration for Protocol and Vulnerability Discovery. In Proceedings of the USENIX Security Symposium (USENIX SEC), 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  14. Codenomicon. The Heartbleed Bug. heartbleed.com.Google ScholarGoogle Scholar
  15. H. Cui, G. Hu, J. Wu, and J. Yang. Verifying systems rules using rule-directed symbolic execution. In Proceedings of the Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS), 2013. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. E. W. Dijkstra. A note on two problems in connexion with graphs. Numerische Mathematik, 1959. Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. C. Eagle. The IDA Pro Book. William Polloc, 2011.Google ScholarGoogle Scholar
  18. V. Ganesh and D. L. Dill. A decision procedure for bit-vectors and arrays. In Proceedings of the Conference on Computer Aided Verification (CAV), 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. P. Godefroid, N. Klarlund, and K. Sen. Dart: Directed automated random testing. In Proceedings of the ACM Conference on Programming Language Design and Implementation (PLDI), 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. P. Godefroid, M. Levin, and D. Molnar. Automated whitebox fuzz testing. In Proceedings of the Network and Distributed System Security Conference (NDSS), 2008.Google ScholarGoogle Scholar
  21. P. Godefroid and D. Luchaup. Automatic partial loop summarization in dynamic test generation. In Proceedings of the Symposium on Software Testing and Analysis (ISTA), 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. I. Haller, A. Slowinska, and H. Bos. Dowser: a guided fuzzer to find buffer overflow vulnerabilities. In Proceedings of the European Workshop on System Security (Eurosec), 2013.Google ScholarGoogle Scholar
  23. I. Haller, A. Slowinska, M. Neugschwandtner, and H. Bos. Dowsing for overflows: A guided fuzzer to find buffer boundary violations. In Proceedings of the USENIX Security Symposium (USENIX SEC), 2013. Google ScholarGoogle ScholarDigital LibraryDigital Library
  24. M. G. Kang, S. McCamant, P. Poosankam, and D. Song. DTA++: Dynamic Taint Analysis with Targeted Control-Flow Propagation. In Proceedings of the Network and Distributed System Security Symposium (NDSS), 2011.Google ScholarGoogle Scholar
  25. V. Kuznetsov, J. Kinder, S. Bucur, and G. Candea. Efficient state merging in symbolic execution. In Proceedings of the ACM Conference on Programming Language Design and Implementation (PLDI), 2012. Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. K.-K. Ma, K. Y. Phang, J. S. Foster, and M. Hicks. Directed symbolic execution. In Proceedings of the Conference on Static Analysis, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. P. D. Marinescu and C. Cadar. make test-zesti: a symbolic execution solution for improving regression testing. In Proceedings of the International Conference on Software Engineering (ICSE), 2012. Google ScholarGoogle ScholarDigital LibraryDigital Library
  28. NIST. National Vulnerability Database. web.nvd.nist.gov.Google ScholarGoogle Scholar
  29. S. Person, G. Yang, N. Rungta, and S. Khurshid. Directed Incremental Symbolic Execution. In Proceedings of the ACM Conference on Programming Language Design and Implementation (PLDI), 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  30. N. Rungta, E. Mercer, and W. Visser. Efficient testing of concurrent programs with abstraction-guided symbolic execution. In Model Checking Software, LNCS. 2009. Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. P. Saxena, P. Poosankam, S. McCamant, and D. Song. Loop-extended symbolic execution on binary programs. In Proceedings of the Symposium on Software Testing and Analysis (ISTA), 2009. Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. K. Sen, D. Marinov, and G. Agha. CUTE: a concolic unit testing engine for C. In Proceedings of the European Software Engineering Conference, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  33. K. Serebryany, D. Bruening, A. Potapenko, and D. Vyukov. Addresssanitizer: A fast address sanity checker. In Proceedings of the USENIX Annual Technical Conference (USENIX ATC), 2012. Google ScholarGoogle ScholarDigital LibraryDigital Library
  34. M. Sharir. A strong connectivity algorithm and its applications to data flow analysis. In Computers and Mathematics with Applications, 1981.Google ScholarGoogle ScholarCross RefCross Ref
  35. A. Slowinska, T. Stancescu, and H. Bos. Howard: a dynamic excavator for reverse engineering data structures. In Proceedings of the Network and Distributed System Security Symposium (NDSS), 2011.Google ScholarGoogle Scholar
  36. K. Z. Snow, F. Monrose, L. Davi, A. Dmitrienko, C. Liebchen, and A.-R. Sadeghi. Just-in-time code reuse: On the effectiveness of fine-grained address space layout randomization. In Proceedings of the IEEE Symposium on Security and Privacy (S&P), 2013. Google ScholarGoogle ScholarDigital LibraryDigital Library
  37. A. Sotirov and M. Dowd. Bypassing Browser Memory Protections: Setting back browser security by 10 years. In Blackhat, 2008.Google ScholarGoogle Scholar
  38. T. Xie, N. Tillmann, P. de Halleux, and W. Schulte. Fitness-guided path exploration in dynamic symbolic execution. In Proceedings of the Conference on Dependable Systems and Networks (DSN), 2009.Google ScholarGoogle ScholarCross RefCross Ref
  39. C. Zamfir and G. Candea. Execution synthesis: a technique for automated software debugging. In Proceedings of the European conference on Computer systems (EuroSys), 2010. Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. The BORG: Nanoprobing Binaries for Buffer Overreads

          Recommendations

          Comments

          Login options

          Check if you have access through your login credentials or your institution to get full access on this article.

          Sign in
          • Published in

            cover image ACM Conferences
            CODASPY '15: Proceedings of the 5th ACM Conference on Data and Application Security and Privacy
            March 2015
            362 pages
            ISBN:9781450331913
            DOI:10.1145/2699026

            Copyright © 2015 ACM

            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 the author(s) 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].

            Publisher

            Association for Computing Machinery

            New York, NY, United States

            Publication History

            • Published: 2 March 2015

            Permissions

            Request permissions about this article.

            Request Permissions

            Check for updates

            Qualifiers

            • research-article

            Acceptance Rates

            CODASPY '15 Paper Acceptance Rate19of91submissions,21%Overall Acceptance Rate149of789submissions,19%

            Upcoming Conference

            CODASPY '24

          PDF Format

          View or Download as a PDF file.

          PDF

          eReader

          View online with eReader.

          eReader