WinAFL Fuzzing

  • 준비물
  1. DynamoRIO
  2. WinAFL
  3. Visual Studio 2019
  • Fuzzing 순서
  1. 바이너리 분석 후, 퍼징할 함수가 export(dll)되어있거나 persistent mode로 퍼징 가능한지 판단
  2. Fuzzing
    1. dll exported인 경우: Harness 작성
    2. persistent mode로 퍼징 가능한 경우
      • afl-fuzz 인자값으로 해당 함수 offset 지정할 것
      • 함수 내부에 파일을 open/close 여부 확인 후, 상위함수 사용 고려
  3. Crash 분석

Fuzzing Arguments

C:\Users\KuroNeko\Desktop\Fuzz\winafl\build32\bin\Release\afl-fuzz.exe -M master -i in -o out -D C:\Users\KuroNeko\Desktop\Fuzz\DynamoRIO\bin32 -t 1000 -- -coverage_module module.dll -target_method fuzzme -target_module harness.exe -fuzz_iterations 5000 -nargs 1 -- harness.exe @@

Harness

#include <stdio.h>
#include <windows.h>


extern "C" __declspec(dllexport) __declspec(noinline) void fuzzme(wchar_t* path) {

}

int main(int argc, char *argv[]) {
	SetDllDirectoryA("C:\\Users\\KuroNeko\\Desktop\\test");

	HMODULE hModule = LoadLibraryA("module.dll");
	if (hModule == NULL) {
		return 0;
	}

	size_t orig = strlen(argv[1]);
	size_t newsize = orig * sizeof(wchar_t);
	wchar_t *path = (wchar_t *)malloc(newsize);
	size_t convertedChars = 0;
	mbstowcs_s(&convertedChars, path, newsize, argv[1], _TRUNCATE);

	fuzzme(path);

	return 0;
}
삽질에 게시되었습니다

관련 글

WinAFL Fuzzing”의 하나의 댓글

답글 남기기

이메일 주소는 공개되지 않습니다.