Convert Figma logo to code with AI

google logosyzkaller

syzkaller is an unsupervised coverage-guided kernel fuzzer

5,566
1,253
5,566
425

Top Related Projects

10,909

OSS-Fuzz - continuous fuzzing for open source software.

The fuzzer afl++ is afl with community patches, qemu 5.1 upgrade, collision-free coverage, enhanced laf-intel & redqueen, AFLfast++ power schedules, MOpt mutators, unicorn_mode, and a lot more!

Scalable fuzzing infrastructure.

Security oriented software fuzzer. Supports evolutionary, feedback-driven fuzzing based on code coverage (SW and HW based)

Quick Overview

Syzkaller is an unsupervised, coverage-guided kernel fuzzer developed by Google. It is designed to find bugs in operating system kernels by generating, running, and mutating programs that invoke system calls. Syzkaller supports multiple operating systems and architectures, making it a powerful tool for kernel developers and security researchers.

Pros

  • Highly effective at finding kernel bugs and vulnerabilities
  • Supports multiple operating systems (Linux, FreeBSD, NetBSD, OpenBSD, Windows, Android, Fuchsia)
  • Provides extensive documentation and detailed crash reports
  • Continuously updated and maintained by Google and the open-source community

Cons

  • Complex setup process, especially for non-Linux systems
  • Requires significant computational resources for optimal performance
  • May generate false positives or duplicate bug reports
  • Steep learning curve for users unfamiliar with kernel development or fuzzing techniques

Getting Started

To get started with Syzkaller, follow these steps:

  1. Clone the repository:

    git clone https://github.com/google/syzkaller.git
    
  2. Install dependencies (for Ubuntu):

    sudo apt-get install golang-go gcc binutils bison flex make
    
  3. Build Syzkaller:

    cd syzkaller
    make
    
  4. Configure Syzkaller (create a my.cfg file with appropriate settings)

  5. Run Syzkaller:

    ./bin/syz-manager -config my.cfg
    

For detailed instructions and configuration options, refer to the official documentation in the repository.

Competitor Comparisons

10,909

OSS-Fuzz - continuous fuzzing for open source software.

Pros of OSS-Fuzz

  • Broader scope: Supports fuzzing for multiple programming languages and various types of software
  • Continuous integration: Integrates easily with CI/CD pipelines for automated fuzzing
  • Large-scale infrastructure: Leverages Google's computing resources for extensive fuzzing

Cons of OSS-Fuzz

  • Higher complexity: Requires more setup and configuration compared to Syzkaller
  • Less specialized: Not as focused on kernel fuzzing as Syzkaller

Code Comparison

Syzkaller (syscall description):

open(file ptr[in, filename], flags flags[open_flags], mode flags[open_mode]) fd

OSS-Fuzz (build script):

#!/usr/bin/python3
import os
import sys
import subprocess

def build_fuzzers(src, work, project_name):
    # Build steps here

Key Differences

  • Syzkaller focuses on kernel fuzzing, while OSS-Fuzz is a general-purpose fuzzing platform
  • Syzkaller uses a custom description language for syscalls, whereas OSS-Fuzz relies on project-specific build scripts
  • OSS-Fuzz supports a wider range of programming languages and integrates with various build systems

Use Cases

  • Choose Syzkaller for specialized kernel and driver fuzzing
  • Opt for OSS-Fuzz when fuzzing diverse open-source projects across different languages and platforms

The fuzzer afl++ is afl with community patches, qemu 5.1 upgrade, collision-free coverage, enhanced laf-intel & redqueen, AFLfast++ power schedules, MOpt mutators, unicorn_mode, and a lot more!

Pros of AFLplusplus

  • More versatile, supporting a wider range of target programs and platforms
  • Offers advanced features like power schedules and custom mutators
  • Actively maintained with frequent updates and community contributions

Cons of AFLplusplus

  • Steeper learning curve due to numerous configuration options
  • May require more manual setup and tuning for optimal performance
  • Less specialized for kernel fuzzing compared to Syzkaller

Code Comparison

AFLplusplus example (instrumentation):

