PDF Reader 퍼징 도전기(1) - WinAFL의 정의와 설치

728x90

정의

AFL = American Fuzzy Lop의 약자로, 퍼징을 하는 프로그램으로, 테스트 케이스의 코드 적용 범위를 효율적으로 늘리기 위해 유전자 알고리즘을 사용하는 자유 소프트웨어 fuzzer라고 한다. - 출처 위키백과

특징은 코드 커버리지 측정을 위한 코드를 컴파일 타임에 삽입

 

버전

리눅스용 버전도 있지만, 리눅스용 버전을 윈도우로 이식시킨게 WinAFL임.

 

특징

- 블랙박스 퍼징이 가능함

- 서버를 퍼징하는 것이 가능함

 

동작 과정

출처: https://barro.github.io/2018/06/afl-fuzz-on-different-file-systems/

  1. afl-fuzz에서 우리가 퍼징하려는 프로그램을 실행한다.
  2. 해당 프로그램이 처음으로 실행되면서 afl-fuzz와 pipe로 통신을 하면서 fork server를 만들고, 새로운 타겟 인스턴스를 fork call()로 실행한다.
  3. 표준 입력 or file로 들어온 입력이 fuzz 대상 프로그램으로 전달된다
  4. 실행된 결과를 공유 메모리에 기록하여 실행을 완료한다.
  5. afl-fuzz는 공유메모리에서 fuzz 대상이 남긴 기록을 읽고 이전 항목을 변경하여 새로운 입력을 만든다.
  6. 새롭게 만든 입력은 다시 프로그램에 들어가서 실행된다.

주의사항

WinAFL은 프로세스를 종료하지 않고 타겟 함수만을 반복 실행합니다. 아무 함수나 타겟으로 잡고 퍼징을 돌릴 수 있는 것은 아니고 몇 가지 충족해야 할 조건들이 있습니다. 따라서 퍼징에 들어가기 앞서 먼저 타겟 프로그램에 대한 분석을 해야 하고 타겟 함수 선정에 많은 시간을 투자하게 될 수도 있습니다. 

타겟 함수는 다음과 같은 조건을 만족해야 합니다.

  1. 함수 내에서 input 파일을 열어야 함
  2. 그 파일을 파싱 해야 함
  3. 함수 내에서 input 파일을 닫아야 함
  4. 리턴까지 정상적으로 실행되어야 함

출처 - https://hackyboiz.github.io/2021/05/23/fabu1ous/winafl-1/

요구사항

WinAFL설치에는 다음과 같은 프로그램이 필요

- CMAKE

- DynamoRIO

- WinAFL

- Visual Studio

 

CMAKE : 멀티플랫폼으로 사용할 수 있는 Make의 빌드관리시스템을 만들기 위한 오픈소스 프로젝트

출처 - 위키백과

DynamoRIO : 동적 프로그램 분석 도구 개발을위한 BSD 라이센스 동적 이진 계측 프레임 워크

출처 - 위키백과

 

DynamoRIO의 특징

1. 실행되는 동안 프로그램의 모든 부분에서 코드 변환을 지원

2. 프로그램 분석을 위한 다양한 용도로 동적 도구를 작성하기 위한 인터페이스 지원

3. 콜아웃, 트램폴린 삽입에 제한X

4. IA-32, AMD64, ARM 명령어 조작 라이브러리를 이용하여 프로그램 명령어를 임의대로 수정 가능

5. Windows, Linux, Andriod, IA-32, AMD64, AMR, AArch64 지원

 

WinAFL 설치

 

cmake --help

위 명령어를 통해 cmake가 지원하는 Generator를 확인

필자의 컴퓨터에는 Visual Studio 2019가 설치되어 있으며, 옵션으로 Win64, ARM을 사용할 수 없음. 

2019는 Win64나 ARM을 옵션으로 쓸 수 없다.

cd winafl-master
mkdir build64
cd build64

를 하여 winafl-master안에 폴더를 만들어 주고 아래 명령어 실행

cmake -G"Visual Studio 16 2019" .. -DDynamoRIO_DIR=[DynamoRIO안에 있는 cmake -A x64]
cmake -G"Visual Studio 16 2019" .. -DDynamoRIO_DIR=C:\Users\kwakjunbeom\Downloads\fuzzing\DynamoRIO\cmake -A x64

 

위 작업이 정상적으로 되었다면, 아래와 같이 떠야 함

그리고 cmake 빌드

cmake --build . --config Release

 

실제로 퍼징에 사용되는 파일들은 아래 경로에 존재함.

%winafl-master%\build64 or 32\bin\Release

참조

https://hackyboiz.github.io/2021/05/23/fabu1ous/winafl-1/

 

hackyboiz

hack & life

hackyboiz.github.io

https://liveyourit.tistory.com/42

 

WinAFL 빌드 과정 (Windows10)

예전에 작성했던 글을 현재 블로그로 옮긴 것이라, 최신 버전이 아니니 각 버전은 현재 읽는 분들의 상황에 맞게 변경해주시면 될 것 같습니다. (캡쳐 사진은 다시 해보고 새로 캡쳐했습니다) AFL

liveyourit.tistory.com

https://www.lazenca.net/display/TEC/DynamoRIO

 

DynamoRIO - TechNote - Lazenca.0x0

페이지 … TechNote 02.TechNote 03.Analysis 06.DBI(Dynamic Binary Instrumentation) Skip to end of banner Go to start of banner DynamoRIO Skip to end of metadata 작성자 : Lazenca.0x0 - 11월 17, 2017 Go to start of metadata Excuse the ads! We need som

www.lazenca.net

https://wogh8732.tistory.com/272

 

AFL fuzzer 설명 및 사용방법

1. AFL 퍼저 원리 afl 퍼저는 instrumentation-guided genetic algorithm 과 결합된 퍼저이다. 브푸트포스로 입력을 받지만, 거기서 끝나는게 아니라, 커버리지를 넓혀가며 프로그램 제어 흐름에 대한 변경사항

wogh8732.tistory.com

 

728x90