[Linux Kernel] CTF Tip - 부팅까지
보통 커널 익스 문제를 풀게되면 위와같은 파일들을 받게 된다
zerofs.ko 와 같은 .ko 파일은 디바이스 드라이버 파일로 원본 소스코드가 제공되지 않는다면 우리가 직접 분석해야할 파일
run.sh 같은 .sh 스크립트 파일들은 제공 될수도 있고 안될수도 있는데 아마 대부분 qemu 가상머신을 실행시켜주는 스크립트 파일들이다.
꼭 제공되는 스크립트를 사용하지 않아도 qemu 설정을 할수있다면 맘대로 옵션을 바꿔도 된다.
bzImage 는 압축된 커널 이미지로 부팅시 사용된다.
extract-vmlinux 스크립트를 이용해서 압축을 푼뒤 vmlinux 를 만들어 분석시 활용할수 있다.
rootfs.cpio 같은 .cpio 파일들은 대부분 file system 을 압축시켜놓은 파일이다.
이름에 fs 같은 프리픽스가 들어가있으면 100000% 맞으니까 압축풀어서 사용하면 되겟다.
대충 파일들의 용도에 대해서 알아보았으니 실제로 세팅을 해보자.
1. bzImage 를 이용해 vmlinux 생성
아래의 extract-vmlinux 스크립트를 이용해 추출해내면 된다.
https://raw.githubusercontent.com/torvalds/linux/master/scripts/extract-vmlinux
$ ./extract-vmlinux bzImage > ./vmlinux
2. file system 압축풀기, 세팅
위에서 설명한것처럼 .cpio 파일이면 아마 96.87% 의 확률로 fs 압축해놓은걸테니 그냥 풀어버린다.
참고로 rootfs.cpio 는 zer0fs 문제를 예시로 들은것, 다른문제는 파일 이름이 다를수도 있으니 잘 보고 풀어야한다.
아래 명령어 그냥 복붙하고 안된다고 하면 도와줄 자신이 없다...
압축푸는 이유는 분석할때 파일 추가해야하기 때애문.
마지막 명령어는 다시 압축해서 rootfs.cpio 로 돌리는것.
$ mkdir fs
$ cd fs
$ cpio -idm < ../rootfs.cpio
$ find . -print0 | cpio --null -ov --format=newc > ../rootfs.cpio
3. 스크립트 수정
왜때문인지는 모르겟으나 기본제공 스크립트중에 멀쩡한걸 못봤다.
이걸로 부팅하면 한번에 성공한걸 본적이없다. 요상하다.
아래의 것을 복붙해서 새로 만들어버리자.
빨간칠 해놓은 core.cpio 부분은 문제마다 다르니까 알아서 쓱싹 하자
#! /bin/sh
qemu-system-x86_64 \
-m 256M \
-nographic \
-kernel bzImage \
-append 'console=ttyS0 loglevel=3 oops=panic panic=1 nokaslr' \
-monitor /dev/null \
-initrd core.cpio \
-smp cores=4,threads=2 \
-cpu qemu64,smep,smap 2>/dev/null \
-gdb tcp::1234
깔끔하게 부팅성공.
분석할일만 남았다.