리눅스 커널 퍼징을 위한 Syzkaller 빌드
Syzkaller 퍼저 빌드 및 설정, Go 환경 구성부터 퍼징 실행까지의 과정
본 블로그는 로컬 환경에서 실시되었으며, wsl과 로컬 환경 동일합니다.
linux-6.17.6 버전을 기준으로 작성 되었으며, 모든 설치 과정은 동일하니 linux-6.17.6 부분만 각자 다운받은 버전으로 변경하면 됩니다.
본 블로그의 작업 디렉토리는 /usr/src/kernel 입니다.
의존성 설치
시작하기 앞서 의존성을 설치한다.
sudo apt update sudo apt install make gcc flex bison libncurses-dev libelf-dev libssl-dev debootstrap qemu-system-x86 git vim
이미지 빌드
다음 명령을 통해 image를 빌드한다.
mkdir /usr/src/kernel/image cd /usr/src/kernel/image wget https://raw.githubusercontent.com/google/syzkaller/master/tools/create-image.sh -O create-image.sh chmod +x create-image.sh ./create-image.sh
QEMU 부팅 테스트
이어서 빌드한 내용을 기반으로 qemu를 부팅한다.
sudo qemu-system-x8664 \ -m 2G \ -smp 2 \ -kernel /usr/src/kernel/linux-6.17.6/arch/x86/boot/bzImage \ -append "console=ttyS0 root=/dev/sda earlyprintk=serial net.ifnames=0" \ -drive file=/usr/src/kernel/image/bullseye.img,format=raw \ -net user,host=10.0.2.10,hostfwd=tcp:127.0.0.1:10021-:22 \ -net nic,model=e1000 \ -enable-kvm \ -nographic \ -pidfile vm.pid \ 2>&1 tee vm.log
정상적으로 부팅이 되었다면 아래 명령어를 다른 터미널에서 입력 시 접속이 될것이다.
ssh -i /usr/src/kernel/image/bullseye.idrsa -p 10021 -o "StrictHostKeyChecking no" root@localhost
qemu가 정상 부팅 된다면 다음과 같을 것이다.
Go 빌드
이제 Syzkaller를 빌드하기 위해 go를 빌드한다.
wget https://dl.google.com/go/go1.23.6.linux-amd64.tar.gz tar -xf go1.23.6.linux-amd64.tar.gz
mv go goroot mkdir gopath export GOPATH=pwd/gopath export GOROOT=pwd/goroot export PATH=$GOPATH/bin:$PATH export PATH=$GOROOT/bin:$PATH
Syzkaller 빌드
이어서 바로 Syzkaller를 빌드한다.
git clone https://github.com/google/syzkaller cd syzkaller make
퍼징 설정 및 실행
이어서 my.cfg 파일을 만들어 아래 내용을 넣어주고 주면 퍼징을 수행할 수 있다.
댓글