sw testing and fuzzing camp lab2-vulnerable
의미있는 test case 를 변화시켜 수행시킨다.
Seed – 의미있는 test case
P(Pase) – well working 돌려서 잘 작동하는 test case, Population
F- 돌려서 충돌이 나는 test case들을 crash라고 한다.
Pase인경우, 이전 coverage 비교 후
Coverager가 커진다(의미 있는 변화, 새로운 브렌치) -> Population에 추가
fuzzing을 할 수 있도록 afl을 붙여 컴파일을 시킨다.
afl-gcc -o vulnerable vulnerable.c
실행파일을 실행시켜보자
다음과 같이 "u 5 abcdefgh"의 인풋을 주면 앞의 5자만 upper하여 출력된 것을 볼 수 있다.
"head 4 abcdefg"의 인풋을 주면 앞의 4자만 출력된 것을 볼 수 있다.
이제 fuzzing 화면을 열어서 확인해보자. 다음 명령어를 실행시키면 다음과 같이 화면이 나온다.
현재 실행키기고 있는 input값은 splice 12인것을 볼 수 있다.
그리고 new path는 57초 전에 나왔고
마지막으로 crash된 input은 1분 18초 전에 나왔음을 볼 수 있다.
afl-fuzz -i input -o output ./vulnerable
input은 다음과 같이 구성되어 있다.
그냥 빈 파일이 존재한다.
fuzz가 저 빈파일의 내용물을 randonm으로 변화시켜 test 한다.
그리고 output은 fuzz를 실행시킨 결과를 보여주는데, crashes폴더는 충돌된 결과를 담고있고, queue의 경우, population의 정보를 담고 있다.
clang = gcc