Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
fisy-fuzz — Ceci est le framework complet de fuzzing du système de fichiers que j'ai présenté à la conférence Hack in the Box 2020 Lockdown Edition en avril. | Kitploit
Outils/GitHubGitHub/0xricksanchez/fisy-fuzz
Analyse des VulnérabilitésExploitationFuzzing
GitHub0xricksanchez/fisy-fuzz

fisy-fuzz

Ceci est le framework complet de fuzzing du système de fichiers que j'ai présenté à la conférence Hack in the Box 2020 Lockdown Edition en avril.

Voir le dépôt
150232il y a 3 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

FI(le) SY(stem) - FUZZer

Ceci est le framework complet de fuzzing de systèmes de fichiers que j'ai présenté à la conférence Hack in the Box 2020 Lockdown Edition en avril.

  • Exposé de la conférence
    • Vidéo unique de l'exposé
  • Matériel de conférence

Framework overview

Objectif

L'objectif de ce framework est de découvrir des bugs de sécurité du noyau sur les systèmes UNIX avec un fort accent sur les systèmes BSD. Il a été développé et largement testé contre FreeBSD, OpenBSD et NetBSD mais possède également un support mineur pour les hôtes basés sur Linux. Nous avons réussi à découvrir plus de 100 bugs uniques du noyau pour les systèmes de fichiers basés sur UFS et EXT tout en obtenant beaucoup d'informations sur l'ajout récent de ZFS.

Générateur de cas de test

Le makeFS2.py peut être utilisé comme utilitaire autonome pour générer différents systèmes de fichiers valides. L'utilisation est expliquée en détail dans le dépôt de matériel de conférence

Prérequis

Le framework a été uniquement testé sur Ubuntu 18.04. Il repose sur KVM, QEMU et libvirt. Le script Requirements.sh installe toutes les dépendances nécessaires. Le framework pourrait être entièrement fonctionnel sur la dernière version Ubuntu 20.04. D'autres systèmes hôtes non basés sur apt devraient être facilement supportés et ne nécessitent que des modifications mineures dans Requirements.sh. Une fois les prérequis satisfaits, vous pouvez continuer avec les étapes d'installation !

Installation

Reportez-vous au SETUP.md. Si certaines étapes ne sont pas claires, n'hésitez pas à demander !

Fuzz it!

Lancer le fuzzer ne nécessite que l'exécution de : python3 run.py. Selon votre configuration, vous pouvez avoir besoin des privilèges sudo. Lorsque tout a démarré avec succès, vous pouvez vous attacher à la session tmux de fuzzing via :

root@kitploit:~
(sudo) tmux attach-session -t fsfuzzer

Configuration

Le framework peut être configuré avec le script src/config/fuzzing_config.py :

root@kitploit:~

# [fuzzing task specs]
# List of dictionaries specifying each fuzzing instance
fuzzer = [
    {
        "name": "fuzz1",  # Some name for internal bookkeeping
        "fs_creator_vm": "genBox",  # Name as specified in libvirt for the VM handling the file system generation, can be the same across all instances
        "fuzzing_vm": "fuzzBox_0",  # Name as specified in libvirt for the VM handling the file system generation
        "mutation_engine": "radamsa, 0",  # Mutation Engine that is to be used, and size of mutation (radamsa takes no size argument)
        "target_fs": "ufs2",  # Target file system
        "target_size": 15,  # Max file system size in Megabyte
        "populate_with_files": 10,  # Amount of file that will be generated
        "max_file_size": 1024,  # Maximum file size in bytes for each generated file
        "enable_dyn_scaling": False,  # Dynamic scaling will increase the filesystem size periodically
    },
]

# [credentials]
# Credentials for the root user for the VMs
# It is expected that these are the same across all instances, but not necessarily root
user = "root"
pw = "root"

Les moteurs de mutation disponibles sont :

  • radamsa
  • byte_flip_seq
  • byte_flip_rnd
  • metadata

La mise à l'échelle dynamique a été initialement implémentée pour tester si la taille d'un système de fichiers affecte les crashs possibles. Je n'ai pas pu identifier une valeur de déclenchement pour la taille du système de fichiers où les crashs changent, donc ce drapeau peut rester désactivé. Cela évite également une baisse de performance lors de longues exécutions, car les systèmes de fichiers plus grands prennent plus de temps à muter.

Les autres paramètres de configuration sont explicites.

PoC

La vidéo ci-dessous montre une démonstration rapide où deux instances de fuzzing ciblant FreeBSD avec un système de fichiers UFS2 muté par radamsa et un système de fichiers EXT à octets aléatoires inversés. Le système de fichiers UFS muté conduit directement à un crash, montrant à quelle vitesse vous pouvez planter un noyau.

asciicast

fuzz_example

Fonctionnalités

  • Support complet pour les systèmes de fichiers FFS, UFS, EXT et ZFS
    • Support partiel pour APFS
  • Support complet pour FreeBSD, NetBSD et OpenBSD
    • Support expérimental pour Ubuntu (et probablement d'autres dérivés basés sur Debian)
  • Mutations via
    • radamsa
    • inversions globales d'octets aléatoires
    • modifications globales de séquences d'octets aléatoires
    • modifications uniquement du superbloc
  • Émulation utilisateur entièrement aléatoire pour accéder/modifier un système de fichiers monté mais corrompu
  • Base de données des crashs
  • Vérification des crashs
  • Réinitialisation des VM via des instantanés
  • Processus de fuzzing entièrement automatisé
  • Interface utilisateur raisonnable en ligne de commande

Travaux futurs

  • Support de moteurs de mutation supplémentaires/différents
  • Configuration automatisée des VM
  • Vérification de la disponibilité des instantanés et en créer si manquants avant le fuzzing
  • Support pour macOS
  • Optimisations de performances
    • Rendre le framework asynchrone
      • Création continue d'échantillons sans attendre l'exécution du fuzzing
    • Utiliser le même échantillon avec différentes mutations avant d'en générer un nouveau
    • Remanier les algorithmes/interactions pour accélérer
  • Nettoyage et refactorisation du code
    • Rendre la verbosité de journalisation activable

Trophées

Avec cette configuration, j'ai pu trouver plus de 100 bugs uniques du noyau dans FreeBSD, NetBSD et OpenBSD pour les systèmes de fichiers basés sur UFS et EXT. Parmi ces crashs, j'en ai eu un tas de très intéressants :

  • Lectures hors limites
  • Écritures hors limites
  • Double défaut dans EXT
  • Triple défaut dans UFS
  • Bug non déterministe du noyau avec plus de 6 core dumps uniques

La majorité des crashs étaient des dénis de service du noyau. De plus, la majorité des crashs rencontrés ne sont toujours pas corrigés à ce jour (mai 2020). Alors lancez-vous dans la recherche de bugs du noyau dans les implémentations de systèmes de fichiers :).

Avertissement

Tout cela a été construit avec un 'développement basé sur la confiance', ce qui signifie qu'il a grandi bien trop vite à partir d'une simple idée de PoC. Par conséquent, il n'y a pas non plus de tests et très probablement quelques bugs. Je suis désolé si vous rencontrez des crashs (non liés à un kernel panic) mais n'hésitez pas à faire une PR ou à me contacter et je corrigerai les choses dès que possible !

Contact

Twitter: @0xricksanchez

Télécharger l’outil