Main reference : https://github.com/pr0cf5/kernel-exploit-practice

Contents

  1. Loadable Kernel Module (LKM)에 대한 간단한 설명
  2. 커널 문제를 위한 환경 세팅
  3. 커널 디버깅 방법

Loadable Kernel Module

소개

Loadable Kernel Module (LKM)은 주로 커널의 기능을 추가하는데 사용된다. 예를 들어, 장치 드라이버를 추가하거나, 새로운 파일 시스템을 추가하는 등의 기능을 수행할 수 있다. Loadable의 특성으로 쉽게 추가하거나 제거할 수 있게 디자인되어 있기에 백도어를 설치하는 등의 악의적인 목적으로 사용될 수도 있기에 다른 사람이나 기관이 배포한 LKM을 설치할 때에는 주의를 요한다. 경우에 따라서는 모듈이 설치되었음을 속이는 루트킷이 설치될 때도 있다.

명령어

LKM을 관리하는데 사용되는 리눅스 명령어들을 살펴보자.

https://itgameworld.tistory.com/59

insmod, rmmod : 커널 모듈 추가/삭제
lsmod : 추가된 커널 모듈 리스트 확인
depmod : 의존성을 고려하며 modules.dep 파일 갱신. modprobe 명령어를 사용하기 전에 사용된다.
modprobe : modules.dep를 참조하여 모듈들을 추가한다.

이 외에도 커널 익스플로잇을 할 때 유용한 명령어들이 있다.

cat /proc/modules, cat /sys/modules : lsmod와 거의 비슷하지만 kaslr이 없을 경우 모듈의 주소를 확인할 수 있다.

cat /proc/kallsyms | grep "<symbol>" : kaslr이 없을 경우 해당 심볼의 주소를 확인할 수 있다.

빌드 방법

buildroot 세팅

LKM을 빌드하는 데엔 여러 방법이 있다. 이 포스트에서는 buildroot를 사용하여 빌드하는 방법을 소개한다.

가상환경에서 빌드하지 않고 기존 OS에 포함되어 있는 커널 코드를 사용한다면 buildroot를 굳이 사용하지 않아도 된다. 하지만 busybox 세팅이나 root file system 등을 편하게 만들어 사용하려면 buildroot가 매우 유용하다.

buildroot를 받아서 압축을 풀고 적절히 설정한 뒤 빌드해주면 bzImage와 root file system이 생성된다. busybox 세팅을 바꾸어 루트권한을 획득할 수 있도록 바꾸고, 아키텍쳐 설정과 파일시스템 설정을 적절히 바꾸어주면 된다. 자세한 내용은 pr0cf5님 깃허브를 참고하면 된다. (https://github.com/pr0cf5/kernel-exploit-practice/tree/master/building-kernel-module)

빌드를 완료하게 되면 아래와 같이 output 폴더 안에 bzImagerootfs.cpio가 생성되게 된다. 해당 파일들은 다음 스테이지에서 사용된다.

가상환경 세팅

커널 모듈을 쉽게 올려보고 테스트해보기 위해서는 가상환경을 하나 준비해야 한다. QEMU를 통해 진행할 것인데, 필요한 준비물은 앞 단계에서 만든 kernel image와 (bzImage) 초기 파일시스템이다. (rootfs.cpio)

예시부터 보고 넘어가면 이해가 쉽기 때문에 예시부터 보자.

https://github.com/pr0cf5/kernel-exploit-practice/tree/master/building-kernel-module
qemu-system-x86_64 -initrd initramfs.cpio -kernel bzImage -append 'console=ttyS0 root=/dev/ram oops=panic panic=1' -monitor /dev/null -m 64M --nographic -smp cores=1,threads=1 -cpu kvm64,+smep

QEMU x86_64 softmmu 버전인 qemu-system-x86_64를 통해 부팅한다. 위 명령어를 보면 initrd 옵션에 initramfs.cpio*를 넣고 있고, *kernel 옵션에 bzImage를 넣고 있음을 확인할 수 있다. 이에 추가로 VM에서 사용할 CPU 코어수나 CPU 종류, kaslr과 smep와 같은 security mitigation 등을 설정할 수 있다.

파일시스템 세팅

'보안 > Pwn' 카테고리의 다른 글

Kernel 1 - 환경 세팅 (작성중)  (0) 2021.05.04
개인적으로 생각하는 시스템 보안 테크트리  (0) 2021.01.23
공부용 갓갓 레퍼런스들  (0) 2021.01.23

+ Recent posts