리눅스

KASLR 우회

0x6b6569 2023. 9. 7. 19:42

 

-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