$ sudo apt update $ sudo apt install -y build-essential python3-dev automake git flex bison libglib2.0-dev libpixman-1-dev python3-setuptools 우선 패키지들을 설치한다. 여기서 중요한것은 llvm 설치이다. 여기서 llvm은 주로 다양한 컴파일러 기능을 위해 사용한다. $ sudo apt install -y lld-11 llvm-11 llvm-11-dev clang-11 그 밖의 필요한 것들을 설치해준다. $ sudo apt install -y gcc-$(gcc --version|head -n1|sed 's/.* //'|sed 's/\\..*//')-plugin-dev libstdc++-$(gc..
AFL란? American Fuzzy Lop의 약자로, mutational 방식의 coverage guided fuzzer이다. 브르투포스로 입력을 받고 coverage를 넓혀가며 프로그램 제어 흐름에 대한 변경사항을 기록하고,이를 로깅하여 유니크한 crash를 발경해 낼 수 있다. AFL의 특징 coverage 기반 fuzzer이기 때문에 매우 효율적인 fuzzing이 가능하다. code coverage 측을 위한 코드를 컴파일 타임에 삽입한다. QEMU를 이용해서 컴파일 타임이 아닌, 런타임시에 코드삽입도 가능하다. 여기서 말하는 코드는 코드가 어디가 실행됬고, 어디가 실행 안됬는지를 측정해주는 코드를 뜻한다. Coverage Guided Feedback : AFL의 커버리지 피드백 기법은 하이브리드..
PreProcess 초기 준비 단계이다. 아래와 같은 작업을 한다. 1. PUT에 대한 instrumentation 적용 2. 쓸모없는 configureation 제거 3. seed trimming 4. dirver app 생성 PUT 코드 사이사이에 instrumentation 코드를 삽입해 새로 컴파일한다. code coverage를 높이기 위한 작업으로 instrumentation이라고 한다. gray-box와 white-box는 PUT에 instrumentation을 적용해 execution feedback을 수집하고 그에 맞춰 더 정교한 퍼징을 수행한다. Program instrumentation을 static과 dynamic으로 나뉜다. Static 방식은 PUT 실행전 Preprocess 단..
Fuzzing이란? fuzzing이란 fuzz input을 사용해 PUT(Program Under Test)를 실행하는 것이고, fuzz input 이란 PUT가 예상하지 못할 input을 뜻한다. PUT이 잘못 처리하는 input 혹은 개발 의도와는 다른 행동을 보이는 input을 넣어 PUT을 실행하는 것이라고 볼 수 있다. 즉 fuzzing이란, 자동화 테스트로 기형/반기형적 데이터를 주입하여 소프트웨어 버그를 찾는 블랙박스 테스팅 기술이다. PUT은 테스트 실행중인 프로그램이라고 해석하자 Fuzzing을 왜 쓰나? 결론적으로는 fuzzing을 통해 버그를 자동으로 찾을 수 있다는 것이다. 일반적인 정적분석으로도 버그를 찾을 수 있지만 많은 시간과 노력이 들며 자신의 실력에 따라 버그를 찾을 수도,..