Kernel - SMEP 우회, krop
·
Kernel Exploit/Theory
서론 이제 보호기법을 하나씩 추가해보자. 우선은 SMEP이다. 2023.08.20 - [Kernel Exploit] - Kernel 보호기법 및 우회법 Kernel 보호기법 및 우회법 서론 커널 공간도 유저 공간과 마찬가지로 보호기법이 있다. 다행이라면 유저 공간의 보호기법과 대동소이한다는 점. 아직 각 보호기법에 따른 공격법을 공부하지 않았기에 느낌적인 느낌으로 wyv3rn.tistory.com 본론 SMEP은 유저 공간에서의 NX와 같이 실행 권한을 제한하는 방법이다. CR4 레지스터에 SMEP을 제어하는 비트가 있어 이를 0으로 만들거나, 유저 공간의 rop과 같이 krop이 가능하다. 본 글에서는 krop을 기준으로 한다. 1. 환경설정 1.1. vmlinux 추출하기 익히 아는 것과 같이 rop..
kernel - ret2usr
·
Kernel Exploit/Theory
서론 가장 기본적인 커널 익스 기법인 ret2usr에 대해서 알아보자. 간단히 먼저 설명하자면, ret2usr는 stack buffer overflow에서 return to shellcode와 같다고 보면 된다. 본론 우선 테스트는 유명한 커널 익스 사이트인 포냐블의 LK01 파일을 기본으로 한다. Holstein 모듈 분석 및 취약성 실행 | 전당포! (pawnyable.cafe) Holsteinモジュールの解析と脆弱性の発火 | PAWNYABLE! Holsteinモジュールの解析と脆弱性の発火 LK01(Holstein)の章ではKernel Exploitの基礎的な攻撃手法について学びます。導入の章でLK01をダウンロードしていない方は、まず練習問題LK01のファイルをダ pawnyable.cafe 압축을 풀어보면 2개의 폴..
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 \ -..