kernel debuging with pwndbg - pwndbg 설치
·
Kernel Exploit/Theory
서론 gef가 익숙하고 편해서 사용하고 있었으나, 무슨 이유인지 모르겠지만 kernel debuging 시 register, stack, code 모든 영역의 값이 제대로 나오지 않는 문제가 발생했다. 지원은 하긴 할텐데 정확히 이유를 알 수 없어 어쩔 수 없이 pwndbg를 설치하였다. 설치 방법 아래를 차례로 실행하면 끝. git clone https://github.com/pwndbg/pwndbg cd pwndbg ./setup.sh kernel debuging 기본 셋팅 아래 스크립트를 기준으로 실행하면 된다. #! /bin/sh gdb \ -ex "add-auto-load-safe-path $(pwd)" \ -ex "file vmlinux" \ -ex 'set arch i386:x86-64' \..
rootfs.cpio 파일 추가 shell script
·
Kernel Exploit/Theory
아무래도 반복적으로 파일 압축 / 해제를 해야할 것 같아서 간단히 shell script를 만들어 보았다. 일부 명령어가 룻 권한으로 실행되어야하기에 미리 root으로 권한을 유저를 변경한 뒤 실행하자. rootfs.cpio 파일과 추가할 파일이 같은 폴더에 있을 때 ./cpio.sh 파일1 파일2 파일3 ... 과 같은 방식으로 사용하면 된다. #! /bin/bash if [ $# -eq 0 ] ; then echo "useage : cpio.sh file1 file2 ..." exit 0 else for var in "$@" do if [ ! -e $var ] ; then echo $var : "file not exist" exit 0 fi done mkdir unzip cp ./rootfs.cpio..
Kernel 보호기법 및 우회법
·
Kernel Exploit/Theory
서론커널 공간도 유저 공간과 마찬가지로 보호기법이 있다.다행이라면 유저 공간의 보호기법과 대동소이한다는 점.아직 각 보호기법에 따른 공격법을 공부하지 않았기에 느낌적인 느낌으로 써내려가본다. 보호기법 확인 방법checksec 먹힌다./proc/cpuinfo와 /etc/default/grub 파일을 확인qemu script에 보통 설정되어있음. 제일 좋은건 두번째, 세번째 방법이고cat /proc/cpuinfo | grep flags로 smep, smap/etc/default/grub에서 kaslr을 확인하거나 qemu script에-append nokaslr-cpu smep, smap와 같이 확인 가능하다. 또는 커널 내에서 아래와 같이 확인 가능하다.~ $ cat /proc/cmdlineroot=/de..
exploit binary를 커널 이미지에 삽입하기.
·
Kernel Exploit/Theory
앞서 생성한 것과 같이 bzImage는 kernel, rootfs.cpio는 기본적인 파일 시스템의 구조만 가지고 있으며, qemu로 실행 시 rootfs.cpio의 파일들만 나타날 것이다. 그러므로 익스코드 작성 후 해당 익스 바이너리를 rootfs.cpio 파일 내에 넣어줘야한다. cpio 파일 압축 해제 명령어는 아래와 같고 cpio -idv rootfs.cpio 더불어 바이너리는 커널과 파일 시스템 내에 링커가 없기 때문에 -static 옵션을 주고 컴파일해야한다. 또는 base64로 인코딩..
vmlinux 추출하기
·
Kernel Exploit/Theory
vmlinux 앞선 kernel image build 시에도 언급한 것과 같이 vmlinux는 커널 디버깅에 사용할 여러 주소들과 값들을 가지고 있으며, 보통 CTF에서는 제공되지 않는 경우가 많다. (용량이 커서?!) 그러므로 아래와 같이 추출 가능하다. extract-vmlinux bzImage 파일에서 vmlinux를 추출할 수 있는데, 다음과 같은 명령어로 추출할 수 있다. /usr/src/linux-headers-$(uname -r)/scripts/extract-vmlinux bzImage > vmlinux 다만 추출된 파일에서는 심볼들이 삭제된 상태이지만, objdump, ROPgadget 등으로 ROP을 위한 gadget의 주소는 구할 수 있다.
qemu 및 gdb setting
·
Kernel Exploit/Theory
qemu란? vmware와 같은 가상 머신 에뮬레이터이다. 보통 ctf에서는 앞서 만든 bzImage와 rootfs.cpio (+vmlinux는 주어지기도하고 아닐수도 있음) 파일로 qemu를 통해 가상 머신을 실행할 수 있다. run.sh qemu가 어떻게 구동될지 설정을 담고 있는 파일이다. #!/bin/sh qemu-system-x86_64 \ -m 64M \ -nographic \ -kernel bzImage \ -append "console=ttyS0 loglevel=3 oops=panic panic=-1 nopti nokaslr" \ -no-reboot \ -smp 1 \ -monitor /dev/null \ -initrd rootfs.cpio \ -net nic,model=virtio \ -..