Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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
sfuzz — Fuzzing ad alte prestazioni tramite traduzioni binarie da riscv a x86 e tecniche di fuzzing moderne. | Kitploit
Strumenti/GitHubGitHub/seal9055/sfuzz
Analisi Dinamica (Sandboxing)Analisi delle VulnerabilitàFuzzingAnalisi di Binari
GitHubseal9055/sfuzz

sfuzz

Fuzzing ad alte prestazioni tramite traduzioni binarie da riscv a x86 e tecniche di fuzzing moderne.

Vedi Repository
1561052 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

SFUZZ

Data di inizio: dicembre 2021

Questo è un fuzzer greybox basato su emulazione e guidato dalla copertura, che utilizza un compilatore Just-In-Time personalizzato per ottenere prestazioni quasi native. Funziona portando i binari ELF RISC-V a una rappresentazione intermedia prima di compilarli JIT in x86 durante l'esecuzione. Durante la compilazione JIT, il codice viene strumentato per abilitare miglioramenti del fuzzing come il tracciamento della copertura, asan, cmpcov o il fuzzing basato su snapshot.


Caratteristiche

  • Multithread, supporta un numero arbitrario di thread e scala quasi linearmente
  • Compilatore JIT personalizzato per alte prestazioni e, soprattutto, per una personalizzazione difficile da ottenere con altre soluzioni come qemu
  • Unità di gestione della memoria personalizzata per consentire ancora una volta un'elevata personalizzazione e funzionalità molto vantaggiose come i controlli dei permessi a livello di byte e i ripristini dell'emulatore basati su dirty bit. Inoltre, sono implementati hook per consentire un uso sicuro delle routine heap.
  • Gestione virtualizzata dei file per consentire un facile fuzzing in memoria
  • Fuzzing basato su snapshot, così lo stato di memoria/registri di un target può essere catturato tramite snapshot durante l'esecuzione per basare tutti i futuri casi di fuzz su questa baseline
  • Tracciamento della copertura a livello di edge e fuzzing guidato dalla copertura basato su questo feedback
  • Vari mutator, deduplicazione dei crash e un semplice algoritmo di scheduling dei seed

Descrizione

L'obiettivo di questo progetto è evidenziare i vantaggi dell'utilizzo di un ambiente emulato per il fuzzing. Esistono molti fuzzer precedenti basati su emulazione, ma quasi tutti usano il motore di emulazione qemu per l'emulazione sottostante. Sebbene questo motore abbia un compilatore just-in-time abbastanza maturo e generi codice molto buono, non è progettato per il fuzzing. Durante il fuzzing, intendiamo eseguire lo stesso processo migliaia di volte al secondo. Questo lascia spazio a ottimizzazioni specializzate che qemu non sfrutta appieno, come riutilizzare lo stesso spazio di memoria per ogni esecuzione del processo e resettare solo una quantità limitata di memoria tramite i meccanismi dei dirty bit.

Per molti versi, questo è più una proof-of-concept su cui volevo lavorare per imparare i meccanismi interni dei compilatori e avere un parco giochi basato su emulazione per sperimentare varie tecniche di fuzzing come diverse metriche di copertura, scheduler di seed e fuzzing basato su snapshot. Con più ottimizzazioni JIT e, soprattutto, estensioni per includere architetture più popolari come mips o arm, potrebbe comunque essere sicuramente utilizzato per fare fuzzing efficiente su codice closed source che non può essere semplicemente strumentato tramite ricompilazione.

Considerando i test che ho svolto finora, sfuzz ha un overhead significativamente inferiore rispetto a molti altri fuzzer popolari, il che si traduce in prestazioni molto elevate, soprattutto per piccoli casi di fuzz.

