lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 14 Oct 2022 08:48:30 +0000 From: Hrutvik Kanabar <hrkanabar@...il.com> To: Hrutvik Kanabar <hrutvik@...gle.com> Cc: Marco Elver <elver@...gle.com>, Aleksandr Nogikh <nogikh@...gle.com>, kasan-dev@...glegroups.com, Alexander Viro <viro@...iv.linux.org.uk>, linux-fsdevel@...r.kernel.org, linux-kernel@...r.kernel.org, Theodore Ts'o <tytso@....edu>, Andreas Dilger <adilger.kernel@...ger.ca>, linux-ext4@...r.kernel.org, Chris Mason <clm@...com>, Josef Bacik <josef@...icpanda.com>, David Sterba <dsterba@...e.com>, linux-btrfs@...r.kernel.org, Jaegeuk Kim <jaegeuk@...nel.org>, Chao Yu <chao@...nel.org>, linux-f2fs-devel@...ts.sourceforge.net, "Darrick J . Wong" <djwong@...nel.org>, linux-xfs@...r.kernel.org, Namjae Jeon <linkinjeon@...nel.org>, Sungjong Seo <sj1557.seo@...sung.com>, Anton Altaparmakov <anton@...era.com>, linux-ntfs-dev@...ts.sourceforge.net Subject: [PATCH RFC 0/7] fs: Debug config option to disable filesystem checksum verification for fuzzing From: Hrutvik Kanabar <hrutvik@...gle.com> Fuzzing is a proven technique to discover exploitable bugs in the Linux kernel. But fuzzing filesystems is tricky: highly structured disk images use redundant checksums to verify data integrity. Therefore, randomly-mutated images are quickly rejected as corrupt, testing only error-handling code effectively. The Janus [1] and Hydra [2] projects probe filesystem code deeply by correcting checksums after mutation. But their ad-hoc checksum-correcting code supports only a few filesystems, and it is difficult to support new ones - requiring significant duplication of filesystem logic which must also be kept in sync with upstream changes. Corrected checksums cannot be guaranteed to be valid, and reusing this code across different fuzzing frameworks is non-trivial. Instead, this RFC suggests a config option: `DISABLE_FS_CSUM_VERIFICATION`. When it is enabled, all filesystems should bypass redundant checksum verification, proceeding as if checksums are valid. Setting of checksums should be unaffected. Mutated images will no longer be rejected due to invalid checksums, allowing testing of deeper code paths. Though some filesystems implement their own flags to disable some checksums, this option should instead disable all checksums for all filesystems uniformly. Critically, any bugs found remain reproducible on production systems: redundant checksums in mutated images can be fixed up to satisfy verification. The patches below suggest a potential implementation for a few filesystems, though we may have missed some checksums. The option requires `DEBUG_KERNEL` and is not intended for production systems. The first user of the option would be syzbot. We ran preliminary local syzkaller tests to compare behaviour with and without these patches. With the patches, we found a 19% increase in coverage, as well as many new crash types and increases in the total number of crashes: Filesystem | % new crash types | % increase in crashes —----------|-------------------|---------------------- ext4 | 60% | 1400% btrfs | 25% | 185% f2fs | 63% | 16% [1] Fuzzing file systems via two-dimensional input space exploration, Xu et al., 2019, IEEE Symposium on Security and Privacy, doi: 10.1109/SP.2019.00035 [2] Finding semantic bugs in file systems with an extensible fuzzing framework, Kim et al., 2019, ACM Symposium on Operating Systems Principles, doi: 10.1145/3341301.3359662 Hrutvik Kanabar (7): fs: create `DISABLE_FS_CSUM_VERIFICATION` config option fs/ext4: support `DISABLE_FS_CSUM_VERIFICATION` config option fs/btrfs: support `DISABLE_FS_CSUM_VERIFICATION` config option fs/exfat: support `DISABLE_FS_CSUM_VERIFICATION` config option fs/xfs: support `DISABLE_FS_CSUM_VERIFICATION` config option fs/ntfs: support `DISABLE_FS_CSUM_VERIFICATION` config option fs/f2fs: support `DISABLE_FS_CSUM_VERIFICATION` config option fs/Kconfig.debug | 20 ++++++++++++++++++++ fs/btrfs/check-integrity.c | 3 ++- fs/btrfs/disk-io.c | 6 ++++-- fs/btrfs/free-space-cache.c | 3 ++- fs/btrfs/inode.c | 3 ++- fs/btrfs/scrub.c | 9 ++++++--- fs/exfat/nls.c | 3 ++- fs/exfat/super.c | 3 +++ fs/ext4/bitmap.c | 6 ++++-- fs/ext4/extents.c | 3 ++- fs/ext4/inode.c | 3 ++- fs/ext4/ioctl.c | 3 ++- fs/ext4/mmp.c | 3 ++- fs/ext4/namei.c | 6 ++++-- fs/ext4/orphan.c | 3 ++- fs/ext4/super.c | 6 ++++-- fs/ext4/xattr.c | 3 ++- fs/f2fs/checkpoint.c | 3 ++- fs/f2fs/compress.c | 3 ++- fs/f2fs/f2fs.h | 2 ++ fs/f2fs/inode.c | 3 +++ fs/ntfs/super.c | 3 ++- fs/xfs/libxfs/xfs_cksum.h | 5 ++++- lib/Kconfig.debug | 6 ++++++ 24 files changed, 86 insertions(+), 25 deletions(-) create mode 100644 fs/Kconfig.debug -- 2.38.0.413.g74048e4d9e-goog
Powered by blists - more mailing lists