본문으로 바로가기

Kernel (4) - Kernel protection and kernel command

Contents

  • Kernel memory protection

  • Linux command - control kernel

  • Kernel exploit methodology


Kernel memory protection

KASLR(Kernel Address Space Layout Randomization)

기능 : 부팅에 따라 커널의 메모리 주소를 랜덤화 시킴


SMEP(Supervisor Mode Execution Protection)

기능 : 유저 영역의 주소 공간에서 커널의 코드를 실행할 수 없게 함


SMAP(Supervisor Mode Access Protection)

기능 : 유저 영역의 주소 공간에서 메모리 접근을 허용하지 않음.


Kernel DEP ( NX bit )

기능 : 커널에서의 실행 권한을 없엠

우회 : ROP


Canary

기능 : ebp-4영역에 랜덤적으로 생성되는 임의의 값 생성, 이를 통해 함수 에필로그에서 이 값이 손상되었으면 오버플로우를 감지하여 프로그램을 종료시킨다. 지금까지 알아본 결과로는, 커널의 canary에는 NULL byte가 없다.

우회 : stack overflow등을 이용한 canary leak


MMAP_MIN_ADDR

기능 : mmap을 할 수 있는 최소 주소를 정해 NULL pointer deterences 공격 방지


System Integrity Protection (SIP / rootless) - in MacOS

기능 : /bin,/usr같은 시스템 파일과 디렉토리를 보호한다.


Check Protection

mmap_min_addr : sysctl -a | grep vm.mmap

smep : cat /proc/cpuinfo | grep smep

kaslr : cat /proc/kallsyms | grep _text | head -n 1


Linux command - control kernel

Commands

lsmod : 실행중인 모듈 리스트

insmod [module name] : 커널에 모듈 적재

rmmod [module name] : 커널에서 모듈 제거

modinfo [module name] : 모듈 정보 출력


Functions

module_init : 모듈 적재할 때 실행되는 함수이다. 성공하면 0을 반환한다.

module_exit : 모듈 삭제할 때 실행되는 함수이다.

printk : 주로 디버깅 목적으로 사용되며 flag로 우선 순위를 정할 수 있는 출력함수이다.

printf: 출력 대상이 표준 출력 디바이스인 모니터 
printk: 출력 대상이 커널이 실행중인 4GB 영역의 메모리 (tty가 아닌 pts로 출력)
dmesg 또는 cat /var/log/messages 로 확인

copy_form_user,copy_to_user : 유사 memcpy 이다.


Reference