Maggiori dettagli sulle funzionalità/scelte adottate per questo fuzzer sono elencati nel blogpost allegato (https://seal9055.com/blog/fuzzing/sfuzz) e nei file di documentazione elencati di seguito:

  • Gestione della memoria - memory_management.md
  • Generazione del codice - code_gen.md
  • Implementazione/funzionalità del fuzzer - fuzzing.md
  • Alcuni semplici test - benchmarking.md

Utilizzo

Questo intero fuzzer è scritto in Rust, quindi dopo aver clonato il repository basta eseguire cargo build --release per compilare.

Poiché il fuzzer attualmente supporta solo RISC-V, il target deve essere compilato per RISC-V usando la toolchain qui sotto (o una simile). In alternativa, se hai già un binario RISC-V, funzionerà perfettamente lo stesso.

Una volta configurato tutto, crea le directory di input/output, aggiungi alcuni file seed iniziali alla directory di input e avvia il fuzzer.

./sfuzz -i in -o out -- ./test_cases/simple_test @@

È possibile passare flag aggiuntivi tramite le opzioni della riga di comando per specificare il numero di thread, abilitare il fuzzing basato su snapshot, aggiungere un dizionario al mutator, ecc. Le opzioni aggiuntive possono essere elencate eseguendo sfuzz con il flag -h.

Se desideri testare il fuzzer su alcuni target di complessità variabile, il progrem_generator in tools/program_generator può essere usato per generare automaticamente programmi di complessità variabile. Nota che ti servirà una toolchain RISC-V per compilare il target.

Toolchain Riscv per compilare binari per il fuzzer

Questo configura una toolchain per compilare binari riscv che possono essere caricati/usati da questo progetto.

root@kitploit:~
Riscv compiler/tooling:
    sudo apt-get install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev \
    libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev \
    libexpat-dev
    git clone https://github.com/riscv/riscv-gnu-toolchain && cd riscv-gnu-toolchain
    ./configure --prefix=/opt/riscv --with-arch=rv64i
    sudo make

Debugger:
    gdb-multiarch

TODO

Questa lista rappresenta una serie di funzionalità che ho intenzione di implementare in futuro.

  • Unità di gestione della memoria funzionante
  • Compilatore JIT
  • File virtualizzati per il fuzzing in memoria
  • Controlli dei permessi a livello di byte + allocatori con hook/sicuri
  • Tracciamento della copertura a livello di edge
  • Modalità persistente per fare fuzzing in piccoli loop attorno alle funzioni target
  • Deduplicazione dei crash / crash unici
  • Aggiornare i mutator per includere più opzioni
  • Scheduling dei seed
  • CmpCov per superare i magic values e i checksum
  • Aggiungere alcuni strumenti attorno al fuzzer
  • Benchmarking adeguato
  • Implementare le estensioni RISC-V M e A, così che il JIT possa usare glibc invece di newlib
  • Sostituire l'assembler per migliorare la velocità di compilazione
  • Supportare più architetture (es. mips, arm)

Riferimenti

  • Tutti i paper elencati in fuzzing.md
  • Fuzzing basato su emulazione - Brandon Falk GamozoLabs
  • Manuali per sviluppatori Intel
  • Specifica ISA RISCV User
  • Rv8: un traduttore binario RISC-V-to-x86 ad alte prestazioni - Michael Clark & Bruce Hoult
  • Engineering a Compiler - Keith D. Cooper & Londa Torczon
  • Cranelift [https://cfallin.org/blog/] - Chris Fallin
  • Generazione di traduttori binari dinamici a basso overhead - Mathias Payer & Thomas R. Gross
  • Calcolo efficiente della Static Single Assignment Form e del Control Dependence Graph - Cytron et al
  • Calcolo dei liveness set per programmi in forma SSA - Brandner et al
  • Allocazione dei registri con Linear Scan su forma SSA - Christian Wimmer & Michael Franz
  • http://web.cs.ucla.edu/~palsberg/course/cs132/linearscan.pdf
  • AddressSanitizer: un rapido controllo di integrità degli indirizzi https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf
Scarica lo strumento
  • Ottimizzazioni JIT e un altro tentativo di allocazione dei registri