Pwnstar

linux에 afl설치하기 본문

문제 풀기 위한 배경지식

linux에 afl설치하기

포너블처돌이 2021. 10. 2. 23:14

진짜 상당히 오랜만에 블로그에 글을 쓰는데, 올해는 씨텦은 거의 안하고 버그헌팅 공부만 주구장창 하는 중이다. 근데 뭐 딱히 블로그에 글 쓸 거리도 없고 해서 잘 안쓰고 있었는데, winafl을 설치하다가 에러가 너무 많이 떠서

에휴.....이거만 잡고있으면 안되겠다 싶어서 지금 뭐...afl을 윈도우에서 쓰려고는 하는데, afl이 뭔지도 잘 모르고, 공부도 할겸, linux에서도 afl 설치를 좀 해보자 해서 linux에서 설치하는 과정을 올려보려고 한다. 설치 과정이 그리 어렵진 않다. 그냥 뭐 설치 안되어 있는것들 설치해주고, 하면 되는데, 그 과정이 좀 귀찮을 뿐...(그래도 winafl보다는 훨씬 들하다.)

먼저 afl fuzzer가 무엇인지부터 알아보자.

American Fuzzy Loop의 줄임말로 테스트 케이스의 코드 적용 범위(Code Coverage)를 효율적으로 늘리기 위해 유전자 알고리즘을 사용하는 fuzzer이다. 

이게 무슨 말이냐면, 만약 다른 퍼저 예를 들어, BFF fuzzer로 이미지 뷰어 프로그램을 돌린다고 가정해보자. 시드파일로는 물론 이미지들이 들어갈 것이고, 시드파일의 값에 따라 나오는 크래시는 모두 이미지 파일을 여는 부분부터 이미지 파일을 닫는 부분 사이에 발생할 것이다.

그렇다면 뷰어 프로그램에서 그 이외의 부분들은 처음 한번만 실행하고, 그 이후에는 실행할 필요가 없다. 이미지 파일을 여는 부분부터, 닫는 부분까지만 반복적으로 실행할 수 있다면, 더욱 효율적으로 빠르게 퍼저를 돌릴 수 있게 될 것이다. 

이 과정은 코드 삽입(instrumentation)을 필요로 하는데, white box 프로그램이라면 afl 컴파일러를 통해 컴파일 과정에서 코드를 삽입할 수 있게 되지만, black box 프로그램의 경우 qemu mode를 추가로 빌드해줌으로써 실행과정에서 코드를 삽입할 수 있게 된다. 

위 이미지는 대부분의 Code Coverage Guided 퍼저들의 기본적인 작동 방식을 나타낸 것이다.

자세한 설명은 굳이 필요없을 것 같고....linux에서 afl fuzzer를 빌드하는 과정을 살펴보자. 환경은 Ubuntu 16.04, 18.04, 20.04 모두 시도해 보았는데, 16.04를 제외하고는 모두 실패했다.

퍼저를 돌릴 타겟 프로그램은 간단한 프로그램으로 선택했다. linux의 이미지 뷰어인, fbi 프로그램을 타겟으로 선정했다. black box 프로그램이므로, afl fuzzer를 빌드한 이후, qemu mode를 추가로 빌드해야 한다.

wget http://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz
tar -xvf afl-latest.tgz
cd afl-2.52b/
make
sudo make install

우선 afl fuzzer를 빌드하는 과정은 이게 전부인데, qemu mode를 빌드하기 위해 추가로 설치해줘야할 것들이 좀 있다.

우선 afl fuzzer를 빌드하면

다음과 같이 생성된 파일들을 볼 수 있는데, black box 퍼징을 위해 우선 qemu_mode 디렉터리로 들어가보자.

이렇게 구성되어 있는데, build_qemu_support.sh를 실행시켜주면 qemu mode를 빌드하는 것이 가능하다.

추가로 설치해줘야 할 것들은

libtool

libtool : http://ftp.gnu.org/gnu/libtool/

 

Index of /gnu/libtool

 

ftp.gnu.org

해당 위치에서 다운받은 후, 

tar xvfz libtool-2.4.6.tar.gz
cd libtool-2.4.6/
./configure --prefix=/usr
make
sudo make install

위 과정으로 설치해주면 된다.

libtool를 설치하기 위해 1.4.6 이상 버전의 M4를 설치하라는 말이 나오면 이것또한 설치해주면 된다.

M4 install

http://ftp.gnu.org/gnu/m4/

 

Index of /gnu/m4

 

ftp.gnu.org

해당 위치에서 적당한 버전을 받고, 

tar -xvf m4-1.4.19.tar.gz
cd m4-1.4.19/
mkdir build && cd build
../configure --prefix=/usr
make
sudo make install

이렇게 설치를 진행해주면 된다.

 

automake

sudo apt install automake

bison

sudo apt install bison

glib2

sudo apt-get install libglib2.0-*

 

딱 이정도까지가 최대한으로 필요한 것들이다. 퍼저용으로 18.04를 설치하고 바로 설치하게 되면 이것들을 모두 해줘야한다.

그리고 build_qemu_support.sh를 실행시키면 되는데, 18.04와 20.04에서 실패한 이유가 여기서 glib2의 버전이 맞지 않기 때문인 것 같다.

glib2까지 모두 설치한 후, qemu mode를 빌드하면 블랙박스 퍼징이 가능하게 된다.

afl 돌리는 명령어는 

white box

afl-fuzz -i (seed file dir) -o (output dir) target_program

 

black box

afl-fuzz -Q -i (seed file dir) -o (output dir) target_program

앞에 -Q 옵션만 더 붙여주면 된다.

 

 

이렇게 돌려볼 수 있다.

Comments