Please check our latest project Hydra, which is published on SOSP19 and involves the latest version of Janus.
Janus is a general file system fuzzer. Janus finds memory corruptions in in-kernel file systems on Linux by exploring the input space of both images and syscalls simultaneously in an efficient and effective manner. Janus is implemented as an AFL variant. As an OS fuzzer, its target is not traditional VMs but Linux Kernel Library (https://github.com/lkl). Janus has found around 100 unique crashes in mainstream file systems with 32 CVEs assigned so far.
We currently release the image parsing support for ext4, btrfs and F2FS. Stay tuned for more extensions and the details of the found bugs!
Here we explain the usage of Janus by fuzzing btrfs as an example.
Compile ff-gcc (for instrumentation)
Compile the core fuzzing engine
Compile (ported) lkl 4.17
Compile image parser
Seed images
Run fuzzer
We need a directory to store seed programs based on the initial image status
Create seed programs
Create the input directory and the output directory for Janus
If you only want to fuzz images (and run the fixed operations in LKL's fsfuzz.c):
If you only want to fuzz file operations (which are performed always on the same seed image):
19 commits
C
96.0%
C++
1.4%
Assembly
1.4%
Please check our latest project Hydra, which is published on SOSP19 and involves the latest version of Janus.
Janus is a general file system fuzzer. Janus finds memory corruptions in in-kernel file systems on Linux by exploring the input space of both images and syscalls simultaneously in an efficient and effective manner. Janus is implemented as an AFL variant. As an OS fuzzer, its target is not traditional VMs but Linux Kernel Library (https://github.com/lkl). Janus has found around 100 unique crashes in mainstream file systems with 32 CVEs assigned so far.
We currently release the image parsing support for ext4, btrfs and F2FS. Stay tuned for more extensions and the details of the found bugs!
Here we explain the usage of Janus by fuzzing btrfs as an example.
Compile ff-gcc (for instrumentation)
Compile the core fuzzing engine
Compile (ported) lkl 4.17
Compile image parser
Seed images
Run fuzzer
We need a directory to store seed programs based on the initial image status
Create seed programs
Create the input directory and the output directory for Janus
If you only want to fuzz images (and run the fixed operations in LKL's fsfuzz.c):
If you only want to fuzz file operations (which are performed always on the same seed image):
19 commits
C
96.0%
C++
1.4%
Assembly
1.4%