CIDY
[Linux Kernel] 3. KASLR 본문
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이 걸린 커널도 재부팅하지 않는 한 베이스 주소가 변하지 않는다. 커널 패닉이 발생하지 않는다면 브포를 때려서 커널 릭을 할 수도 있는 것이다.
그리고 aslr의 경우 16비트 이상의 엔트로피를 가졌는데, kaslr는 32비트 os에서 최대 8비트(두 자리 랜덤), 64비트 os에서는 최대 9비트의 엔트로피만 가질 수 있어 브루트 포싱에 취약하다.
8비트의 경우 178회, 9비트의 경우 355회 시도하면 50%확률로 커널 주소를 때려맞출 수 있다.
이러한 취약점을 보완하기 위해 커널 코드를 함수 단위로 재배치하는 패치가 개발 중이지만 리눅스 커널에서는 아직 지원되는 기능이 아니다.
Ref.
https://dreamhack.io/lecture/courses/65
'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 |