-
Windows Application Fuzzing 기본 세팅Tools/Windows 2023. 4. 7. 13:12
Windows Application Fuzzer
Windows Application 퍼징을 위해 일반적으로 WinAFL, TinyAFL, Jackalope와 같은 퍼저들을 사용한다.
이 퍼저들은 윈도우를 기반으로 하고 있어서, 유용한 시스템콜을 지원하는 리눅스와는 다르게 제약 사항들이 존재한다.
또, 상황에 따라 코어를 제대로 사용하지 못하기도 하고, 윈도우에서 제공하는 기능 때문에 속도가 느려지기도 한다.
가장 기본적으로 윈도우 시스템상에서 세팅하고 설치해 주면 좋은 것들은 다음과 같다.
Improving Fuzzing Speed
1. Windows Defender AV Scanning
AV Scanning 중 Real-time protection 기능은 파일 생성 시 많은 리소스를 차지하므로 꼭 꺼줘야 한다.
기본 윈도우가 아닌 다른 AV가 설치되어 있는 경우에도 마찬가지로 종료한 뒤 퍼저를 실행하는 것이 유리하다.
gpedit.msc 수정
- Computer Configuration → Administrative Templates → Windows Components → Microsoft Defender Antivirus → "Turn off Microsoft Defender Antivirus" → Enabled
- Computer Configuration → Administrative Templates → Windows Components → Microsoft Defender Antivirus → Real-time Protection → "Turn off real-time protection" → Enabled
이후에 직접 Defender를 켜서 Real-time protection이 켜져있는지 확인하고, 켜져있다면 끄면 다시 안켜진다. 재부팅하면 다시 켜지기 때문에, 재부팅을 한다면 다시 꺼줘야 한다.
2. RamDisk
M.2 NVMe SSD 기준으로 2GB/s~5GB/s의 전송속도를 갖고, DDR4 RAM은 2133~3200 MHz(10GB/s~)의 속도를 가진다.
M.2 NVMe PCIe4.0 SSD은 8GB/s정도의 전송 속도를 갖고, DDR5 RAM은 최대 76GB/s 정도의 전송 속도를 제공한다.
따라서 일반적으로 Ram Disk를 활용한다면 보다 빠른 퍼징을 할 수 있다. (Ram Disk 프로그램에 따라 차이가 있을 수 있음)
주의할 점은 간혹 가다 컴퓨터가 재부팅되는 경우가 있는데, 이때 램 디스크 내용이 모두 휘발된다.
따라서, 크래시가 저장되는 폴더는 로컬 디스크 경로로 설정해야 한다. (일반적으로 퍼저 코드를 수정해야 함)
3. Shared Memory
앞서 언급한 WinAFL, TinyAFL, Jackalope와 같은 퍼저들은 Shared Memory를 통한 파일 입력을 지원하고 있다.
파일을 무조건 받아야 하는게 아니라면 RamDisk보다 Shared Memory가 보다 낫다.
하네스를 만들 때 공유메모리를 통해 파일을 전송하는 것은 파일 I/O를 제거하여 속도 향상에 유리하다.
Improving Performance
gflags.exe
gflags.exe는 Windows SDK의 Debugging Tools를 설치하면 같이 설치되는 프로그램 중 하나이다.
Windows에서 퍼징 할 때는 보통 DLL과 같이 바이너리 상태인 데다가, close source이기 때문에 ASan 적용이 어렵다.
일반적으로 Heap 관련 버그들은 탐지하기 쉽지 않지만, gflags.exe의 Full-page Heap 기능을 통해 보완할 수 있다.
조금은 느려질 순 있지만, 속도와 Trade-off 치고는 큰 이득이니 일반적으로는 켜는 것이 좋다.
- gflags.exe /i [aaaa.exe] +hpa +ust
Disabled Error Reporting
1. services.msc
- Windows Error Reporting Service → Disabled → Apply → OK
2. Registry Setting
- regedit->HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting → Disabled(DWORD) value: 1
3. gpedit.msc
- Computer Configuration → Administrative Templates → All settings → Disable Windows Error Reporting → Enabled
Microsoft Store App Debugging
plmdebug
- plmdebug /enableDebug [PackageFullName] [Windbg Full Path]
- plmdebug /disableDebug [PackageFullName] [Windbg Full Path]
Ex) plmdebug.exe /enableDebug Microsoft.ZuneVideo_10.19071.19011.0_x64__8wekyb3d8bbwe "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\WinDbg.exe"
Useful Tools for Fuzzing and Debugging
1. Visual Studio
Fuzzer, Harness Compile시 필요함. 개인적으로 2019 버전이 가장 보편화되어 많이 사용되고 있어서 2019 버전을 추천한다.
2. Windows SDK(Debugger)
SDK에서 Debugger를 설치하면 gflags.exe, windbg, plmdebug.exe, kdnet.exe 등이 같이 설치되어 디버깅에 필수적이다.
3. Python3
4. Sublime Text
Visual Studio Code 등을 사용해도 괜찮음, 손에 익은 거 쓰면 된다.
5. Git Client
6. TeamViewer
7. Wub(Windows Update Blocker)
윈도우 업데이트를 막아주는 프로그램으로 업데이트를 통한 강제 재부팅을 막아주는데 유용하다.
8. 010 Editor
Hex Editor, 손에 맞는 에디터 쓰면 된다.
9. Everything
빠르게 파일을 찾아줄 수 있는 최고의 윈도우 툴 중 하나, 정규식도 지원한다.
10. Windbg Preview
TTD는 정말 좋은 기능이다.
11. Process Explorer(+Hacker)
12. Terminal(From Microsoft App)
13. IDA Pro
- BinDiff, LightHouse
14. PowerToys
화면 분할을 자유롭게 해주는 FancyZones 때문에 사용하고 있다.
'Tools > Windows' 카테고리의 다른 글
Visual Studio Tips (0) 2024.03.13 Instrumentation for Windows (0) 2024.03.04 kdnet: Windows 10 Kernel Network Debugging Setting (0) 2022.12.02 Windows Kernel Symbol(pdb file) (0) 2021.09.14 VirtualKD: Windows 10 Kernel Debugging Setting (0) 2021.09.14