Kernel Exploit

    Kernel - KPTI 우회

    서론 KPTI는 유저 영역에서의 보호기법에는 없는 보호기법이다. 요약하자면, 커널 - 유저공간 간의 전환 시 최소한의 커널 주소만 포함하는 것이다. 이에 커널에서 유저공간으로 넘어갈때는 상관 없지만, 유저 공간에서 다시 커널 공간으로 넘어올 때 문제가 발생한다. 접근 가능한 주소의 범위는 cr3 레지스터를 사용하여 판별하게된다. 본론 KPTI 보호기법이 걸려 있으면 무슨 현상이 일어나는지 알아보고 익스플로잇까지 진행해보자. 1. 환경설정 전과 동일하며, qemu 실행 파일 상 append에서 nopti 삭제 및 cpu를 kvm64로 변경하였다. #!/bin/sh qemu-system-x86_64 \ -m 64M \ -nographic \ -kernel bzImage \ -append "console=tt..

    Kernel - SMAP 우회, krop (간단 글)

    서론 이번에는 SMAP다. 한줄 요약 하자면, smep에서는 유저 공간의 실행 권한만 제한하였다면, smap에서는 유저공간의 읽기, 쓰기 권한도 제한한다. 본론 모듈에서 어디에 어떻게 값을 쓸 수 있는가에 따라 다르겠지만, 결국은 커널 영역의 명령어들을 사용하면 되기 때문에 기존의 krop payload로 파훼 가능하다. 2023.09.07 - [Kernel Exploit] - Kernel - SMEP 우회, krop Kernel - SMEP 우회, krop 서론 이제 보호기법을 하나씩 추가해보자. 우선은 SMEP이다. 2023.08.20 - [Kernel Exploit] - Kernel 보호기법 및 우회법 Kernel 보호기법 및 우회법 서론 커널 공간도 유저 공간과 마찬가지로 보호기법이 있 wyv3r..

    kernel exploit helper - gdb, cpio 압축 및 압축해제, 컴파일

    서론 커널 익스를 하다보면 페이로드를 작성하고, 컴파일하고, cpio 파일을 압축 해제하고, 여기에 컴파일된 파일을 넣고, 다시 압축하는 일련의 과정을 반복하기에 이를 쉘 스크립트로 만들어보았다. 사용법 설명서는 아래와 같다. ┌[root🐲 Wyv3rn]-(~/kernel/pwnyable/LK01) └> ./kernel_helper Usage: ./kernel_helper [OPTION] OR ./kernel_helper [FILE1] [FILE2] ... Put this file in same directory with rootfs.cpio [OPTION] -ext Extract rootfs.cpio to unzip directory. Caution! unzip directory shall be rem..

    Kernel - stack pivoting #2 - with xchg

    서론 앞선 글에서는 mov esp gadget을 활용하여 stack pivoting을 해보았다. 2023.09.08 - [Kernel Exploit] - Kernel - stack pivoting #1 - with mov esp. Kernel - stack pivoting #1 - with mov esp. 서론 지금까지 단순히 ret address를 변조할 수 있는 경우에 대해 공부하였다. 만일 ret address 변조가 아닌 함수 pointer 주소만 변조할 수 있는 경우에는 어떨까. 예를 들면 *input() 과 같은 식으로 실행 wyv3rn.tistory.com 이번에는 xchg gadget으로 해보자. 문제 환경 pwnyable 기본 커널로 한다. 1. 환경설정 vmlinux 추출, 분석 및 취..

    Kernel - stack pivoting #1 - with mov esp.

    서론 지금까지 단순히 ret address를 변조할 수 있는 경우에 대해 공부하였다. 만일 ret address 변조가 아닌 함수 pointer 주소만 변조할 수 있는 경우에는 어떨까. 예를 들면 *input() 과 같은 식으로 실행될 때이다. 이 경우 결국 주소로 jmp하는 것과 같기 때문에 페이로드의 흐름과 rop에 따른 흐름이 일치하지 않는다. 그러므로 이를 일치시켜주기 위한 stack pivoting이 필요하다. 문제 환경 pwnyable 기본 커널로 한다. 1. 환경설정 vmlinux 추출, 분석 및 취약점이 모두 앞과 동일하다. 2023.08.27 - [Kernel Exploit] - kernel - ret2usr kernel - ret2usr 서론 가장 기본적인 커널 익스 기법인 ret2us..

    Kernel - SMEP 우회, cr4 overwrite #2

    서론 cr4 overwrite 2차전이다. 문제 환경 첨부 환경을 기준으로 한다. 1. 환경설정 1.1. vmlinux 추출하기 앞과 동일하다. ┌[root🐲 Wyv3rn]-(~/kernel/cr4) └> extract-vmlinux bzImage > vmlinux ┌[root🐲 Wyv3rn]-(~/kernel/cr4) └> ls bzImage rootfs.cpio start.sh vmlinux 1.2. 문제 환경 설정 start.sh qemu-system-x86_64 \ -m 512M \ -kernel ./bzImage \ -initrd ./rootfs.cpio \ -append "root=/dev/ram rw console=ttyS0 oops=panic panic=1 quiet nokaslr" \ -..

    Kernel - SMEP 우회, cr4 overwrite

    서론 앞서 공부한 보호기법 설명에서와 같이 SMEP 보호기법은 결국 CR4 레지스터 값에 따라 결정된다. 만일 해당 값을 수정할 수 있다면 보호기법도 해제할 수 있지 않을까? 본론 SMEP은 유저 공간에서의 NX와 같이 실행 권한을 제한하는 방법이다. CR4 레지스터에 SMEP을 제어하는 비트가 있어 이를 0으로 만들거나, 유저 공간의 rop과 같이 krop이 가능하다. 본 글에서는 CR4 overwrite를 기준으로 한다. 1. 환경설정 1.1. vmlinux 추출하기 앞과 동일하다. 1.2. 문제 환경 설정 앞과 동일하다. init.d/S99pawnyable #!/bin/sh ## ## Setup ## mdev -s mount -t proc none /proc mkdir -p /dev/pts moun..

    Kernel - SMEP 우회, krop

    서론 이제 보호기법을 하나씩 추가해보자. 우선은 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

    서론 가장 기본적인 커널 익스 기법인 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 설치

    서론 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' \..