kernel 4

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