Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

CIDY

[Linux Kernel] 3. KASLR 본문

Hack/Kernel

[Linux Kernel] 3. KASLR

CIDY 2023. 7. 25. 16:52

KASLR


Kernel ASLR이다. 주소 랜덤화의 커널 version인 것이다. aslr과 마찬가지로 이 보호기법이 적용되면 커널 이미지 분석으로 함수나 가젯 주소를 바로 알 수 없게 된다. 

 

_kernel_cmdline="console=ttyS0 mitigations=off nokaslr norandmaps"
_kernel_cmdline="console=ttyS0 mitigations=off norandmaps"

현재 대부분의 리눅스 배포판에는 KASLR이 걸려 있다. (이를 비활성화하려면 커널 명령줄에 nokaslr옵션을 걸어야 한다. run.sh파일에서 위와 같이 nokaslr을 넣거나 빼서 설정할 수 있다.)

 

aslr이 라이브러리 매핑을 랜덤하게 하듯이, kaslr이 적용되면 부팅 시 커널 코드와 데이터가 랜덤한 주소에 쌓인다. 그래서 aslr이나 pie우회 시 처럼 커널 주소를 구해서 가젯 및 함수 주소를 계산하는 과정이 추가적으로 요구된다.

 

 

한계


aslr이 걸려 있어도 한 프로세스 내에서의 주소는 고정이듯이, kaslr이 걸린 커널도 재부팅하지 않는 한 베이스 주소가 변하지 않는다. 커널 패닉이 발생하지 않는다면 브포를 때려서 커널 릭을 할 수도 있는 것이다.

 

출처 : dreamhack.io
출처 : dreamhack.io

그리고 aslr의 경우 16비트 이상의 엔트로피를 가졌는데, kaslr는 32비트 os에서 최대 8비트(두 자리 랜덤), 64비트 os에서는 최대 9비트의 엔트로피만 가질 수 있어 브루트 포싱에 취약하다.

 

8비트의 경우 178회, 9비트의 경우 355회 시도하면 50%확률로 커널 주소를 때려맞출 수 있다.

 

이러한 취약점을 보완하기 위해 커널 코드를 함수 단위로 재배치하는 패치가 개발 중이지만 리눅스 커널에서는 아직 지원되는 기능이 아니다.

 

 

Ref.


https://dreamhack.io/lecture/courses/65

 

Mitigation: KASLR

리눅스 커널의 메모리 보호기법인 KASLR을 소개합니다.

dreamhack.io

 

'Hack > Kernel' 카테고리의 다른 글

[Linux Kernel] 5. Kernel Leak  (0) 2023.07.25
[Linux Kernel] 4. prepare & commit  (1) 2023.07.25
[Linux Kernel] 2. Kernel Debugging  (0) 2023.07.25
[Linux Kernel] 1. QEMU  (0) 2023.07.25
[Linux Kernel] 0. Linux Kernel Exploit🐧  (0) 2023.07.25