Kernel & Browser/Kernel 13

[Kernel] Linux kernel (13) - Slab object

Kernel Slab 할당자와 메모리 관리Slab 이론커널에서는 kmalloc() 함수를 호출해 동적 메모리를 할당 받습니다.일반적으로 userland glibc에서 이루어지는 ptmalloc과는 큰 차이점이 있습니다. ptmalloc의 기본적인 아이디어는 여러 메모리 구역을 여러개의 청크(chunk)로 나누어 메모리를 할당하고, 해제할 때 청크를 구분하고 회수하는 작업 등을 하는 것 입니다.이와 다르게 kernel에서는 Slab 메모리 할당자로 메모리를 관리합니다. 슬랩의 주요 특징은 아래와 같습니다.자주쓰는 메모리 패턴을 정의한 후, 미리 할당해 놓자.(1)에 대한 메모리 할당 요청이 있으면, 바로 메모리를 할당해준다.해당 패턴으로 메모리를 해제하면, 메모리를 초기화 하지 않고, 다음 요청을 기다린다..

[Kernel] Linux kernel (12) - system call

system call 호출 시 어떤 일이 일어날까?일단 system call에 대하여 설명하기 전에, 우리는 커널(Kernel) - 운영체제에 대하여 알고있어야 합니다.커널은 본질적으로 소프트웨어(main으로 시작하는 바이너리)입니다. 하지만, 모든 프로그램과는 다르게 커널은 메모리(CPU)에 항상 올라가 있다는 차이점이 있습니다. 커널이 아닌 프로그램들은 메모리에 있어도 상관없고, 없어도 됩니다. 필요할 때 마다 메모리에 올려 사용하면 된다는 의미이죠.또한, UNIX 운영체제는 다중 사용자 운영체제 입니다. 따라서, 보안성이 정말 중요합니다. 만약, 다른 사용자가 나의 문서를 삭제한다던가, 원하는 대로 내 문서를 훔처보지 못하도록 막는 것 입니다. 그래서 UNIX에서 실질적인 파일 I/O(Input/O..

[Kernel] Linux kernel (11) - ASIS CTF shared house write-up ( slab object off by one )

Kernel (11) - ASIS CTF shared house ( slab object off by one )Analysissigned __int64 __fastcall mod_ioctl(__int64 a1, unsigned int a2, __int64 a3) { unsigned int v3; // ebx __int64 v4; // rsi unsigned int v6; // [rsp+0h] [rbp-18h] __int64 v7; // [rsp+8h] [rbp-10h] ​ v3 = a2; v4 = a3; if ( copy_from_user(&v6, a3, 16LL) ) return -14LL; if ( v6 size || copy_to_user(v7) ) { goto LABEL_10; } mutex_un..

[Kernel] Linux kernel (10) - hack.lu CTF Baby_Kernel_2 write-up ( Leak current_task and Cred struct overwrite )

Kernel (10) - hack.lu CTF Baby Kernel 2 write-up ( Leak current_task and Cred struct overwrite )ContentsAnalysisExploit scenarioExploitFlagReference Analysis풀어보기 전에, hack.lu CTF가 끝난지 꽤 되었는데도 아직도 nc가 열려있어서 문제풀기 편했다!module init이나 module exit함수에는 별 다른 내용이 없으므로 주요 함수부터 분석하자. driver_ioctl()__int64 __fastcall driver_ioctl(file *file, unsigned int ioctl_num, unsigned __int64 ioctl_param) { read_args *s..

[Kernel] Linux kernel (9) - CVE-2016-0728 ( Kernel One-day Analysis )

Kernel (9) - CVE-2016-0728 ( Kernel One-day Analysis )ContentsInformationVulnerabilityPoC Information2016년, Perception Point팀이 Linux kernel에서의 LPE취약점을 발견했다.이 취약점은 2012년부터 존재했지만 2016년 근래에서야 취약점을 발견하였다.천만대의 Linux 개인 PC와 66%프로의 Android device에 영향을 준다.이 취약점의 PoC가 성공적으로 실행되면 root권한을 획득할 수 있다.취약점은 32bit,64bit상관없이 발생하며, 3.8버전 이상의 모든 리눅스 커널에서 발생한다. Vulnerability크게 두가지 취약점이 발생한다.Integer OverflowUse - Aft..

[Kernel] Linux kernel (8) - QWB CTF 2018 core write-up ( Return To User )

Kernel (8) - QWB CTF core write-up ( Return To User )ContentsSettingAnalysisPoC / Exploit scenarioDebuggingExploitShellReference SettingLinux kernel UAF ( babydriver write-up )에서 진행한 환경설정과 거의 유사하다.다만 이번 문제는 환경설정하기가 좀 친절하게 잘되어있다.core_give.tar.gz이라는 파일 하나를 주는데, 요걸 해제하면 give_to_player디렉토리가 생긴다.그리고 아래와 같은 파일들을 준다. bzImage - 커널 이미지core.cpio - 파일시스템start.sh - qemu부팅용 쉘스크립트vmlinux - 디버깅용 심볼필요한건 다 있고, 취..

[Kernel] Linux kernel (7) - pwnable.kr rookiss syscall write-up ( Syscall overwrite )

Kernel (7) - Syscall overwrite ( pwnable.kr rookiss syscall write-up )ContentsAnalysisAttack cenarioExploitShellReference Analysis// adding a new system call : sys_upper ​ #include #include #include #include #include #include #include #include ​ #define SYS_CALL_TABLE 0x8000e348 // manually configure this address!! #define NR_SYS_UNUSED 223 ​ //Pointers to re-mapped writable pages unsigned int**..

[Kernel] Linux kernel (6) - CISCN 2017 babydriver write-up ( Linux kernel UAF )

Kernel (6) - CISCN 2017 babydriver write-up ( Linux kernel UAF )ContentsWhat is UAF?CISCN 2017 babydriversettinganalysisexploitConclusion What is UAF(first-fit)?UAF란 Use After Free의 약자이다.말 그대로, 힙 공간을 사용 한 후 힙을 해제했을때 발생되는 취약점이다.아래 코드를 보자.#include #include int main(void) { int *heap1; int *heap2; int *heap3; heap1 = (int *)malloc(sizeof(int) * 50); heap2 = (int *)malloc(sizeof(int) * 50); printf("..

[Kernel] Linux kernel (4) - Kernel memory protection and kernel command

Kernel (4) - Kernel protection and kernel commandContentsKernel memory protectionLinux command - control kernelKernel exploit methodology Kernel memory protectionKASLR(Kernel Address Space Layout Randomization)기능 : 부팅에 따라 커널의 메모리 주소를 랜덤화 시킴 SMEP(Supervisor Mode Execution Protection)기능 : 유저 영역의 주소 공간에서 커널의 코드를 실행할 수 없게 함 SMAP(Supervisor Mode Access Protection)기능 : 유저 영역의 주소 공간에서 메모리 접근을 허용하지 않음. ..