
KASLR KASLR가 적용되면 커널 코드 및 데이터 부분이 임의의 주소에 배치되게 됨. KASLR는 커널 3.14버전에서 처음으로 지원하였고, 4.12버전에서부터는 디폴트로 KASLR를 적용하게 됨 KASLR 안 적용하려면 커널 명령줄에 nokaslr를 적용하면 됨 실습파일에서는 nokaslr가 그냥 적용되어있기 때문에 아래처럼 바꿔줘야한다. (수정 전) _kernel_cmdline="console=ttyS0 mitigations=off nokaslr norandmaps" (수정 후) _kernel_cmdline="console=ttyS0 mitigations=off norandmaps" 위 처럼 run.sh를 수정해서 _kernel_cmdline에서 nokaslr를 없애면 항상 kaslr가 적용된다...

Tasks 리눅스에서는 프로세스나 스레드를 'Task'라는 하나의 단위로 관리한다. Task는 결국 하나의 '실행 단위'를 이야기한다. 결국 프로세스나 스레드는 개념적인 구분일 뿐이고, 리눅스 내에서 이들이 관리될 때에는 프로세스나 스레드나 모두 '태스크'로 관리가 된다. 테스크 별로 시간을 할당하여 여러 개의 테스크들을 실행하는 멀티 태스킹, 실행 시간을 배분하는 스케줄링 등 모두 많이 들어본 용어들일 것이다. 각 태스크는 task_struct라는 구조체로 표현이 된다. 커널은 태스크 관리자라고 했었는데 그렇기 때문에 task_struct는 커널 메모리 내에 존재한다. 생각해보면 당연한 것이, 이렇게 중요한 정보는 일반 사용자가 접근하면 안되므로 커널 메모리 안에 들어가서 쉽게 접근할 수 없게 만드는 ..

개요 사용자 모드 프로그램을 익스플로잇할 때는 익스플로잇이 잘못되어도 해당 프로그램을 재실행하면 되지만, 커널 익스플로잇을 할때에 크래시가 나면 전체 OS가 정지된다. 따라서 커널 익스플로잇에 편한 QEMU라는 가상 머신을 이용할 것이다. Question. 커널을 일반 ELF 바이너리처럼 실행하면 안 되는가? 커널 이미지를 일반 바이너리처럼 실행하면 Segmentation Fault가 발생! 그 이유는 커널 이미지의 베이스 주소가 커널 공간 안에 위치하여 기존 커널이 적재를 거부하기 때문! 바이너리 디버깅과 비교해보자. 바이너리를 디버깅할 때 우리는 gdb를 통해서 디버깅한다. 그리고 breakpoint를 걸어 실행 흐름을 하나하나 분석한다. 그런데 만약 커널을 분석할 때 breakpoint를 걸면 어떻..

🤔 커널이란? 커널은 운영체제의 핵심 부분으로, 컴퓨터 자원을 직접적으로 관리하는 역할을 한다. 사용자와는 직접적으로 상호작용하지 않기 때문에, 사용자의 명령어를 해석하여 커널로 전달하는 번역기(셸, Shell)이 있다. 아래는 32bit 시스템에서 커널 공간과 사용자 공간의 구분이다. 이처럼 둘은 서로 분리되어있고 접근 권한도 다르다. 자세한 내용은 아래 링크를 참고하자. [🖥️ Computer Science/System] - [Pwnable] 시스템콜(syscall), 셸, 커널모드 vs 유저모드 [Pwnable] 시스템콜(syscall), 셸, 커널모드 vs 유저모드 오늘 다룰 내용은 다음과 같다. 커널 모드와 유저 모드 시스템콜(syscall)이란 무엇인가? (+syscall과 call과의 차이)..