🐞 윈도우 소프트웨어 버그 헌팅: 퍼징(Fuzzing)과 오디팅(Auditing)
🎯 1. 퍼징 (Fuzzing)
▷ 개념
퍼징은 프로그램에 의도적으로 비정상적이거나 무작위의 입력을 넣어 충돌, 크래시, 예외 상황을 발생시키고, 이를 통해 보안 취약점을 찾는 자동화된 기법입니다.
▷ 윈도우에서 대표 퍼저: WinAFL
- WinAFL은 AFL(American Fuzzy Lop)의 윈도우 포팅 버전입니다.
- 커버리지 기반 퍼저로, 코드 커버리지(분기/조건문 실행 여부)를 기준으로 테스트 케이스를 진화시킵니다.
- DynamoRIO라는 동적 바이너리 계측(DBI) 툴을 사용하여 커버리지를 수집합니다.
✦ 사용 도구
툴 | 역할 |
---|
WinAFL | Fuzzing 핵심 퍼저 |
DynamoRIO | 바이너리 계측기. WinAFL과 함께 작동 |
winafl-cmin | 중복 입력 제거, 최소 커버리지 확보 |
winafl-fuzz.exe | 퍼징 실행 |
DrMemory | 런타임 메모리 오류 탐지 (선택) |
✦ 사용 예시
winafl-fuzz.exe -target_module target.dll -target_method fuzz_entry \
-nargs 2 -coverage_module target.dll -fuzz_iterations 100000 \
-input input_folder -output output_folder \
-instrument_module target.dll -hooks hook.dll
🎯 2. 오디팅 (Auditing)
▷ 개념
오디팅은 소프트웨어의 코드를 직접 정적/동적 분석하여 보안 결함을 찾아내는 수동 기법입니다. 퍼징보다 속도는 느리지만, 특정 지점에서 논리적/구조적 문제를 정확히 짚어낼 수 있습니다.
▷ 사용 도구
툴 | 역할 |
---|
IDA Pro / Ghidra | 리버싱 및 정적 분석 |
WinDbg / x64dbg | 동적 분석 |
Procmon | 시스템 콜 모니터링 |
Process Hacker / Process Explorer | 런타임 정보 보기 |
PE-bear / CFF Explorer | PE 구조 보기 |
GFlags + AppVerifier | 힙 오버플로우, UAF 감지 |
BinDiff / Diaphora | 바이너리 비교 (패치 분석 등) |
💡 퍼징 vs 오디팅 비교
항목 | 퍼징 | 오디팅 |
---|
분석 대상 | 실행 파일 | 소스 코드 or 디스어셈블 |
속도 | 빠름 (자동화) | 느림 (수작업) |
발견 범위 | 예외, 크래시 등 | 논리적 취약점까지 가능 |
대표 툴 | WinAFL + DynamoRIO | IDA, Ghidra, WinDbg 등 |
추천 상황 | 블랙박스, 대량 분석 | 화이트박스, 특정 취약점 분석 |
🔧 WinAFL과 DynamoRIO 관계 요약
- WinAFL은 자체적으로 바이너리의 커버리지를 추적할 수 없습니다.
- 그래서 DynamoRIO와 연동하여 동적으로 프로그램을 계측합니다.
- DynamoRIO는 프로그램 실행 중 각 분기(branch), 함수 호출 등을 가로채고 로깅할 수 있도록 해줍니다.
- WinAFL은 이 정보를 바탕으로 더 다양한 코드 경로를 탐색하도록 입력을 조작합니다.
📚 참고 자료