디버깅을 위한 준비하기
tool : KGDB, QEMU, BUSYBOX
제공된 요소: vmlinux, bzImage
https://jeongzero.oopy.io/73084e52-54fa-43e2-986b-072ee2a4f80d
상기의 링크를 바탕으로 디버깅 환경을 구성하였다.
환경: ubnutu 22.04
커널을 올릴 가상머신인 qemu와 dependency들을 설치해준다.( 본래의 글에서는 kernel-package를 설치하지만, 무슨이유에서인지 현재는 설치되지 않고, 설치하지 않아도 무방한 것으로 안다.)
sudo apt-get install qemu qemu-system
sudo apt-get install build-essential libncurses5 libncurses5-dev bin86 libssl-dev bison flex libelf-dev
주어진 요소가 vmlinux와 bzImage뿐이므로 rootfs파일을 구성해야한다.
이를 위한 busybox를 설치해야 한다.
필자는 위 링크의 구성대로 따르기 위해 v1.31.0을 설치하였다.
[+]v1.31.0에서 발생하는 에러로 인하여 최신 버전으로 변경하여 아래의 명령어들을 재수행하였다. (v1.36.1)
wget https://busybox.net/downloads/busybox-1.31.0.tar.bz2
tar -xvf busybox-1.31.0.tar.bz2
cd busybox-1.31.0
make defconfig
make menuconfig
이 때, menuconfig에서 아래와 같이 구성한다.
=================
build static binary 옵션 활성화
build debug information 옵션 활성화
그 밑에 disable compiler optimazations뭐시기 비활성화(어셈언어를 컴파일러가 날림)
=================
후에
make busybox
mkdir _install
make CONFIG_PREFIX=_install install
cf. static 옵션이 활성화되었는지 확인하고 싶다면, make defconfig이후에 구성된 .config파일을 확인하면 된다.
하지만 make CONFIG_PREFIX ~~~~수행 이후에 권한 관련 에러가 발생하여
make clean 명령 후
보안상으로는 좋지 않지만 chmod +s /bin/busybox 를 수행 이후에 다시 make하였다.
You will probably need to make your busybox binary
setuid root to ensure all configured applets will
work properly.
그래도 위의 에러는 해결되지 않았다...
일단 이후의 내용 계속 수행해보기로 결정
_install 디렉터리에 잘 생성된 것을 볼 수 있다.
그리고 올린 커널에서 실행할 파일이 있으므로
같이 넣고 디버깅을 하기 위해 local에 있는 pc에서 copy하여 추가해주었다.
그리고 cpio명령어를 통해 압축하여 rootfs.img.gz를 생성하였다.
find . | cpio -H newc -o | gzip > rootfs.img.gz
상기의 img.gz는 뭔가 불안정해보여서 그냥 .cpio파일로 짰다.
(아래의 명령어 참고)
find . | cpio -o --format=newc > rootfs.cpio
하지만 여전히 rootfs파일에 뭔가 문제가 있는 듯하다.
[+] 하하 뻘짓하고 있었다 ㅎ..
내 스크립트 파일의 오타로 인하여 안되는 것이었다.
디버깅을 위해서는 -append부분에 kgdbwait 옵션을 추가해주고 다른 콘솔에서 pid를 활용하여 붙으면된다.
qemu-system-x86_64 \
-m 50G \
-smp 2 \
-cpu host \
-kernel /home/hackin/kernel_study/bzImage \
-append "console=ttyAMA0 root=/dev/sda nokaslr earlyprintk=serial net.ifnames=0" \
-drive file=/home/hackin/kernel_study/bullseye.img,format=raw\
-initrd /home/hackin/kernel_study/busybox-1.36.1/_install/rootfs.cpio \
-net user,host=10.0.2.10,hostfwd=tcp:127.0.0.1:10022-:22,hostfwd=tcp:0.0.0.0:8080-:8080 \
-net nic,model=e1000 \
-enable-kvm \
-nographic \
-pidfile vm.pid \
2>&1 | tee vm.log
'Kernel' 카테고리의 다른 글
Smart seed selection‑based effective black box fuzzing for IIoT protocol 번역본 (0) | 2024.03.21 |
---|---|
Linux kernel - memory leak in batadv_iv_ogm_aggregate_new (0) | 2024.01.09 |
Syzkaller - Coverage (0) | 2023.10.30 |
Kernel self protection (0) | 2023.01.17 |
Fuzzing (0) | 2023.01.17 |