ssongk
ssongk
ssongk
전체 방문자
오늘
어제

공지사항

  • resources
  • 분류 전체보기 (626)
    • CTF (24)
    • background (79)
      • fuzzing (5)
      • linux (29)
      • linux kernel (15)
      • windows (2)
      • web assembly (1)
      • embedded (0)
      • web (13)
      • crypto (9)
      • mobile (1)
      • AI (1)
      • etc.. (3)
    • write-up(pwn) (171)
      • dreamhack (102)
      • pwn.college (4)
      • pwnable.xyz (51)
      • pwnable.tw (3)
      • pwnable.kr (5)
      • G04T (6)
    • write-up(rev) (32)
      • dreamhack (24)
      • reversing.kr (8)
    • write-up(web) (195)
      • dreamhack (63)
      • LOS (40)
      • webhacking.kr (69)
      • websec.fr (3)
      • wargame.kr (6)
      • webgoat (1)
      • G04T (7)
      • suninatas (6)
    • write-up(crypto) (19)
      • dreamhack (16)
      • G04T (1)
      • suninatas (2)
    • write-up(forensic) (53)
      • dreamhack (5)
      • ctf-d (47)
      • suninatas (1)
    • write-up(misc) (13)
      • dreamhack (12)
      • suninatas (1)
    • development (31)
      • Linux (14)
      • Java (13)
      • Python (1)
      • C (2)
      • TroubleShooting (1)
    • 자격증 (8)
    • 이산수학 (1)
    • 정보보안 (0)
hELLO · Designed By 정상우.
ssongk

ssongk

Kernel Address Space Layout Randomization (KASLR)
background/linux kernel

Kernel Address Space Layout Randomization (KASLR)

2024. 4. 3. 20:57

KASLR(Kernel Address Space Layout Randomization)은 ASLR의 커널 버전으로

커널의 기본 주소 값을 무작위로 만들어 커널 공격을 어렵게 만드는 기능이다.

 

실습은 우분투 16.04에서 진행했다.

system info

 

KASLR을 비활성화 하려면
"/etc/default/grub" 파일의 "GRUB_CMDLINE_LINUX_DEFAULT"에 "nokaslr"을 추가한다.

sudo gedit /etc/default/grub

 

sudo update-grub으로 설정을 반영한다.

이후 reboot로 적용시켜줘야 한다.

 

이제 reboot해도 계속 주소가 같게 나오는 것을 확인할 수 있다.

1st reboot
2nd reboot

 

반대로 KASLR을 활성화 하려면
"/etc/default/grub" 파일의 "GRUB_CMDLINE_LINUX_DEFAULT"에서

"nokaslr"을 "kaslr"로 바꿔준다.

 

마찬가지로 sudo update-grub와 reboot로 설정을 반영한다.

 

이젠 부팅할 때마다 주소가 바뀌는 것을 확인할 수 있다.

1st reboot
2nd reboot

 

KASLR이 적용되지 않은 환경에서는

리눅스 커널 이미지인 "vmlinux" 파일을 이용하여 Kernel 함수들의 주소를 찾을 수 있다.

readelf 명령어를 이용하여 "vmlinux" 파일에서 prepare_kernel_cred 함수의 주소를 찾을 수 있고,
"/proc/kallsyms" 파일에서 찾은 prepare_kernel_cred 함수의 주소 값이

"vmlinux" 파일에서 찾은 값과 동일한 것을 확인 할 수 있다.

nokaslr

 

하지만 최신의 Kernel들은 기본적으로 KASLR을 지원하고 있기 때문에

"vmlinux" 파일에서 찾은 커널 함수들의 주소를 공격에 활용하기 어렵다.

kaslr

 

그렇다고 해서 "vmlinux" 파일의 활용가치가 전혀 없는 것은 아니다.
공격자는 "vmlinux" 파일을 이용하여 커널 함수의 offset 값을 얻을 수 있다.
다음과 같이 Kernel 함수의 offset 값을 확인 할 수 있다.
readelf 명령어를 이용하여 공격에 사용할 커널 함수의 주소(0xffffffff810b6270)를 확인할 수 있다.

98468: ffffffff810b6270 96 FUNC GLOBAL DEFAULT 1 prepare_kernel_cred

 

offset값을 계산하기 위해 프로그램 코드 명령어가 저장되어 있는 .text 섹션의 시작 주소가 필요하다.

readelf 명령어를 이용하여 .text 영역의 시작 주소(0xffffffff81000000)를 확인한다.

[ 1] .text PROGBITS ffffffff81000000 00200000

 

이렇게 수집된 정보들을 이용하여 다음과 같이 커널 함수의 offset 값을 얻을 수 있다.
prepare_kernel_cred 함수의 주소(0xffffffff810b6270) - .text 섹션의 시작 주소(0xffffffff81000000) = 0xb6270

 

추가적으로 Kernel Address Display Restriction(KADR)이 비활성화 되어 있으면

일반 계정으로도 /proc/kallsyms 파일을 이용하여 심볼의 주소 정보를 확인할 수 있다.

이는 kernel.kptr_restrict 설정 값에 따른다.

KADR이 활성화 되어 있기 때문에 root만 볼 수 있음

 


 

https://www.lazenca.net/pages/viewpage.action?pageId=25624857

 

01.Kernel Address Space Layout Randomization (KASLR) - TechNote - Lazenca.0x0

Excuse the ads! We need some help to keep our site up. List 01. KASLR(Kernel Address Space Layout Randomization) KASLR(Kernel Address Space Layout Randomization)는 커널의 기본 주소 값을 무작위로 만들어 커널 공격을 구현하기 어렵

www.lazenca.net

 

'background > linux kernel' 카테고리의 다른 글

Kernel Address Display Restriction (KADR)  (0) 2024.04.04
[Linux Kernel Exploit] ret2usr  (0) 2024.04.04
Linux Kernel Debugging (with VMware)  (1) 2024.04.03
Linux Kernel Debugging (with QEMU)  (0) 2024.04.02
[Lazenca][Development of Kernel Module] 04.Creating a kernel module to privilege escalation  (0) 2024.03.29
    'background/linux kernel' 카테고리의 다른 글
    • Kernel Address Display Restriction (KADR)
    • [Linux Kernel Exploit] ret2usr
    • Linux Kernel Debugging (with VMware)
    • Linux Kernel Debugging (with QEMU)
    ssongk
    ssongk
    벌레 사냥꾼이 되고 싶어요

    티스토리툴바