해당 프로그램이 처음으로 실행되면서 afl-fuzz와 pipe로 통신을 하면서 fork server를 만들고, 새로운 타겟 인스턴스를 fork call()로 실행한다.
표준 입력 or file로 들어온 입력이 fuzz 대상 프로그램으로 전달된다
실행된 결과를공유 메모리에 기록하여 실행을 완료한다.
afl-fuzz는공유메모리에서 fuzz 대상이 남긴 기록을 읽고 이전 항목을 변경하여 새로운 입력을 만든다.
새롭게 만든 입력은 다시 프로그램에 들어가서 실행된다.
주의사항
WinAFL은 프로세스를 종료하지 않고 타겟 함수만을 반복 실행합니다. 아무 함수나 타겟으로 잡고 퍼징을 돌릴 수 있는 것은 아니고 몇 가지 충족해야 할 조건들이 있습니다. 따라서 퍼징에 들어가기 앞서 먼저 타겟 프로그램에 대한 분석을 해야 하고 타겟 함수 선정에 많은 시간을 투자하게 될 수도 있습니다.
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
PDF Reader 퍼징 도전기(1) - WinAFL의 정의와 설치
정의
AFL = American Fuzzy Lop의 약자로, 퍼징을 하는 프로그램으로, 테스트 케이스의 코드 적용 범위를 효율적으로 늘리기 위해 유전자 알고리즘을 사용하는 자유 소프트웨어 fuzzer라고 한다. - 출처 위키백과
특징은 코드 커버리지 측정을 위한 코드를 컴파일 타임에 삽입
버전
리눅스용 버전도 있지만, 리눅스용 버전을 윈도우로 이식시킨게 WinAFL임.
특징
- 블랙박스 퍼징이 가능함
- 서버를 퍼징하는 것이 가능함
동작 과정
주의사항
WinAFL은 프로세스를 종료하지 않고 타겟 함수만을 반복 실행합니다. 아무 함수나 타겟으로 잡고 퍼징을 돌릴 수 있는 것은 아니고 몇 가지 충족해야 할 조건들이 있습니다. 따라서 퍼징에 들어가기 앞서 먼저 타겟 프로그램에 대한 분석을 해야 하고 타겟 함수 선정에 많은 시간을 투자하게 될 수도 있습니다.
타겟 함수는 다음과 같은 조건을 만족해야 합니다.
출처 - 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가 지원하는 Generator를 확인
필자의 컴퓨터에는 Visual Studio 2019가 설치되어 있으며, 옵션으로 Win64, ARM을 사용할 수 없음.
를 하여 winafl-master안에 폴더를 만들어 주고 아래 명령어 실행
위 작업이 정상적으로 되었다면, 아래와 같이 떠야 함
그리고 cmake 빌드
실제로 퍼징에 사용되는 파일들은 아래 경로에 존재함.
%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
'Fuzzing' 카테고리의 다른 글