
퍼징 출력을 위한 휴대용 디버거 기반 크래시 트라이에이지 도구입니다. 병렬 트라이에이지, 크래시 중복 제거, 새니타이저 리포트 파싱, 여러 보고서 형식(텍스트, JSON)을 지원합니다.
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
<컴파일>
Finished dev [unoptimized + debuginfo] target(s) in 0.33s
Running `target/debug/afltriage --help`
<AFLTriage 사용법>
...
afltriage 1.0.0
충돌하는 테스트 케이스를 신속하게 분류하고 요약합니다
사용법:
afltriage -i <입력>... -o <출력> <명령>...
옵션:
-i <입력>...
테스트 케이스, 테스트 케이스 디렉터리, AFL 디렉터리 및/또는 AFL 디렉터리 디렉터리의 경로 목록입니다.
이 인수는 연속으로 여러 입력을 받습니다(예: -i input1 input2...). 따라서 AFLTriage에 전달되는 마지막 인수가 될 수 없습니다. 이는 명령을 위해 예약되어 있습니다.
-o <출력>
분류 보고서 파일의 출력 디렉터리입니다. 전체 보고서를 콘솔에 출력하려면 '-'를 사용하십시오.
-t, --timeout <시간 초과>
각 테스트 케이스를 분류하는 시간 초과(밀리초)입니다. [기본값: 60000]
-j, --jobs <작업 수>
분류 중 사용할 스레드 수입니다.
--report-formats <보고서 형식>...
분류 보고서 출력 형식입니다. 여러 값 허용: 예: text,json. [기본값: text] [가능한 값: text, json, rawjson]
--bucket-strategy <버킷 전략>
사용할 충돌 중복 제거 전략입니다. [기본값: afltriage] [가능한 값: none, afltriage, first_frame, first_frame_raw, first_5_frames, function_names, first_function_name]
--child-output
분류 보고서에 하위 프로세스 출력을 포함합니다.
--child-output-lines <하위 프로세스 출력 라인 수>
대상의 프로그램 출력 중 보고서에 포함할 라인 수입니다. 0은 무제한(권장하지 않음)을 의미합니다. [기본값: 25]
--stdin
파일 대신 stdin을 통해 테스트 케이스 입력을 대상에 제공합니다.
--profile-only
환경 검사를 수행하고, 분류할 입력을 설명하며, 대상 바이너리를 프로파일링합니다.
--skip-profile
입력 처리를 위한 대상 프로파일링을 건너뜁니다.
--debug
분류 작업의 저수준 디버그 출력을 활성화합니다.
-h, --help
도움말 정보를 출력합니다
-V, --version
버전 정보를 출력합니다
인수:
<명령>...
실행할 바이너리 실행 파일과 인수입니다. 입력 파일 또는 --stdin의 경로에 대한 자리 표시자로 '@@'를 사용하십시오. 선택적으로 --를 사용하여 명령의 시작을 구분할 수 있습니다.
AFLTriage는 BSD 3-clause "New" 또는 "Revised" 라이선스에 따라 사용이 허가됩니다. 자세한 내용은 LICENSE를 참조하세요.