#define AFL_LLVM_PASS
#include "config.h"
#include "debug.h"

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include "llvm/ADT/Statistic.h"
#include "llvm/IR/IRBuilder.h"

Syzkaller example (syscall description):

include <linux/keyctl.h>

resource fd[int32]: 0xffffffffffffffff, AT_FDCWD
resource key[int32]

keyctl$get_keyring_id(id keyring_id, create bool) key
keyctl$join_session_keyring(name ptr[in, string]) key

Both projects are powerful fuzzing tools, but AFLplusplus is more general-purpose, while Syzkaller specializes in kernel fuzzing. AFLplusplus offers more flexibility and features, but Syzkaller provides a more streamlined experience for its specific use case.

Scalable fuzzing infrastructure.

Pros of ClusterFuzz

  • Supports multiple programming languages and platforms
  • Offers a web interface for easier management and result analysis
  • Provides scalable distributed fuzzing infrastructure

Cons of ClusterFuzz

  • More complex setup and configuration process
  • Requires more resources for deployment and maintenance
  • Steeper learning curve for new users

Code Comparison

Syzkaller (system call definition):

syz_open_dev = (dev ptr[in, string], id intptr, flags flags[open_flags]) fd

ClusterFuzz (fuzzer configuration):

fuzz_target:
  language: cpp
  engine: libFuzzer
  sanitizer: address

Both projects focus on fuzzing, but Syzkaller specializes in kernel fuzzing, while ClusterFuzz is a more general-purpose fuzzing platform. Syzkaller uses a custom description language for system calls, whereas ClusterFuzz employs configuration files for various fuzzing settings.

ClusterFuzz offers broader language support and a user-friendly interface, making it suitable for diverse projects. However, this versatility comes at the cost of increased complexity and resource requirements. Syzkaller, being more specialized, may be easier to set up for kernel-specific fuzzing tasks but lacks the extensive features and language support of ClusterFuzz.

Security oriented software fuzzer. Supports evolutionary, feedback-driven fuzzing based on code coverage (SW and HW based)

Pros of Honggfuzz

  • Simpler setup and usage, making it more accessible for beginners
  • Supports a wider range of targets, including userspace applications
  • Offers unique features like hardware-based feedback for ARM

Cons of Honggfuzz

  • Less specialized for kernel fuzzing compared to Syzkaller
  • May not be as effective for finding complex, multi-step vulnerabilities in kernels
  • Lacks some advanced features specific to kernel fuzzing

Code Comparison

Syzkaller (system call definition):

open(file ptr[in, filename], flags flags[open_flags], mode flags[open_mode]) fd

Honggfuzz (example usage):

honggfuzz -f input_corpus/ -w output_corpus/ -- ./target_binary ___FILE___

Both tools use different approaches for defining and executing fuzz targets. Syzkaller focuses on system call definitions for kernel fuzzing, while Honggfuzz uses a more general command-line approach for various target types.

Syzkaller is specifically designed for kernel fuzzing, offering advanced features like coverage-guided syscall generation and kernel-specific sanitizers. Honggfuzz, while versatile, may not provide the same level of specialized kernel fuzzing capabilities but offers broader applicability across different target types.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

syzkaller - kernel fuzzer

CI Status OSS-Fuzz Go Report Card Coverage Status GoDoc License

syzkaller ([siːzˈkɔːlə]) is an unsupervised coverage-guided kernel fuzzer.
Supported OSes: FreeBSD, Fuchsia, gVisor, Linux, NetBSD, OpenBSD, Windows.

Mailing list: syzkaller@googlegroups.com (join on web or by email).

Found bugs: Darwin/XNU, FreeBSD, Linux, NetBSD, OpenBSD, Windows.

Documentation

Initially, syzkaller was developed with Linux kernel fuzzing in mind, but now it's being extended to support other OS kernels as well. Most of the documentation at this moment is related to the Linux kernel. For other OS kernels check: Darwin/XNU, FreeBSD, Fuchsia, NetBSD, OpenBSD, Starnix, Windows, gVisor. Akaros,

Disclaimer

This is not an official Google product.