Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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
uafuzz — Fuzzer direcionado em nível binário, especializado na detecção de vulnerabilidades Use-After-Free por meio de métricas de entrada sensíveis à ordenação e análise estática, permitindo reprodução de bugs, testes de patches e verificação de relatórios. | Kitploit
Ferramentas/GitHubGitHub/strongcourage/uafuzz
Forensia de MemóriaAnálise de VulnerabilidadesExploraçãoFuzzingAnálise de Binários
GitHubstrongcourage/uafuzz

uafuzz

Fuzzer direcionado em nível binário, especializado na detecção de vulnerabilidades Use-After-Free por meio de métricas de entrada sensíveis à ordenação e análise estática, permitindo reprodução de bugs, testes de patches e verificação de relatórios.

Ver Repositório
3515623há 4 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

UAFuzz: Fuzzing Direcionado em Nível Binário para Vulnerabilidades Use-After-Free

Fuzzing Direcionado em Caixa Cinza (DGF) como o AFLGo visa realizar testes de estresse em locais alvo potencialmente vulneráveis pré-selecionados, com aplicações em diferentes contextos de segurança: (1) reprodução de bugs, (2) teste de patches ou (3) verificação de relatórios de análise estática. Recentemente, há mais trabalhos de pesquisa que melhoraram a eficácia e eficiência do fuzzing direcionado (veja awesome-directed-fuzzing).

Propomos o UAFuzz que é um fuzzer direcionado dedicado a bugs Use-After-Free (UAF) em nível binário ajustando cuidadosamente os componentes-chave do fuzzing direcionado para atender às características específicas desta classe de bug. Bugs UAF aparecem quando um elemento do heap é usado após ter sido liberado. Detectar bugs UAF é difícil: (1) complexidade porque uma entrada de Prova de Conceito (PoC) precisa disparar uma sequência de três eventos – alloc, free e use – no mesmo local de memória, abrangendo várias funções do programa testado e (2) silêncio sem falha de segmentação.

No geral, o UAFuzz tem um fluxo de trabalho semelhante aos fuzzers direcionados, com nossas modificações destacadas em laranja ao longo de todo o processo de fuzzing, conforme mostrado na figura a seguir. Como focamos em (1) reprodução de bugs e (2) aplicações de teste de patches, é mais provável que tenhamos stack traces (principalmente) completos de todos os eventos UAF relacionados à memória. Ao contrário das abordagens direcionadas gerais existentes, onde os alvos podem ser selecionados independentemente, levamos em consideração a relação entre os alvos (por exemplo, a ordenação que é essencial para UAFs) para melhorar o direcionamento. Primeiro, o pré-cálculo estático do UAFuzz é rápido em nível binário. Segundo, introduzimos novas métricas de entrada cientes da ordenação para guiar o fuzzer em direção aos alvos em tempo de execução. Finalmente, triamos apenas entradas potenciais que cobrem todos os alvos no trace esperado e pré-filtramos entradas para free que são menos prováveis de disparar o bug.

Mais detalhes em nosso artigo no RAID'20 e nossa palestra no Black Hat USA'20. Agradecimentos também a Sébastien Bardin, Matthieu Lemerre, Prof. Roland Groz e especialmente Richard Bonichon (@rbonichon) por sua ajuda em Ocaml.

Instalação

  • IDA Pro v6.9 e v7.6 (32 bits) e Python v2.7 (pretendemos suportar mais desmontadores binários de código aberto como Radare no futuro).
  • Graph-Easy v0.7.6 para converter o grafo de chamadas do IDA para o formato dot.
  • A ferramenta de profiling Valgrind.
  • O framework de análise binária BINSEC.
  • Fuzzer de caixa cinza guiado por cobertura AFL v2.52b no modo QEMU.

Nosso ambiente testado é Ubuntu 16.04 64 bits.

# Install Ocaml and prerequisite packages for BINSEC via OPAM
sudo apt update
sudo apt update
sudo apt install ocaml ocaml-native-compilers camlp4-extra opam emacs llvm-6.0-dev pkg-config protobuf-compiler libgmp-dev libzmq3-dev cmake valgrind
opam init
opam switch 4.05.0
opam depext conf-m4.1
opam install merlin ocp-indent caml-mode tuareg menhir ocamlgraph ocamlfind piqi zmq.5.0.0 zarith llvm.6.0.0
eval `opam config env`

# Install Python's packages (Python 2 for IDA's scripts)
sudo python -m pip install networkx pydot
sudo apt install graphviz

# Install Graph Easy
wget https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Graph-Easy-0.76.tar.gz 
tar xzf Graph-Easy-0.76.tar.gz
cd Graph-Easy-0.76
perl Makefile.PL; make test; sudo make install
export GRAPH_EASY_PATH=/usr/local/bin/graph-easy

# Checkout source code
git clone https://github.com/strongcourage/uafuzz.git

# Environment variables
export IDA_PATH = /path/to/ida-6.9/idaq
export GRAPH_EASY_PATH=/path/to/graph-easy
cd uafuzz; export UAFUZZ_PATH=`pwd`

# Compile source code
./scripts/build.sh uafuzz

# Help for IDA/UAFuzz interface
./binsec/src/binsec -ida-help
./binsec/src/binsec -uafuzz-help

Estrutura do código

Nosso fuzzer é construído sobre o AFL v2.52b no modo QEMU para fuzzing e BINSEC para análise estática leve (veja uafuzz/README.md). Atualmente usamos o IDA Pro v6.9 para extrair grafos de fluxo de controle (CFGs) e grafo de chamadas do binário testado (veja ida/README.md).

uafuzz
├── binsec/src
│   └── ida: a plugin to import and process IDA's CFGs and call graph
│   └── uafuzz: fuzzing code
│   │   └── afl-2.52b: core fuzzing built on top of AFL-QEMU
│   │   └── uafuzz_*.ml(i): a plugin to compute static information and communicate with AFL-QEMU
└── scripts: some scripts for building and bug triaging

Aplicação 1: Reprodução de bugs

Primeiro, consideramos um bug UAF simples. Tanto o AFL-QEMU quanto o fuzzer direcionado AFLGo com alvos em nível de código-fonte não conseguem detectar este bug em 6 horas, enquanto o UAFuzz pode detectá-lo em minutos com a ajuda de um relatório UAF do Valgrind.

# Run AFL-QEMU
$UAFUZZ_PATH/tests/example.sh aflqemu 360
# Run AFLGo given targets at source-level
$UAFUZZ_PATH/tests/example.sh aflgo 360
# Run UAFuzz
$UAFUZZ_PATH/tests/example.sh uafuzz 360 $UAFUZZ_PATH/tests/example/example.valgrind

Para programas do mundo real, usamos o UAF Fuzzing Benchmark para nossas avaliações.

# Checkout the benchmark
git clone https://github.com/strongcourage/uafbench.git
cd uafbench; export UAFBENCH_PATH=`pwd`
Baixar ferramenta