-append "kaslr" 옵션을 이용하여 LASLR 보호기법을 적용
- 커널의 흐름을 원하는 대로 조작할 수 있는 디바이스 드라이버 예제
- test_read() 함수에서 copy_to_user 함수를 이용해서 printk() 함수의 주소를 유저 공간으로 전달
- test_write() 함수에서 copy_from_user 함수를 이용해 유저로부터 주소를 전달 받아, 그 주소를 실
커널의 메모리 주소를 leak하는 코드
위와 같이 printk() 함수의 주소가 다른 것을 확인 할 수 있다.
- test 드라이버에서 일어나는 취약점을 이용하여 권한 상승을 하는 exploit code
- write 함수를 이용하여 test 드라이버에 payload 전달
- payload 함수는 commit_creds 코드를 실행하여 /bin/sh 실행
- ret2usr 기법 사용
- 중요한점은, leak한 printk()의 주소를 이용하여 kernel base를 구한 뒤, kernel base에 필요한 커널 함수의 offset를 더해 exploit에 활용
- /proc/kallsyms 파일은 커널의 모든 심볼의 주소를 담고 있다.
- KADR 보호 기법에 의해 root 권한으로만 주소를 볼 수 있음.
- _text 심볼이 바로 kernel 베이스 주소
- 필요한 함수의 주소에서 _text 심볼 주소
'리눅스' 카테고리의 다른 글
리눅스 사용자와 그룹 명령어 모음 (0) | 2023.02.03 |
---|