일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Leviathan
- 컴퓨터구조
- 알고리즘
- 어셈블리어
- 시스템프로그래밍
- wargame
- pwn.college
- radare2
- css
- C++
- C언어
- pwncollege
- 시스템 프로그래밍
- write up
- 시스템
- 취약점
- kernel
- 커널
- 시스템해킹
- 워게임
- Pwnable.kr
- 시그널
- 리눅스 커널
- 리버싱
- 리눅스커널
- Bandit
- 프로그래밍
- 드론
- px4
- 리눅스
- Today
- Total
Computer Security
#11 KADR 우회 본문
KADR(Kernel Address Display Restriction)
커널의 내부 정보와 관련된 파일들을 root 권한으로만 확인할 수 있도록 하는 보호 기법이다.
이를 user 권한에서 우회할 수 있다면 커널의 모든 심볼들의 주소를 확인할 수 있겠지만, 보통 이렇게 우회하지는 않고, 로컬 환경에서 root권한으로 변경한 후 심볼들의 주소를 확인하여 디버깅에 참고한다.
KADR 우회보단 KADR이 걸려있는 환경에서 디버깅하는 팁에 관해 알아보자.
우리는 아래의 파일들로 실습 할 것이다.
start.sh : qemu script
1. ./start.sh 실행한뒤, cat proc/kallsyms | grep printk 를 이용해 살펴보자.
/proc/kallsyms 파일은 커널의 모든 심볼들의 주소를 담고 있다.
user 권한으로 /proc/kallsyms를 확인하면 주소 대신 000000...이 출력된다.
이는 KADR에 의해 커널 주소가 숨겨졌기 때문이다.
2. root권한으로 수정1
mkdir rootfs : 압축된 파일 시스템을 해제할 디렉토리를 생성한다.
cp rootfs.cpio rootfs : 파일 시스템을 rootfs 디렉토리로 복사한다.
3. root권한으로 수정2
cd rootfs : rootfs 디렉토리로 이동한다.
cpio -id -v < rootfs.cpio : rootfs.cpio 를 cpio 명령으로 압축 해제한다.
4. root권한으로 수정3
압축을 해제하고 나온 파일 중 init은 1번 프로세스를 작동할 스크립트이다.
init의 'setuidgid 1000' 부분을 'setuidgid 0' 으로 변경하여 root 권한으로 설정한다.
5. root권한으로 수정 (마지막)
rm rootfs.cpio 명령어를 통해 복사했던 rootfs.cpio 파일을 삭제한다.
find . | cpio -o --format=newc > ../rootfs.cpio 명령을 이용해 현재 디렉토리의 파일들을 상위 디렉토리에 rootfs.cpio로 압축한다.
6. 처음으로 돌아와서 ./start.sh 를 입력한 뒤, cat proc/kallsyms | grep printk 를 확인해보자.
변경된 root 권한으로 /proc/kallsyms 를 확인해 봤더니, 그전에 00000...이 출력된 것과 달리 커널 주소를 출력하는 것을 볼 수 있다.
KADR 우회 방법
이렇듯 파일 시스템의 init 스크립트를 수정해서 root 권한으로 /proc/kallsyms 를 확인하면 원하는 심볼의 주소를 얻을 수 있다. 얻은 주소를 이용해 break pointer를 거는 등의 작업이 가능하다.
커널 디버깅을 할 땐, 확인한 커널 주소가 바뀌지 않도록 qemu script를 수정해서 KALSR을 끈 상태로 디버깅하는 것을 추천한다.
만약 커널 힙과 관련된 취약점을 테스트 하는 경우, user 권한일 때와 root 권한일 때의 힙 풍수가 달라지기 때문에 테스트 중에는 user권한으로 디버깅해야 한다.
'리눅스 커널 해킹' 카테고리의 다른 글
#13 KPTI 우회 (0) | 2022.08.21 |
---|---|
#12 SSP 우회 (0) | 2022.08.20 |
#10 SMAP 우회 (0) | 2022.08.18 |
#9 SMEP 우회 (0) | 2022.08.17 |
#8 KASLR 우회 (0) | 2022.08.16 |