Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
fisy-fuzz — Questo è il framework completo di fuzzing del file system che ho presentato alla conferenza Hack in the Box 2020 Lockdown Edition ad aprile. | Kitploit
Strumenti/GitHubGitHub/0xricksanchez/fisy-fuzz
Analisi delle VulnerabilitàExploitFuzzing
GitHub0xricksanchez/fisy-fuzz

fisy-fuzz

Questo è il framework completo di fuzzing del file system che ho presentato alla conferenza Hack in the Box 2020 Lockdown Edition ad aprile.

Vedi Repository
15023103 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

FI(le) SY(stem) - FUZZer

Questo è il framework completo di fuzzing del file system che ho presentato alla conferenza Hack in the Box 2020 Lockdown Edition ad aprile.

  • Talk della conferenza
    • Video singolo del talk
  • Materiale della conferenza

Panoramica del framework

Obiettivo

L'obiettivo di questo framework è scoprire bug di sicurezza del kernel su sistemi UNIX, con un forte focus sui sistemi BSD. È stato sviluppato e testato intensamente su FreeBSD, OpenBSD e NetBSD, ma ha già un supporto minore per host basati su Linux. Siamo riusciti a scoprire con successo oltre 100 bug unici del kernel per file system basati su UFS ed EXT, ottenendo anche molte informazioni sulla recente aggiunta di ZFS.

Generatore di casi di test

makeFS2.py può essere usato come utility standalone per generare diversi file system validi. L'uso è spiegato in dettaglio nel repository del materiale della conferenza.

Requisiti

Il framework è stato testato solo su Ubuntu 18.04. Si basa su KVM, QEMU e libvirt. Requirements.sh configura tutte le dipendenze necessarie. Il framework potrebbe essere completamente funzionante sull'ultima release di Ubuntu 20.04. Altri sistemi host non basati su apt dovrebbero essere facilmente supportati e richiedono solo piccole modifiche in Requirements.sh. Una volta soddisfatti i requisiti, puoi procedere con i passaggi di configurazione!

Configurazione

Fai riferimento al SETUP.md. Se alcuni passaggi non sono chiari, contattaci!

Fuzz it!

L'avvio del fuzzer richiede solo l'esecuzione di: python3 run.py. A seconda della configurazione, potresti aver bisogno dei privilegi sudo. Quando tutto è stato avviato con successo, puoi connetterti alla sessione tmux di fuzzing tramite:

(sudo) tmux attach-session -t fsfuzzer

Config

Il framework può essere configurato con lo script src/config/fuzzing_config.py:


# [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"

I motori di mutazione disponibili sono:

  • radamsa
  • byte_flip_seq
  • byte_flip_rnd
  • metadata

Il ridimensionamento dinamico è stato inizialmente implementato per testare se la dimensione di un file system influisce sui possibili crash. Non sono riuscito a identificare un valore trigger per la dimensione del file system in cui i crash cambiano, quindi questo flag può rimanere disabilitato. Ciò impedisce anche di subire un calo delle prestazioni su esecuzioni lunghe, poiché file system più grandi richiedono più tempo per essere mutati.

I restanti parametri di configurazione dovrebbero essere autoesplicativi.

PoC

Il video seguente mostra una breve demo in cui due istanze di fuzzing prendono di entrambe FreeBSD con un UFS2 mutato da radamsa e un file system EXT con byte casuali invertiti. Il file system UFS mutato porta direttamente a un crash, mostrando quanto velocemente si può far crashare un kernel.

asciicast

Esempio di fuzz

Caratteristiche

  • Supporto completo per file system FFS, UFS, EXT e ZFS
    • Supporto parziale per APFS
  • Supporto completo per FreeBSD, NetBSD e OpenBSD
    • Supporto sperimentale per Ubuntu (e probabilmente altri derivati Debian)
  • Mutazioni tramite
    • radamsa
    • inversione globale di byte casuali
    • modifiche globali di sequenze di byte casuali
    • modifiche solo al superblocco
  • Emulazione utente completamente randomizzata per accedere/modificare un file system montato ma danneggiato
  • Database dei crash
  • Verifica dei crash
  • Reset della VM tramite snapshot
  • Processo di fuzzing completamente automatizzato
  • Interfaccia utente ragionevole da riga di comando

Lavori futuri

  • Supporto per più/diversi motori di mutazione
  • Configurazione automatica delle VM
  • Controllo degli snapshot disponibili e, se mancanti, acquisirne alcuni prima del fuzzing
  • Supporto per macOS
  • Ottimizzazioni delle prestazioni
    • Rendere il framework asincrono
      • Creazione continua di campioni senza attendere l'esecuzione del fuzzing
    • Usare lo stesso campione con mutazioni diverse prima di generarne uno nuovo
    • Rielaborare algoritmi/interazioni per accelerare
  • Pulizia del codice e refactoring
    • Rendere la verbosità del logging attivabile/disattivabile

Trofei

Con questa configurazione sono riuscito a trovare oltre 100 bug unici del kernel in FreeBSD, NetBSD e OpenBSD per file system basati su UFS ed EXT. Tra questi crash, ce n'erano molti molto interessanti:

  • Letture fuori dai limiti
  • Scritture fuori dai limiti
  • Doppio fault in EXT
  • Triplo fault in UFS
  • Bug del kernel non deterministico con oltre 6 core dump unici

La maggior parte dei crash erano DoS del kernel. Inoltre, la maggior parte dei crash incontrati non sono ancora stati corretti ad oggi (maggio 2020). Quindi dai un'occhiata alla ricerca di bug del kernel nelle implementazioni dei file system :).

Disclaimer

Tutto ciò è stato costruito con "trust driven development", nel senso che è cresciuto troppo e troppo in fretta partendo da una semplice idea di PoC. Di conseguenza, non ci sono nemmeno test e molto probabilmente alcuni bug. Mi dispiace se ti imbatti in crash (non legati a kernel panic), ma sentiti libero di fare una PR o contattarmi e sistemerò le cose il prima possibile!

Contatti

Twitter: @0xricksanchez

Scarica lo strumento