환경 구축

[리눅스 커널 취약점 분석] 리눅스 커널 퍼징을 위한 qemu, BusyBox 빌드

xmin 2025. 11. 1. 02:41

본 블로그는 로컬 환경에서 실시되었으며, wsl과 로컬 환경 동일합니다.

linux-6.17.6 버전을 기준으로 작성 되었으며, 모든 설치 과정은 동일하니 linux-6.17.6 부분만 각자 다운받은 버전으로 변경하면 됩니다.

본 블로그의 작업 디렉토리는 /usr/src/kernel 입니다.

 

 

qemu 설치

sudo apt install qemu-utils qemu-system-x86 qemu-kvm

이 명령어 한 줄이면 qemu 설치는 끝난다.

 

qemu를 실행하기 위해선 BusyBox를 빌드 해야한다.

https://www.busybox.net/

위 링크에서 원하는 버전을 다운받자. ( 접속이 잘 안 되기에 무지

성 시도하다보면 언젠가 됩니다.)

중간의 BusyBox 1.37.0 버튼을 누르면 다운 받을 수 있다.

 

이어서 busybox를 빌드하는 과정은 다음과 같다.

cd /usr/src/kernel
sudo cp ~/Downloads/busybox-1.37.0.tar.bz2 ./
sudo tar -xvf ./busybox-1.37.0.tar.bz2
cd busybox-1.37.0
make menuconfig

menuconfig가 켜지면 아래 두가지 옵션을 확인한다.

  1. Settings → Build options → build static binary 선택
  2. Networking Utilities → inetd 선택 해제
  3. Networking Utilities → tc 선택 해제

방향키, 스페이스바, 엔터를 통해 내부에서 이동 및 선택할 수 있다.

 

이어서 의존성 설치 후 빌드를 진행한다.

sudo apt update
sudo apt install -y libncurses-dev libnl-3-dev libnl-genl-3-dev linux-headers-$(uname -r)
sudo make CONFIG_PREFIX=../result install

 

busybox 빌드 출력

이런 출력이 나온다면 빌드에 성공한 것이다. 이어서 다음 명령어를 실행시켜 준다.

cd ../result/
mkdir var dev etc lib proc tmp sys

# init 파일 만들기
cat << 'EOF' > ./init
#!/bin/sh

mount -t proc none /proc
mount -t sysfs none /sys
mount -t devtmpfs devtmpfs /dev

exec 0</dev/console
exec 1>/dev/console
exec 2>/dev/console

echo "7 4 1 7" > /proc/sys/kernel/printk

cp /proc/kallsyms /tmp/kallsyms

setsid cttyhack setuidgid 1000 sh

umount /proc
umount /sys
poweroff -d 0 -f
EOF

chmod 755 ./init
find .| cpio -o --format=newc > ../rootfs.cpio

잘 실행되었다면 다음 명령어를 실행한다.

cd ../
# 압축 해제
mkdir rootfs
mv ./rootfs.cpio ./rootfs
cd ./rootfs
cpio -id -v < rootfs.cpio

#압축
find .| cpio -o --format=newc > ../rootfs.cpio
cd ../

이또한 잘 실행되었다면 바로 qemu가 정상 실행 되는지 확인 해보자

cd /usr/src/kernel
qemu-system-x86_64 \
-m 4G -smp 4,cores=4,threads=1 \
-kernel /usr/src/kernel/linux-6.17.6/arch/x86/boot/bzImage \
-initrd  ./rootfs.cpio \
-append "root=/dev/ram rw console=ttyS0 oops=panic panic=1 quiet" \
-netdev user,id=t0, -device e1000,netdev=t0,id=nic0 \
-nographic  \
-cpu host \
-enable-kvm \
-s

저런 라인이 뜬다면 잘 실행 된 것이다. exit를 입력해 종료하자

 

이상으로 qemu, busybox 빌드에 대해 알아보았다.