background/linux kernel

    [Linux Kernel Exploit] Slab Allocator & msg_msg Struct

    [Linux Kernel Exploit] Slab Allocator & msg_msg Struct

    1. 개요리눅스 커널 익스플로잇을 공부하다 보면 힙 스프레이 라는 개념이 등장합니다. 스프레이는 직역하면 무언가를 뿌리는 것 인데요. 익스플로잇 관점으로 다시 해석하면 무언가를 뿌리는데 힙 영역에 객체를 뿌리는 것 입니다. 스프레이가 필요한 이유는 리눅스 커널의 randomized free list 때문인데요. 이번 글에선 힙 스프레이에 자주 사용되는 msg_msg 구조체의 구조에 대해 간략히 알아보도록 하겠습니다. 2. Slab Allocatormsg_msg 구조체에 대해 알아보기에 앞서 리눅스 커널의 할당자(Allocator)에 대해 알아보겠습니다. 현재 리눅스 커널은 Slab Allocator를 사용하며 유저 영역의 힙과는 다르게 동작합니다. 구조를 보면 크게 cache라는 덩어리 안에 slab이 ..

    Supervisor Mode Execution Prevention(SMEP)/Supervisor Mode Access Prevention(SMAP)

    Supervisor Mode Execution Prevention(SMEP)/Supervisor Mode Access Prevention(SMAP)

    커널은 절대 사용자 공간 메모리(userspace memory)를 실행하거나 접근해서는 안된다.이러한 규칙은 하드웨어 기반으로 제한(x86의 SMEP/SMAP, ARM의 PXN/PAN)을 지원하거나 에뮬레이션(ARM의 메모리 도메인)을 통해 시행할 수 있다.이러한 방식으로 사용자 공간 메모리를 차단하면 실행 및 데이터 구문 분석이 사용자 공간 메모리로 전달 될 수 없으므로, 공격이 커널 메모리에서만 작동하도록 만든다. SMEP (Supervisor Mode Execution Prevention)사용자 모드에 있는 실행 코드를 Ring-0 권한으로의 실행을 제한하고 충돌을 일으킨다. 따라서 사용자 모드 페이로드 실행에 의존하는 EoP 익스플로잇을 실행하지 못하게 된다.이를 통해 Intel OS Guard는..

    [Linux Kernel Exploit] ROP (with ret2usr)

    ROP를 활용해서 ret2usr를 하는 방법에 대해 알아보려고 한다. 익스플로잇 순서는 다음과 같다. (ret2usr과 동일)prepare_kernel_cred(0); 수행 ("root"의 자격 증명 준비)prepare_kernel_cred() 함수의 리턴 값("root"의 자격 증명)을 commit_creds() 함수에 전달system("/bin/sh"); 예제로는 [QWB CTF 2018] core 문제를 보기로 했다. https://github.com/ctf-wiki/ctf-challenges/blob/master/pwn/kernel/QWB2018-core/rop.c trap frame을 만들고 ret2usr기법을 활용하는 것은 동일하다. 다만, LPE를 함수로 하는 것이 아니라 가젯으로 하기 때문..

    Kernel Address Display Restriction (KADR)

    Kernel Address Display Restriction (KADR)

    커널 익스플로잇에는 필요한 가젯, 커널 함수들의 주소 등의 정보가 필요하다. 커널에서는 KADR에 의해 커널 영역의 주소를 민감한 정보로 처리하고 있으며 일반 로컬 사용자에게 보이지 않는다. 즉, /boot/vmlinuz*, /boot/System.map*, /sys/kernel/debug/, /proc/slabinfo와 같은 것들은 루트만 읽을 수 있다. Ubuntu 11.04부터 "/proc/sys/kernel/kptr_rr_rrestrict"는 알려진 커널 주소 출력을 차단하기 위해 "1"로 설정되어 있다. 다음과 같이 일반 유저로 "/proc/kallsyms" 파일을 읽으면 심볼의 주소가 0으로 덮여져서 출력되는 것을 확인할 수 있다. 반면, 루트 권한으로 해당 파일을 읽을 경우 각 심볼들의 주소..

    [Linux Kernel Exploit] ret2usr

    [QWB CTF 2018] core 문제에서 ret2usr 기법이 사용되었는데ret2usr에 대해 알아보도록 하자.https://ssongkit.tistory.com/767 [QWB CTF 2018] core (with write-up)롸업과 함께하는 첫 리눅스 커널 문제 환경 세팅 문제 파일은 여기서 받을 수 있다. https://github.com/ctf-wiki/ctf-challenges/tree/master/pwn/kernel/QWB2018-core ctf-challenges/pwn/kernel/QWB2018-core at master · ctf-wiki/ctf-cssongkit.tistory.com  LPE먼저 커널에서 권한 상승(LPE)을 하기 위해선 commit_creds(prepare_ke..