All Projects → oracle → Kernel Fuzzing

oracle / Kernel Fuzzing

Licence: other
Fuzzers for the Linux kernel

Programming Languages

hack
652 projects

Labels

Projects that are alternatives of or similar to Kernel Fuzzing

Zeke
A POSIX-like OS for ARM processors.
Stars: ✭ 79 (-20.2%)
Mutual labels:  kernel
Theseus
A modern experimental OS written from scratch in Rust to explore novel OS structure, state management techniques, and how to maximally leverage the power of language by shifting OS responsibilities into the compiler.
Stars: ✭ 1,273 (+1185.86%)
Mutual labels:  kernel
Ktf
Kernel Test Framework
Stars: ✭ 93 (-6.06%)
Mutual labels:  kernel
Ktf
Kernel Test Framework - a unit test framework for the Linux kernel
Stars: ✭ 81 (-18.18%)
Mutual labels:  kernel
Skiboot
OPAL boot and runtime firmware for POWER
Stars: ✭ 85 (-14.14%)
Mutual labels:  kernel
Dgos
Operating System
Stars: ✭ 90 (-9.09%)
Mutual labels:  kernel
Ntphp
Ever wanted to execute PHP in your kernel driver? Look no further!
Stars: ✭ 76 (-23.23%)
Mutual labels:  kernel
Boneos
💥 BoneOS Kernel and Operating System Source Tree
Stars: ✭ 96 (-3.03%)
Mutual labels:  kernel
Mimiker
Simple unix-like operating system for education and research purposes
Stars: ✭ 85 (-14.14%)
Mutual labels:  kernel
Kernelgat
The source codes for Fine-grained Fact Verification with Kernel Graph Attention Network.
Stars: ✭ 92 (-7.07%)
Mutual labels:  kernel
Eggos
A Go unikernel running on x86 bare metal
Stars: ✭ 1,232 (+1144.44%)
Mutual labels:  kernel
Softiwarp
SoftiWARP: Software iWARP kernel driver and user library for Linux
Stars: ✭ 84 (-15.15%)
Mutual labels:  kernel
Windows Kernel Explorer
A free but powerful Windows kernel research tool.
Stars: ✭ 1,299 (+1212.12%)
Mutual labels:  kernel
Deos
The distributed exokernel operating system
Stars: ✭ 80 (-19.19%)
Mutual labels:  kernel
Ipod Gadget
iPod usb gadget for audio playback
Stars: ✭ 94 (-5.05%)
Mutual labels:  kernel
Webboot
Tools to let a u-root instance boot signed live distro images over the web
Stars: ✭ 78 (-21.21%)
Mutual labels:  kernel
Falkon
Large-scale, multi-GPU capable, kernel solver
Stars: ✭ 88 (-11.11%)
Mutual labels:  kernel
Osee
Collection of resources for my preparation to take the OSEE certification.
Stars: ✭ 98 (-1.01%)
Mutual labels:  kernel
Hacksysextremevulnerabledriver
HackSys Extreme Vulnerable Windows Driver
Stars: ✭ 1,330 (+1243.43%)
Mutual labels:  kernel
Reactos
A free Windows-compatible Operating System
Stars: ✭ 10,216 (+10219.19%)
Mutual labels:  kernel

Introduction

kernel-fuzzing is a repository of fuzzers for the Linux kernel. Each fuzzer usually targets a specific subsystem and knows how to turn a small binary "testcase" (usually a few kilobytes or less in size) into a sequence of syscalls and arguments that will trigger some interesting code path in the kernel.

The fuzzers were originally meant to be used with American Fuzzy Lop (AFL), but could in theory be used with any framework with a small amount of glue code.

Getting started

Prerequisites

  • afl.git: You will need our patches for reading the kernel instrumentation feedback from /dev/afl or /dev/kcov.

  • linux.git: You will need our branch with the AFL patches and satconfig patches:

     $ git pull https://github.com/vegard/linux-2.6.git v4.6+kconfig-sat
    
  • kvm/qemu: KVM is required for certain fuzzers or if you just want to use KVM instead of UML.

  • gcc 5: gcc 5 or later is needed for building the kernel using our instrumentation plugin. On Ubuntu you can do:

     $ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
     $ sudo apt-get update
     $ sudo apt-get install gcc-5
    
  • Python packages: jinja2 and yaml. On Ubuntu you can do:

     $ sudo apt-get install python-jinja2
     $ sudo apt-get install python-yaml
    

Prepare the kernel branch

  1. Check out the kernel version that you want to test

  2. Merge the kernel branch into AFL.

  3. Merge the satconfig branch:

     $ git pull https://github.com/vegard/linux-2.6.git v4.6+kconfig-sat
    
  4. Set the 'linux_afl_rev' variable in config.yml to point to the resulting commit (can be a branch, a sha1, or even just 'HEAD')

Set up config.yml

Have a look at config-example.yml.

Launch a fuzzer

  1. Start screen

  2. Run the following command:

     $ bin/start --master ext4 0
    

This should start a single ext4 fuzzer in the current screen window.

  1. If the fuzzer stops or crashes, you can resume it later with:

     $ bin/start --resume --master ext4 0
    
  2. If you want to start additional fuzzers, create a new screen window and run e.g.:

     $ bin/start ext4 1
    
  3. If you want to run many fuzzers in parallel, it is advised that you bind each fuzzer to a single, specific CPU:

     $ taskset -c 0 bin/start --master ext4 0
     $ taskset -c 1 bin/start ext4 1
     ...
    

How to contribute

Please see CONTRIBUTING.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].