Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
sfuzz — Fuzzing de alto desempenho usando traduções binárias de riscv para x86 e técnicas modernas de fuzzing | Kitploit
Ferramentas/GitHubGitHub/seal9055/sfuzz
Análise Dinâmica (Sandboxing)Análise de VulnerabilidadesFuzzingAnálise de Binários
GitHubseal9055/sfuzz

sfuzz

Fuzzing de alto desempenho usando traduções binárias de riscv para x86 e técnicas modernas de fuzzing

Ver Repositório
15610há 2 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

SFUZZ

Data de início: dezembro de 2021

Este é um fuzzer greybox baseado em emulação e guiado por cobertura que utiliza um compilador Just-In-Time personalizado para alcançar desempenho quase nativo. Ele funciona elevando binários ELF RISC-V para uma representação intermediária antes de compilá-los via JIT para x86 durante a execução. Durante a compilação JIT, o código é instrumentado para permitir melhorias de fuzzing, como rastreamento de cobertura, asan, cmpcov ou fuzzing baseado em snapshots.


Recursos

  • Multithread, suportando uma quantidade arbitrária de threads e escalando quase linearmente
  • Compilador JIT personalizado para alto desempenho e, mais importante, customização que é mais difícil de alcançar com outras soluções, como qemu
  • Unidade de gerenciamento de memória personalizada para, mais uma vez, permitir alta customização e recursos altamente benéficos, como verificações de permissão em nível de byte e redefinições de emulador baseadas em dirty bits. Além disso, hooks para permitir o uso seguro de rotinas de heap são implementados.
  • Gerenciamento de arquivos virtualizado para permitir fuzzing fácil em memória
  • Fuzzing baseado em snapshots, para que o estado de memória/registradores de um alvo possa ser capturado em snapshot durante a execução, a fim de basear todos os casos de fuzz futuros nessa linha de base
  • Rastreamento de cobertura em nível de aresta e fuzzing guiado por cobertura com base nesse feedback
  • Vários mutadores, deduplicação de crashes e um algoritmo simples de escalonamento de seeds

Descrição

O objetivo deste projeto é destacar os benefícios de usar um ambiente emulado para fuzzing. Muitos fuzzers anteriores baseados em emulação existem, mas quase todos usam exclusivamente o mecanismo de emulação qemu para a emulação subjacente. Embora esse mecanismo tenha um compilador just-in-time bastante maduro e gere código muito bom, ele não foi projetado para fuzzing. Durante o fuzzing, pretendemos executar o mesmo processo milhares de vezes por segundo. Isso abre espaço para otimizações especializadas das quais o qemu não faz uso intenso, como reutilizar o mesmo espaço de memória para cada execução do processo e redefinir apenas uma quantidade limitada de memória por meio de mecanismos de dirty bits.

De muitas maneiras, isso é mais uma prova de conceito na qual eu queria trabalhar para aprender sobre o funcionamento interno de compiladores e ter um playground baseado em emulação para experimentar várias técnicas de fuzzing, como diferentes métricas de cobertura, escalonadores de seeds e fuzzing baseado em snapshots. Com mais otimizações de JIT e, principalmente, extensões para incluir arquiteturas mais populares como mips ou arm, isso poderia, no entanto, certamente ser usado para realizar fuzzing eficiente em código-fonte fechado que não pode simplesmente ser instrumentado por meio de recompilação.

Com base nos testes que fiz até agora, o sfuzz tem significativamente menos overhead do que muitos outros fuzzers populares, o que resulta em desempenho muito rápido, especialmente para casos de fuzz pequenos.

Mais detalhes sobre os recursos/escolhas feitas para este fuzzer estão listados no blogpost que o acompanha (https://seal9055.com/blog/fuzzing/sfuzz) e nos arquivos de documentação listados abaixo:

  • Gerenciamento de Memória - memory_management.md
  • Geração de Código - code_gen.md
  • Implementação/recursos do fuzzer - fuzzing.md
  • Alguns testes simples - benchmarking.md

Uso

Todo este fuzzer é escrito em rust; portanto, após clonar o repositório, basta executar cargo build --release para compilar.

Como o fuzzer atualmente suporta apenas RISC-V, o alvo precisa ser compilado para RISC-V usando o toolchain abaixo (ou um similar). Alternativamente, se você já tiver um binário RISC-V, isso funcionará perfeitamente bem também.

Uma vez configurado, basta criar diretórios de entrada/saída, adicionar alguns arquivos de seed iniciais ao diretório de entrada e iniciar o fuzzer.

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

Flags adicionais podem ser passadas por meio de opções de linha de comando para especificar o número de threads, habilitar fuzzing com snapshots, adicionar um dicionário ao mutador etc. As opções adicionais podem ser listadas executando sfuzz com a flag -h.

Se você deseja testar o fuzzer contra alguns alvos de complexidade variada, o progrem_generator em tools/program_generator pode ser usado para gerar automaticamente programas de complexidade variada. Observe que você precisará de um toolchain RISC-V para então compilar o alvo.

Toolchain Riscv para compilar binários para o fuzzer

Isso configura um toolchain para compilar binários riscv que podem ser carregados/usados por este projeto.

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

Esta lista representa um conjunto de recursos que pretendo implementar no futuro.

  • Unidade de gerenciamento de memória funcional
  • Compilador JIT
  • Arquivos virtualizados para fuzzing em memória
  • Verificações de permissão em nível de byte + alocadores com hook/seguros
  • Rastrear cobertura em nível de aresta
  • Modo persistente para fuzzer em loops pequenos ao redor das funções alvo
  • Deduplicação de crashes / crashes únicos
  • Atualizar mutadores para incluir mais opções
  • Escalonamento de seeds
  • CmpCov para superar valores mágicos e checksums
  • Adicionar algumas ferramentas em torno do fuzzer
  • Benchmarking adequado
  • Implementar extensões RISC-V M & A, para que o JIT possa usar glibc em vez de newlib
  • Substituir o montador para melhorar a velocidade de compilação
  • Suportar mais arquiteturas (ex.: mips, arm)

Referências

  • Todos os artigos listados em fuzzing.md
  • Emulation based fuzzing - Brandon Falk GamozoLabs
  • Intel Software Developer Manuals
  • RISCV User ISA specification
  • Rv8: a high performance RISC-V to x86 binary translator - Michael Clark & Bruce Hoult
  • Engineerining a compiler Keith D. Cooper & Londa Torczon
  • Cranelift [https://cfallin.org/blog/] - Chris Fallin
  • Generating Low-Overhead Dynamic Binary Translators - Mathias Payer & Thomas R. Gross
  • Efficiently Computing Static Single Assignment Form and the Control Dependence Graph - Cytron et al
  • Computing Liveness Sets for SSA-Form Programs - Brandner et al
  • Linear Scan Register Allocation on SSA Form - Christian Wimmer & Michael Franz
  • http://web.cs.ucla.edu/~palsberg/course/cs132/linearscan.pdf
  • AddressSanitizer: A Fast Address Sanity Checker https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf
Baixar ferramenta
  • Otimizações de JIT e outra tentativa de alocação de registradores