DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports Events Over 2 million developers have joined DZone. Join Today! Thanks for visiting DZone today,
Edit Profile Manage Email Subscriptions Moderation Admin Console How to Post to DZone Article Submission Guidelines
View Profile
Sign Out
Refcards
Trend Reports
Events
Zones
Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
  1. DZone
  2. Software Design and Architecture
  3. Performance
  4. Fuzzers: A Taxonomy

Fuzzers: A Taxonomy

Check out this post to learn more about fuzzers in the cybersecurity space.

Christopher Lamb user avatar by
Christopher Lamb
CORE ·
Apr. 09, 19 · Analysis
Like (1)
Save
Tweet
Share
4.53K Views

Join the DZone community and get the full member experience.

Join For Free

Fuzzing is an important capability in cybersecurity vulnerability analysis. You can use it to test applications, libraries, network services, you name it. There's a variety of tools available out there for this kind of thing, spanning both the open-source and commercial markets. That said, they still generally take a bit of work to apply to a specific problem.

Interestingly, though it's an approach equally applicable to more traditional software quality assurance, fuzzers have been more actively adopted by the cybersecurity research and development community than software testers. I'm not entirely sure why this is, but I suspect that it's because fuzzing is a much more efficient approach to vulnerability discovery when working with black-box software components than alternatives like source code analysis (especially as you'll only have access to disassembly or decompiled code rather than original code in black-box work).

There are roughly six types of fuzzers. You can organize fuzzers along three different dimensions — mutation or generation fuzzing, dumb or smart fuzzing, and black-box or white-box fuzzing (grey-box fuzzing is certainly a thing, but black-box fuzzing is usually really grey-box fuzzing as you almost always have some knowledge of the target).

Mutation and generation fuzzers handle test case generation differently. Mutation fuzzers mutate a supplied seed input object, while generation fuzzers generate new test cases from a supplied model. Some fuzzers can do both.

Intelligent and dumb buzzers are somewhat inaccurately named. Initially defined to indicate knowledge of and adherence to specific input formats, these terms today relate more to the way that specific fuzzers mutate or generate input rather than specific knowledge of input formats. Most interesting fuzzing requires some kind of a priori knowledge of input formats whether inputs are just randomly changed or tweaked based on some kind of internal algorithm.

Some dumb fuzzers have been very successful, believe it or not. American Fuzzy Lop (AFL) is a dumb fuzzer that has been very successful at finding bugs in a wide range of software products, though it requires access to source code to work best. AFL, though considered a dumb fuzzer as it just flips bits and replaces bytes, still uses a genetic algorithm to create new test cases. Smart fuzzers will change input based on a specific understanding of the input expected. Rather than randomly changing values, smart fuzzers could use specific values with conflicting semantics or generate specific optional metadata to use across a wide number of possible inputs. A dumb fuzzer, like AFL, can be very sophisticated, and smart fuzzers relatively simple, leading to a fair amount of confusion with respect to the application of these particular terms. Again, you can mix these approaches.

Finally, fuzzers can be grouped into either black- or white-box approaches. Black-box fuzzers are more commonly used by cybersecurity researchers looking for vulnerabilities in commercial products. White-box approaches by definition require access to all program artifacts and are usually used by red teams working for organizations responsible for systems or by software testing groups. This is also somewhat inaccurate. External cybersecurity researchers may not have access to source code, for example, but they frequently are able to access either disassembled or decompiled code, as well as other program artifacts like configuration files, registry settings, fonts, icons, or logos. These kinds of artifacts may not be able to be changed in all cases, but they are still usually accessible with some effort and can be used to guide fuzzing work.

Fuzzers can be used to test programs by tweaking input values, as well as networks services by submitting varying input over network connections (you could classify fuzzers along this dimension as well). Some fuzzers can be used in either area, while some are tied to a particular domain. Either way, if you're doing cybersecurity research or application auditing, fuzzers should be a key part of your overall technical approach.

Black box Fuzzing White box (software engineering)

Opinions expressed by DZone contributors are their own.

Popular on DZone

  • Web Application Architecture: The Latest Guide
  • The Future of Cloud Engineering Evolves
  • Java Development Trends 2023
  • Using the PostgreSQL Pager With MariaDB Xpand

Comments

Partner Resources

X

ABOUT US

  • About DZone
  • Send feedback
  • Careers
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 600 Park Offices Drive
  • Suite 300
  • Durham, NC 27709
  • support@dzone.com
  • +1 (919) 678-0300

Let's be friends: