Demon 시즌2 19

[vmware escape] CVE-2020-3947 분석

가독성을 위해 노션에다가 글을 작성하였다. 근데 글을 다 작성하고 보니 가독성이 좋은지 잘 모르겠다. vmware escape를 이 문서를 통해 처음 접하였다. 이 문서를 택한 이유는.. 글이 짧았기 때문이다... 글이 너무 길었으면 읽다가 포기할 것 같아서 일부러 짧은 글을 선택하였다. 학교에서 배운 DHCP를 복습하는 느낌이 들었고, UAF도 얼마전에 복습을 해서그런지 생각한 것보다 쉽게 글이 읽혔다. 다만 영어 문서를 처음 보다보니 생각보다 시간이 오래걸렸다. 앞으로 영어문서를 보는 힘(?)을 조금 더 길러야 할 것 같다. 실습을 진행해보고 싶은데 어떻게 하는지 도통 모르겠어서 어쩔 수 없이 글만 읽어서 아쉬웠다. 글은 이 문서의 한글 번역판이라고 생각하면 편할 것 같다... www.notion.s..

[linux kernel] (7) - 2018 QWB ctf : core (ret2usr)

core 문제를 풀어보기로 결심하였다. > 목차 1. 제공된 파일 살펴보기 2. 디버깅 해보기 - Base Address 구하기, 디버깅 3. test expoilt 파일 넣어보기 4. 모듈 분석하기 5. 익스플로잇 준비 5-1. core_read() 함수 실행 테스트 5-2. canary leak 5-3. commit_creds 함수와 prepare_kernel_cred 함수 주소 읽기 5-4. fake trapframe 설정 하기 6. 익스플로잇 제공된 파일 살펴보기 bzImage : 커널이미지 (vmlinux에서 Instruction set을 뽑아냄) core.cpio : 파일시스템 start.sh : qemu를 실행하는 옵션이 작성되어 있는 쉘 스크립트 vmlinux : ELF 타입, 커널 디버깅..

스터디 목차

linux kernel exploitation * [linux kernel] (9), (10) 은 인프런 강의인 리눅스 커널 해킹. A부터 Z까지 를 수강한 후, 강의 내용을 정리하고 제가 더 살을 덧붙인 글입니다. 1주차 12월 둘째주 스터디 날짜 : 12/11(금) 21:00 (1) - 커널(kernel)이란? (2) - kernel land의 메모리 보호기법 (3) - task 2주차 12월 넷째주 스터디 날짜 : 12/27(일) 21:00 (4) - Slab Allocator(슬랩 할당자) 3주차 1월 첫째주 스터디 날짜 : 1/3(일) 21:00 (4) - Slab Allocator(슬랩 할당자) - 슬랩 캐시에 대한 내용 추가 (5) - 환경 세팅 (6) - CSAW 2010 Kernel Ex..

Demon 시즌2 2021.01.02

[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시간, 메모리 공간, 파일 저장 공간, 입출력 장치... ) 운영체제는 이러한 자원의 관리자로써 동작한다. 운영체제는 커널과 시스템 프로그램으로 구분될 수 있다. 커널은 운영체제의 핵심으로 컴퓨터 자원들을 관리하는 역할을 한다. 하지만 커널은 사용자와의 상호작용은 전혀 지원하지 않는다. 그래서 사용자와 직접적인..