Demon 시즌2/linux kernel exploitation 16

[linux kernel] (6) - CSAW 2010 Kernel Exploit

드림핵 강의를 보다가 막혀서 팀원분들이 공부하는 것처럼 CTF write up을 보면서 공부하기로 했다. blackperl security 블로그의 CSAW 2010 KERNEL EXPLOIT 를 보고 공부해보았다. 직접 실행하면서 문제를 풀어보고 싶었는데 문제 파일을 구하기도 힘들었고 일단은 write up을 보면서 이론으로 공부해보는 것도 나쁘지 않을 것 같아서 그냥 문서를 읽어보면서 공부를 진행하였다. 1. 문제 소스 (csaw.c) 실제 대회 당시에도 문제 소스가 제공되었다고 한다. /* * csaw.c * CSAW CTF Challenge Kernel Module * Jon Oberheide * * This module implements the /proc/csaw interface which ..

[linux kernel] (5) - 환경 세팅

본격적인 리눅스 커널 분석과 CTF 문제 풀이를 위해 환경 구성을 해보았다. 우분투 버전 : ubuntu 18.04 qemu 세팅 우분투 18.04의 경우 기본적으로 qemu가 설치되어 있으며, 추가적으로 qemu-kvm만 설치해주면 된다. sudo apt-get install qemu-kvm CTF에서 주로 제공되는 파일 CTF 문제에서는 커널 이미지(bzImage)와 파일시스템(rootfs.cpio)를 제공해 준다. 디버깅에 유용한 vmlinux는 제공해주기도 하고 제공해주지 않는 경우도 있는데, 이는 extract-vmlinux 스크립트를 이용해 bzImage에서 추출할 수 있다고 한다. /usr/src/linux-headers-$(uname -r)/scripts/extract-vmlinux bzI..

[linux kernel] (4) - Slab Allocator(슬랩 할당자)

더보기 20.12.28 슬랩 캐시에 대한 내용 추가 만약 kmalloc을 이용해 커널이 16byte를 할당받으려고 한다고 하자. page의 단위가 4kb이기 때문에, 고작 16바이트를 위해 4k바이트를 할당해야 할까? 그렇다면 나머지 4096 - 16 = 4080byte는 어떻게 될까? 4080byte는 사용되지 못한 채 방치되며 심한 메모리 낭비가 발생한다. 이를 막기 위한 방법이 바로 Slab Allocator(슬랩 할당자)이다. 슬랩 할당자는 미리 할당해 놓은 작은 메모리 조각을 kmalloc의 요청에 따라 요청한 양에 가장 가까운 메모리 조각을 반환해 준다. 예를 들어, 16byte를 요청했을 경우 가장 가까운 slab의 조각 32byte를 사용할 수 있도록 제공(응답)해준다. Slab Alloc..

[linux kernel] (3) - task

Task 프로세스랑 쓰레드는 테스크로 관리한다. 테스크는 task_struct라는 구조체로 관리 한다. task_struct 구조체엔 테스크에 대한 정보가 들어 있다. 이 구조체에 중요하게 생각할만한 것은 권한 정보 이다. 프로세스를 만들 땐 fork 함수를, 쓰레드를 만들 땐 pthread_create 함수를 쓴다. 이 두 함수 다 task_struct를 생성하는 역할을 하고,각 테스크 마다 커널 스택 및 task_struct가 할당이 된다. 결론은 프로세스나 쓰레드 마다 커널 스택과 task_struct가 할당이 된다. task_struct 구조체 // Permal link: https://github.com/torvalds/linux/blob/219d54332a09e8d8741c1e1982f5eae..

[linux kernel] (2) - kernel land의 메모리 보호기법

KASLR (Kernel Address Space Layout Randomization) -> 커널의 메모리 주소를 랜덤화 시킨다. SMEP (Supervisor Mode Execution Protection) -> 유저 영역의 주소 공간에서 커널의 코드를 실행을 방지한다. SMAP (Supervisor Mode Access Protection) -> 유저 영역의 주소 공간에서 메모리 접근을 비허용한다. KADR (Kernel Address Display Restriction) -> 비 루트 사용자가 커널 주소의 정보를 얻는 것을 제한한다. -> 모든 커널 심볼이 저장된 /proc/kallsyms파일의 심볼 주소가 0으로 표시된다. KPRI (Kernel Page Table Isolation) -> 유저..

[linux kernel] (1) - 커널(kernel)이란?

1. 커널의 특징 및 개념, 이론, 부트로더 등 1-1. 커널이란? 운영체제를 사용자의 관점 혹은 시스템의 관점에서 살펴보자. 사용자의 관점에서 운영체제는, 컴퓨터를 사람이 사용하게 쉽게 여러가지 일들을 수행해주는 역할을 한다. 시스템의 관점에서 운영체제는, 하드웨어와 가장 밀접한 프로그램이라고 볼 수 있다. 컴퓨터 시스템은 특정 문제를 해결하기 위해 필요한 여러가지 자원들을 사용한다.(ex CPU시간, 메모리 공간, 파일 저장 공간, 입출력 장치... ) 운영체제는 이러한 자원의 관리자로써 동작한다. 운영체제는 커널과 시스템 프로그램으로 구분될 수 있다. 커널은 운영체제의 핵심으로 컴퓨터 자원들을 관리하는 역할을 한다. 하지만 커널은 사용자와의 상호작용은 전혀 지원하지 않는다. 그래서 사용자와 직접적인..