Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
uafuzz — Fuzzer dirigido a nivel de binario especializado en detectar vulnerabilidades de Use-After-Free mediante métricas de entrada sensibles al orden y análisis estático, lo que permite la reproducción de errores, las pruebas de parches y la verificación de informes. | Kitploit
Herramientas/GitHubGitHub/strongcourage/uafuzz
Forensia de MemoriaAnálisis de VulnerabilidadesExplotaciónFuzzingAnálisis de Binarios
GitHubstrongcourage/uafuzz

uafuzz

Fuzzer dirigido a nivel de binario especializado en detectar vulnerabilidades de Use-After-Free mediante métricas de entrada sensibles al orden y análisis estático, lo que permite la reproducción de errores, las pruebas de parches y la verificación de informes.

Ver Repositorio
3515623hace 4 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

UAFuzz: Fuzzing dirigido a nivel binario para vulnerabilidades Use-After-Free

Directed Greybox Fuzzing (DGF) como AFLGo tiene como objetivo realizar pruebas de estrés en ubicaciones objetivo potencialmente vulnerables preseleccionadas, con aplicaciones a diferentes contextos de seguridad: (1) reproducción de errores, (2) pruebas de parches o (3) verificación de informes de análisis estático. Recientemente hay más trabajos de investigación que mejoraron la efectividad y eficiencia del fuzzing dirigido (ver awesome-directed-fuzzing).

Proponemos UAFuzz, que es un fuzzer dirigido dedicado a errores Use-After-Free (UAF) a nivel binario al ajustar cuidadosamente los componentes clave del fuzzing dirigido para satisfacer las características específicas de esta clase de error. Los errores UAF aparecen cuando un elemento del heap se utiliza después de haber sido liberado. Detectar errores UAF es difícil: (1) complejidad porque una entrada de Prueba de Concepto (PoC) necesita desencadenar una secuencia de tres eventos – asignación, liberación y uso – en la misma ubicación de memoria, abarcando múltiples funciones del programa probado y (2) silencio sin fallo de segmentación.

En general, UAFuzz tiene el mismo flujo de trabajo que los fuzzers dirigidos con nuestras modificaciones resaltadas en naranja a lo largo de todo el proceso de fuzzing, como se muestra en la siguiente figura. Como nos centramos en aplicaciones de (1) reproducción de errores y (2) pruebas de parches, es más probable que tengamos rastros de pila (mayormente) completos de todos los eventos UAF relacionados con la memoria. A diferencia de los enfoques dirigidos generales existentes donde los objetivos podrían seleccionarse de forma independiente, tenemos en cuenta la relación entre los objetivos (por ejemplo, el orden que es esencial para los UAF) para mejorar la direccionalidad. Primero, el precálculo estático de UAFuzz es rápido a nivel binario. Segundo, introducimos nuevas métricas de entrada conscientes del orden para guiar al fuzzer hacia los objetivos en tiempo de ejecución. Finalmente, triamos solo las entradas potenciales que cubren todos los objetivos en el rastro esperado y prefiltramos las entradas libres que tienen menos probabilidades de desencadenar el error.

Más detalles en nuestro artículo en RAID'20 y nuestra charla en Black Hat USA'20. Gracias también a Sébastien Bardin, Matthieu Lemerre, Prof. Roland Groz y especialmente a Richard Bonichon (@rbonichon) por su ayuda en Ocaml.

Instalación

  • IDA Pro v6.9 y v7.6 (32 bits) y Python v2.7 (nuestro objetivo es admitir más desensambladores binarios de código abierto como Radare en el futuro).
  • Graph-Easy v0.7.6 para convertir el grafo de llamadas de IDA a formato dot.
  • La herramienta de perfilado Valgrind.
  • El framework de análisis binario BINSEC.
  • Fuzzer de caja gris guiado por cobertura AFL v2.52b en modo QEMU.

Nuestro entorno de prueba es Ubuntu 16.04 de 64 bits.

# Instalar Ocaml y paquetes prerequisites para BINSEC vía 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`

# Instalar paquetes de Python (Python 2 para scripts de IDA)
sudo python -m pip install networkx pydot
sudo apt install graphviz

# Instalar 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

# Obtener código fuente
git clone https://github.com/strongcourage/uafuzz.git

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

# Compilar código fuente
./scripts/build.sh uafuzz

# Ayuda para la interfaz IDA/UAFuzz
./binsec/src/binsec -ida-help
./binsec/src/binsec -uafuzz-help

Estructura del código

Nuestro fuzzer está construido sobre AFL v2.52b en modo QEMU para fuzzing y BINSEC para análisis estático ligero (ver uafuzz/README.md). Actualmente usamos IDA Pro v6.9 para extraer gráficos de flujo de control (CFGs) y el grafo de llamadas del binario probado (ver ida/README.md).

uafuzz
├── binsec/src
│   └── ida: un plugin para importar y procesar los CFGs y el grafo de llamadas de IDA
│   └── uafuzz: código de fuzzing
│   │   └── afl-2.52b: fuzzing central construido sobre AFL-QEMU
│   │   └── uafuzz_*.ml(i): un plugin para calcular información estática y comunicarse con AFL-QEMU
└── scripts: algunos scripts para construir y triar errores

Aplicación 1: Reproducción de errores

Primero consideramos un error UAF simple. Tanto AFL-QEMU como incluso el fuzzer dirigido AFLGo con objetivos a nivel de código fuente no pueden detectar este error en 6 horas, mientras que UAFuzz puede detectarlo en minutos con la ayuda de un informe UAF de Valgrind.

# Ejecutar AFL-QEMU
$UAFUZZ_PATH/tests/example.sh aflqemu 360
# Ejecutar AFLGo dados los objetivos a nivel de código fuente
$UAFUZZ_PATH/tests/example.sh aflgo 360
# Ejecutar UAFuzz
$UAFUZZ_PATH/tests/example.sh uafuzz 360 $UAFUZZ_PATH/tests/example/example.valgrind

Para programas del mundo real, usamos el UAF Fuzzing Benchmark para nuestras evaluaciones.

# Obtener el benchmark
git clone https://github.com/strongcourage/uafbench.git
cd uafbench; export UAFBENCH_PATH=`pwd`
Descargar herramienta