
Herramienta portátil de clasificación de fallos basada en depurador para salidas de fuzzing. Admite clasificación paralela, deduplicación de fallos, análisis de informes de sanitizadores y múltiples formatos de informe (texto, JSON).
AFLTriage es una herramienta para clasificar archivos de entrada que causan caídas usando un depurador. Está diseñado para ser portátil y no requerir dependencias de tiempo de ejecución, aparte de libc y un depurador externo. Admite la clasificación de caídas generadas por cualquier programa, no solo AFL, pero reconoce directorios de AFL de manera especial, de ahí el nombre.
Algunas características notables incluyen:
Actualmente, AFLTriage solo admite GDB y solo se ha probado en objetivos Linux C/C++. Tenga en cuenta que AFLTriage no clasifica las caídas según su potencial explotabilidad. La clasificación precisa de la explotabilidad es muy específica del objetivo y el escenario, y es mejor dejarla en manos de herramientas especializadas y analistas expertos.
El uso de AFLTriage es bastante sencillo. Necesita sus entradas para clasificar, un directorio de salida para los informes, y el binario y sus argumentos para clasificar.
Ejemplo:
$ afltriage -i fuzzing_directory -o reports ./target_binary --option-one @@
AFLTriage v1.0.0
[+] GDB is working (GNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1 - Python 3.6.9 (default, Jan 26 2021, 15:33:00))
[+] Image triage cmdline: "./target_binary --option-one @@"
[+] Reports will be output to directory "reports"
[+] Triaging AFL directory fuzzing_directory/ (41 files)
[+] Triaging 41 testcases
[+] Using 24 threads to triage
[+] Triaging [41/41 00:00:02] [####################] CRASH: ASAN detected heap-buffer-overflow in buggy_function after a READ leading to SIGABRT (si_signo=6) / SI_TKILL (si_code=-6)
[+] Triage stats [Crashes: 25 (unique 12), No crash: 16, Errored: 0]
Similar a AFL, el @@ se reemplaza con la ruta del archivo a clasificar. AFLTriage se encargará del resto.
Necesitará un entorno de compilación Rust funcional. Una vez que tenga cargo y rust instalados, construir y ejecutar es simple:
cd afltriage-rs/
cargo run --help
<compilation>
Finished dev [unoptimized + debuginfo] target(s) in 0.33s
Running `target/debug/afltriage --help`
<AFLTriage usage>
...
afltriage 1.0.0
Quickly triage and summarize crashing testcases
USAGE:
afltriage -i <input>... -o <output> <command>...
OPTIONS:
-i <input>...
A list of paths to a testcase, directory of testcases, AFL directory, and/or directory of AFL directories to
be triaged. Note that this arg takes multiple inputs in a row (e.g. -i input1 input2...) so it cannot be the
last argument passed to AFLTriage -- this is reserved for the command.
-o <output>
The output directory for triage report files. Use '-' to print entire reports to console.
-t, --timeout <timeout>
The timeout in milliseconds for each testcase to triage. [default: 60000]
-j, --jobs <jobs>
How many threads to use during triage.
--report-formats <report_formats>...
The triage report output formats. Multiple values allowed: e.g. text,json. [default: text] [possible
values: text, json, rawjson]
--bucket-strategy <bucket_strategy>
The crash deduplication strategy to use. [default: afltriage] [possible values: none, afltriage,
first_frame, first_frame_raw, first_5_frames, function_names, first_function_name]
--child-output
Include child output in triage reports.
--child-output-lines <child_output_lines>
How many lines of program output from the target to include in reports. Use 0 to mean unlimited lines (not
recommended). [default: 25]
--stdin
Provide testcase input to the target via stdin instead of a file.
--profile-only
Perform environment checks, describe the inputs to be triaged, and profile the target binary.
--skip-profile
Skip target profiling before input processing.
--debug
Enable low-level debugging output of triage operations.
-h, --help
Prints help information
-V, --version
Prints version information
ARGS:
<command>...
The binary executable and args to execute. Use '@@' as a placeholder for the path to the input file or
--stdin. Optionally use -- to delimit the start of the command.
AFLTriage está licenciado bajo la licencia BSD de 3 cláusulas "Nueva" o "Revisada". Consulte LICENSE para más detalles.