skip to main content
research-article

QuickFuzz: an automatic random fuzzer for common file formats

Published:08 September 2016Publication History
Skip Abstract Section

Abstract

Fuzzing is a technique that involves testing programs using invalid or erroneous inputs. Most fuzzers require a set of valid inputs as a starting point, in which mutations are then introduced. QuickFuzz is a fuzzer that leverages QuickCheck-style random test-case generationto automatically test programs that manipulate common file formats by fuzzing. We rely on existing Haskell implementations of file-format-handling libraries found on Hackage, the community-driven Haskell code repository. We have tried QuickFuzz in the wild and found that the approach is effective in discovering vulnerabilities in real-world implementations of browsers, image processing utilities and file compressors among others. In addition, we introduce a mechanism to automatically derive random generators for the types representing these formats. QuickFuzz handles most well-known image and media formats, and can be used to test programs and libraries written in any language.

References

  1. Bitflip. Sulley: a pure-python fully automated and unattended fuzzing framework. https://github.com/OpenRCE/ sulley, 2011.Google ScholarGoogle Scholar
  2. CACA Labs. zzuf - multi-purpose fuzzer. http://caca. zoy.org/wiki/zzuf, 2010.Google ScholarGoogle Scholar
  3. S. K. Cha, T. Avgerinos, A. Rebert, and D. Brumley. Unleashing Mayhem on Binary Code. In Proceedings of the 2012 IEEE Symposium on Security and Privacy, SP ’12. IEEE Computer Society, 2012. Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. K. Claessen and J. Hughes. QuickCheck: a lightweight tool for random testing of Haskell programs. Acm sigplan notices, 46(4):53–64, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. K. Claessen, J. Dureg˚ard, and M. H. Pałka. Generating Constrained RandomData withUniformDistribution, pages 18– 34. Springer International Publishing, Cham, 2014. ISBN 978-3-319-07151-0.Google ScholarGoogle Scholar
  6. P. Godefroid, A. Kiezun, and M. Y. Levin. Grammar-based Whitebox Fuzzing. SIGPLAN Not., 2008. Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. Google. honggfuzz: a general-purpose, easy-to-use fuzzer with interesting analysis options. https://github.com/ aoh/radamsa, 2010.Google ScholarGoogle Scholar
  8. Michal Zalewski. American Fuzzy Lop: a security-oriented fuzzer. http://lcamtuf.coredump.cx/afl/, 2010.Google ScholarGoogle Scholar
  9. B. P. Miller, L. Fredriksen, and B. So. An Empirical Study of the Reliability of UNIX Utilities. Commun. ACM, 33(12): 32–44, Dec. 1990. ISSN 0001-0782. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. Mozilla. Dharma: a generation-based, context-free grammar fuzzer. https://github.com/MozillaSecurity/ dharma, 2015.Google ScholarGoogle Scholar
  11. Neil Mitchell. Data.Derive is a library and a tool for deriving instances for Haskell programs. http://hackage. haskell.org/package/derive, 2006.Google ScholarGoogle Scholar
  12. N. Nethercote and J. Seward. Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation. SIGPLAN Not., 42(6):89–100, 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  13. Oulu University Secure Programming Group. A Crash Course to Radamsa. https://github.com/aoh/radamsa, 2010.Google ScholarGoogle Scholar
  14. M. H. Pałka, K. Claessen, A. Russo, and J. Hughes. Testing an Optimising Compiler by Generating Random Lambda Terms. In Proceedings of the 6th International Workshop on Automation of Software Test, AST ’11, pages 91–97, New York, NY, USA, 2011. ACM. ISBN 978-1-4503-0592-1. Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. K. Serebryany, D. Bruening, A. Potapenko, and D. Vyukov. Addresssanitizer: A fast address sanity checker. USENIX ATC’12, pages 28–28, 2012. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. T. Sheard and S. P. Jones. Template Meta-programming for Haskell. SIGPLAN Not., 37(12):60–75, Dec. 2002. ISSN 0362-1340. Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. doi: 10.1145/636517.636528.Google ScholarGoogle Scholar
  18. M. Sutton, A. Greene, and P. Amini. Fuzzing: Brute Force Vulnerability Discovery. Addison-Wesley Professional, 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. Vincent Berthoux. Juicy.Pixels: Haskell library to load & save pictures. https://hackage.haskell.org/package/ JuicyPixels, 2012.Google ScholarGoogle Scholar
  20. X. Yang, Y. Chen, E. Eide, and J. Regehr. Finding and Understanding Bugs in C Compilers. In Proceedings of the 32Nd ACM SIGPLAN Conference on Programming Language Design and Implementation, PLDI ’11, pages 283–294, New York, NY, USA, 2011. ACM. ISBN 978-1-4503-0663-8. Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. A. Zeller and R. Hildebrandt. Simplifying and Isolating Failure-Inducing Input. IEEE Trans. Softw. Eng., 28(2):183– 200, 2002. Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. QuickFuzz: an automatic random fuzzer for common file formats

      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

      Full Access

      • Published in

        cover image ACM SIGPLAN Notices
        ACM SIGPLAN Notices  Volume 51, Issue 12
        Haskell '16
        December 2016
        192 pages
        ISSN:0362-1340
        EISSN:1558-1160
        DOI:10.1145/3241625
        Issue’s Table of Contents
        • cover image ACM Conferences
          Haskell 2016: Proceedings of the 9th International Symposium on Haskell
          September 2016
          192 pages
          ISBN:9781450344340
          DOI:10.1145/2976002

        Copyright © 2016 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: 8 September 2016

        Check for updates

        Qualifiers

        • research-article

      PDF Format

      View or Download as a PDF file.

      PDF

      eReader

      View online with eReader.

      eReader