들어가며
7-zip를 퍼징한다. 7-zip에서 발생하는 CVE-2016-2334을 분석한다. 그리고 발견한 크래시에서 코드 커버리지를 분석한다.
CVE-2016-2334은 heap-based buffer overflow 취약점이다. 범위 밖의 데이터를 읽을 수 있다. 7-zip에서는 조작된 HFS+ 이미지 파일에서 발생한다.
준비
1-day 실습이므로 취약점이 발생했던 같은 환경을 준비한다. 또는 다음의 내용을 학습할 수 있다.
- Windows x64 1809
- WinAFL(Fuzzer)
Download and Build
Windows 환경에서 AFL 퍼저의 실행은 WinAFL을 사용한다.
사전 설치
1. Visual Studio compiler 가 필요로하며 2019 버전의 설치를 권장한다.
“Desktop development with C++” 패키지 선택 후 설치한다.
2. https://github.com/DynamoRIO/dynamorio/releases/download/release_8.0.0-1/DynamoRIO-Windows-8.0.0-1.zip 에서 DynamoRIO 설치한다.
자세한 설치방법은 이전 게시글인 https://gomguk.tistory.com/111 에서 다루었다.
WinAFL 설치
https://github.com/googleprojectzero/winafl 에서 설치한다.
Visual Studio 2019를 이전 단계에서 설치했으므로 “Developer Command Prompt for VS2019” 실행하여 WinAFL이 설치된 경로로 이동한다. 그리고 다음의 명령어 실행한다.
mkdir build32
cd build32
cmake -G"Visual Studio 16 2019" -A Win32 .. -DDynamoRIO_DIR=C:\Users\IEUser\Desktop\DynamoRIO-Windows-8.0.0-1\cmake
cmake --build . --config Release
자신의 시스템에 맞게 빌드된 WinAFL 바이너리가 winafl-master\build32\bin\Release 에 위치한다.
7-zip Download
15.05 버전을 https://github.com/antonio-morales/Fuzzing101/blob/main/Exercise 9/Resources/7z1505.exe 에서 받을수 있다.
Create corpus
다양한 방법으로 샘플 데이터를 생성할 수 있다.
https://github.com/antonio-morales/Fuzzing101/blob/main/Exercise 9/Resources/example.img 에서 예제 파일을 제공한다.
WinAFL
WinAFL은 AFL과는 다른 추가 옵션이 존재한다.
-coverage_module : 커버리지를 기록할 모듈을 명시한다. 여러개 모듈을 지정할 수 있다.
-target_module : 퍼징할 함수를 지정한다.
-target_offset : 퍼징할 메소드의 시작주소로부터의 오프셋 주소
퍼징을 수행하기 위한 함수의 오프셋을 분석한다.
함수의 베이스 주소가 0x400000이므로 0x42F3B3 - 0x400000 = 0x02F3B3 이 target_offset 인자가 된다.
이 주소가 맞는지 DynamoRIO에서 확인해본다.
C:\_fuzz\DynamoRIO-Windows-8.0\bin32\drrun.exe -c winafl.dll -debug -target_module 7z.exe -target_offset 0x02F3B3 -fuzz_iterations 10 -nargs 2 -- "C:\Program Files (x86)\7-Zip\7z.exe" l C:\_fuzz\afl_in\example.img
실행 결과로 목적한 함수가 10회 실행되고 종료되면 된다.
Fuzzing
afl-fuzz.exe -i C:\_fuzz\afl_in -o C:\_fuzz\afl_out -t 2000 -D C:\_fuzz\DynamoRIO-Windows-8.0\bin32 -- -coverage_module 7z.exe -coverage_module 7z.dll -target_module 7z.exe -target_offset 0x02F3B3 -nargs 2 -- "C:\Program Files (x86)\7-Zip\7z.exe" e -y @@
'Reversing' 카테고리의 다른 글
[AFL++] Install AFL Qemu(Ubuntu 20.04) (0) | 2022.08.24 |
---|---|
[Fuzzing 101] 퍼징으로 1-day 취약점 분석하기(GIMP) (0) | 2022.08.09 |
[Fuzzing 101] 퍼징으로 1-day 취약점 분석하기(LibXML) (0) | 2022.08.05 |
[Fuzzing 101] 퍼징으로 1-day 취약점 분석하기(LibTIFF) (0) | 2022.08.01 |
[Fuzzing 101] 퍼징으로 1-day 취약점 분석하기(tcpdump) (0) | 2022.07.28 |