xmin. guest@xmin ~ $
~/ $
[리눅스 커널 취약점 분석] 2025년 11월 1일

리눅스 커널 퍼징을 위한 Syzkaller 빌드

Syzkaller 퍼저 빌드 및 설정, Go 환경 구성부터 퍼징 실행까지의 과정

fuzzkernel fuzzingLinux KernelSyzkaller

본 블로그는 로컬 환경에서 실시되었으며, 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 파일을 만들어 아래 내용을 넣어주고 주면 퍼징을 수행할 수 있다.