Demon 시즌2/linux kernel exploitation

[linux kernel] (5) - 환경 세팅

jir4vvit 2020. 12. 30. 18:47

본격적인 리눅스 커널 분석과 CTF 문제 풀이를 위해 환경 구성을 해보았다. 

 


우분투 버전 : ubuntu 18.04

 

 

qemu 세팅

 우분투 18.04의 경우 기본적으로 qemu가 설치되어 있으며, 추가적으로 qemu-kvm만 설치해주면 된다.

sudo apt-get install qemu-kvm

 

 

CTF에서 주로 제공되는 파일

CTF 문제에서는 커널 이미지(bzImage)와 파일시스템(rootfs.cpio)를 제공해 준다.

디버깅에 유용한 vmlinux는 제공해주기도 하고 제공해주지 않는 경우도 있는데, 이는 extract-vmlinux 스크립트를 이용해 bzImage에서 추출할 수 있다고 한다. 

/usr/src/linux-headers-$(uname -r)/scripts/extract-vmlinux bzImage > vmlinux

 

boot.sh는 qemu를 실행하는 옵션이 작성되어 있는 쉘 스크립트 이다. 

 

 

익스는 어떻게?

리눅스 커널에서 권한 상승을 일으키기 위해선, C언어로 작성된 exploit code를 컴파일한 파일이 필요하다. 

익스 코드를 컴파일한 파일을 파일 시스템에 넣어줘야하는데 빌드된 커널과 파일시스템에는 gcc와 링커 등이 없기 때문에 부팅된 커널에서 코드를 컴파일할 수 없기 때문이다. 

 

때문에 사용할 익스 코드를 -static 옵션으로 컴파일을 해줘야 한다.

gcc -o ex ex.c -static

컴파일 후

 

cpio -id -v < rootfs.cpio 명령을 통해 cpio 압축을 해제한다. 

mkdir rootfs
mv rootfs.cpio rootfs
cd rootfs
cpio -id -v < rootfs.cpio

 

 

기존의 rootfs.cpio를 삭제하고 컴파일한 ex 파일을 현재 rootfs 디렉터리로 옮긴다.

그리고 find .| cpio -o --format=newc > ../rootfs.cpio 명령으로 파일시스템을 재압축한다. 

rm rootfs.cpio
mv ../ex ./
find .| cpio -o --format=newc > ../rootfs.cpio

 

 

boot.sh 스크립트를 실행해서 qemu를 실행하고 파일 목록을 살펴보면 ex 파일이 들어있는 것을 확인할 수 있다.