pwnable/Fuzzing

AFL Parallel fuzzing

범고래_1 2022. 1. 24. 12:44

 

AFL은 단일 코어로 돌기 때문에, 멀티 코어로 퍼징하려면 각 코어마다 노드를 실행시켜야 한다.

한 개의 main 노드와 여러 개의 secondary 노드로 구성하면 된다.

각 노드는 주기적으로 싱크 디렉토리를 스캔하며, 재밌어 보이는 테스트 케이스를 자기 퍼저로 가져와 퍼징한다.

퍼포먼스 이유로 main 노드만이 큐를 싱크 시키며, secondary 노드들은 main 노드로 부터 싱크를 받아온다.

 

한번의 main 노드가 도는 동안 secondary 노드는 여려번의 cycle을 수행한다.

* 큐에 있는 모든 input이 퍼징될 때까지 반복하는 것이 하나의 cycle이다.

Main node

-M 옵션으로 main 노드 실행

afl-fuzz -i input -o output -M Main_fuzzer -- ./src/vim -u NONE -i NONE -n -X -Z -e -m -s -S @@ -c ":qa!"

Secondary Node

-S 옵션으로 secondary 노드 여러개 실행

afl-fuzz -i input -o output -S fuzzer01 -- ./src/vim -u NONE -i NONE -n -X -Z -e -m -s -S @@ -c ":qa!"
afl-fuzz -i input -o output -S fuzzer02 -- ./src/vim -u NONE -i NONE -n -X -Z -e -m -s -S @@ -c ":qa!"
afl-fuzz -i input -o output -S fuzzer03 -- ./src/vim -u NONE -i NONE -n -X -Z -e -m -s -S @@ -c ":qa!"

이렇게 하면 총 4개 코어로 퍼징을 하게 된다.

Monitor

퍼저들이 잘 돌아가고 있는지 afl-whatsup으로 확인

새 path를 찾지 못 하면 퍼징을 멈추면 된다.

afl-whatsup [-s] output

크래시 몽땅 확인

#!/bin/sh

for file in ~/fuzzing/fuzzing/output/Main_vim/crashes/*; do
echo $file >> resMain
timeout 4 ~/fuzzing/vim-asan/src -u NONE -i NONE -n -X -Z -e -m -s -S $file -c ":qa!" 2>> resMain
done

for file in ~/fuzzing/fuzzing/output/fuzzer01/crashes/*; do
echo $file >> res1
timeout 4 ~/fuzzing/vim-asan/src -u NONE -i NONE -n -X -Z -e -m -s -S $file -c ":qa!" 2>> res1
done

for file in ~/fuzzing/fuzzing/output/fuzzer02/crashes/*; do
echo $file >> res2
timeout 4 ~/fuzzing/vim-asan/src -u NONE -i NONE -n -X -Z -e -m -s -S $file -c ":qa!" 2>> res2
done

for file in ~/fuzzing/fuzzing/output/fuzzer03/crashes/*; do
echo $file >> res3
timeout 4 ~/fuzzing/vim-asan/src -u NONE -i NONE -n -X -Z -e -m -s -S $file -c ":qa!" 2>> res3
done

for file in ~/fuzzing/fuzzing/output/fuzzer04/crashes/*; do
echo $file >> res4
timeout 4 ~/fuzzing/vim-asan/src -u NONE -i NONE -n -X -Z -e -m -s -S $file -c ":qa!" 2>> res4
done

for file in ~/fuzzing/fuzzing/output/fuzzer05/crashes/*; do
echo $file >> res5
timeout 4 ~/fuzzing/vim-asan/src -u NONE -i NONE -n -X -Z -e -m -s -S $file -c ":qa!" 2>> res5
done

for file in ~/fuzzing/fuzzing/output/fuzzer06/crashes/*; do
echo $file >> res6
timeout 4 ~/fuzzing/vim-asan/src -u NONE -i NONE -n -X -Z -e -m -s -S $file -c ":qa!" 2>> res6
done

for file in ~/fuzzing/fuzzing/output/fuzzer07/crashes/*; do
echo $file >> res7
timeout 4 ~/fuzzing/vim-asan/src -u NONE -i NONE -n -X -Z -e -m -s -S $file -c ":qa!" 2>> res7
done

 

References : 

https://d0ngr0thy.tistory.com/127

https://aflplus.plus/docs/parallel_fuzzing/

https://github.com/AFLplusplus/AFLplusplus/blob/stable/docs/fuzzing_in_depth.md

'pwnable > Fuzzing' 카테고리의 다른 글

AFL++ LTO mode  (1) 2022.01.29
AFL Fuzzing  (0) 2022.01.24