-
BFF(Basic Fuzzing Framework)Tools/fuzzers 2021. 4. 8. 00:34
BFF는 Basic Fuzzing Framework의 줄임말로 카네기 멜론 대학의 CERT에서 만들어진 도구이다.
BFF는 누구나 쉽게 사용할 수 있는 퍼저이다. 비전공자도 쉽게 쓸 수 있을 정도로 정말 쉽게 사용 가능한 퍼저이다.
다운로드, 설정도 매우 쉬운 편에 속하며 크래시 식별 및 미니마이즈 모두 자동화되어 있다.
BlackBox, Mutate 기반이고 시드 파일만 가지고 있으면 바로 실행이 가능하다.
Download and Set up
다운로드도 어렵지 않다. 링크를 타고 들어가서 라이센스 관련 동의만 누르면 쉽게 받을 수 있다.
Windows, MacOS, Linux 운영체제 환경을 지원한다. 윈도우를 선택해서 설치해본다.
BFF-2.8-setup.zip - Windows Installer를 받아 설치하면 필요한 프로그램과 모듈을 알아서 설치한다.
Configuration
BFF퍼저의 기본 설치 경로는 "C:\BFF"이고, 설정파일은 "C:\BFF\configs\bff.yaml"이다.
설정파일에 대한 내용은 다음과 같다.
설정 이름 설정 내용 비고 campaign campaign:
id: [CAMPAIGN_ID]
keep_heisenbugs: False
use_buttonclicker: False1. 프로젝트 이름에 해당 target target:
program: [FILE_PATH] # Ex) C:\Program Files\te\test.exe
cmdline_template: $PROGRAM $SEEDFILE NUL1. 타겟 프로그램과 인자 설정
2. NUL의 존재 유무에 따라 크래시 결과가 갈리므로 확인할 것directory directories:
seedfile_dir: seedfiles\[SEED_FOLDER]
working_dir: fuzzdir
results_dir: results1. 시드, 워킹 디렉토리, 크래시 결과 디렉토리의 경로 fuzzer fuzzer:
fuzzer: bytemut
# fuzzer: swap
# fuzzer: wave
# fuzzer: drop
# fuzzer: insert
# fuzzer: truncate
# fuzzer: crmut
# fuzzer: crlfmut
# fuzzer: nullmut
# fuzzer: verify
fuzz_zip_container: False1. Mutation 방식 설정
2. 하나만 선택해야 함
3. 각각 방식에 대한 설명은 설정 파일에 쓰여있음runner runner:
hideoutput: False
runtimeout: 5
watchcpu: Auto1. runtimeout 세팅 debugger debugger:
debugheap: False
max_handled_exceptions: 6runoptions runoptions:
first_iteration: 0
seed_interval: 5
minimize: True
minimizer_timeout: 3600
keep_unique_faddr: False
keep_duplicates: False
recycle_crashers: False1. minimize는 꺼도 괜찮음 campaign, target, directory만 설정하면 퍼저가 동작하며, fuzzer의 mutation 옵션은 bytemut가 default로 설정되어 있다.
- Campaign: 프로젝트 이름
- results_dir에 설정된 폴더에 프로젝트 이름으로 디렉토리가 생성되어 저장됨 - Target: 프로그램, 인자를 설정하는 옵션
- 프로그램의 Full file path를 넣으면 됨
- NUL은 프로그램에 따라 크래시의 발생 유무가 결정된다고 하므로 확인해보고 설정할 것 - directory: 여러 디렉토리를 설정하는 옵션
- seedfile_dir: 시드가 들어가있을 폴더
- working_dir: 테스트 케이스 생성과 같은 작업을 할 폴더
- results_dir: 크래시의 결과가 저장되는 디렉토리를 의미함 - fuzzer: mutation 방식을 설정할 수 있는 옵션
- 한 가지의 방법만을 선택해야 퍼저가 정상적으로 동작함
- 각 기능의 설명은 설정 파일 내에 적혀있음(
나머지는 별로 중요하지 않고, runtimeout은 실행 후 종료할 타임아웃(초), minimize는 시간을 많이 소비하므로 False로 설정해도 좋다. 나머지는 딱히 건드리지 않아도 된다.
앞서 말한 것과 같이 설정이 정말 간단하다. 이제 실행만하면 퍼저가 동작한다.
Execution
윈도우 프롬포트 창으로 BFF가 설치된 경로에 들어가 "bff.py"만 실행하면 퍼징이 시작된다.
일반적으로 CLI 프로그램을 사용하는게 가장 효율이 좋으며, GUI는 시간대비 효율이 좋지않다.
하지만 GUI 프로그램을 돌리는데 당장 뾰족한 대안이 없어 붕 뜨는 시간에 돌려놓을 순 있다.
그럴때는 퍼저 하나만 실행하면 너무 느리므로 여러개를 동시에 켜는 방법이 있기는 하다.
아래와 같이 .bat파일 하나 작성해서 실행한다.@ echo off cd "C:\BFF\" start bff.py start bff.py start bff.py start bff.py start bff.py start bff.py
Crash
EXPLOITABLE, PROBABLY_EXPLOITABLE, PROBABLY_NOT_EXPLOITABLE, UNKNOWN 결과 폴더가 나온다. 이는 windbg의 !exploitable 모듈을 사용해서 그대로 가져오므로 신뢰 수준은 낮다. 퍼징 결과가 많을 때 최소한의 우선순위 분류 정도로 생각하면 좋을 것 같다. 참고로 폴더 내에 있는 ".drillresult" 파일의 Exploitability rank: [N]은 숫자가 낮을수록 의미있는 버그일 확률이 높다. 하지만 이 또한 확실하진 않다. 크래시가 있으니, 이제부터는 분석을 하면 된다. :)
Reference
[1] vuls.cert.org/confluence/display/tools/CERT+BFF+-+Basic+Fuzzing+Framework
- Campaign: 프로젝트 이름