AFLTriage 是一个使用调试器对崩溃输入文件进行分类的工具。它被设计为可移植,除了 libc 和外部调试器外,不需要任何运行时依赖。它支持对任何程序产生的崩溃进行分类,而不仅仅是 AFL,但特别识别 AFL 目录,因此得名。
一些值得注意的功能包括:
目前 AFLTriage 仅支持 GDB,并且仅在 Linux C/C++ 目标上测试过。请注意,AFLTriage 不按潜在可利用性对崩溃进行分类。准确的可利用性分类非常针对目标和场景,最好留给专门的工具和专家分析师。
AFLTriage 的用法非常简单。你需要提供要分类的输入、报告输出目录以及要分类的二进制文件及其参数。
示例:
$ 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]
与 AFL 类似,@@ 会被替换为要分类的文件的路径。AFLTriage 会处理其余部分。
你需要一个可用的 Rust 构建环境。一旦安装了 cargo 和 rust,构建和运行很简单:
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 使用 BSD 3-clause "New" 或 "Revised" 许可。参见 LICENSE 了解更多细节。