[랜덤 스택&라이브러리, 스택 실행권한 설정]
커널 2.6 부터 제공 (Default 값은 1)
# sysctl -w kernel.randomize_va_space=0 (해제)
# sysctl -w kernel.randomize_va_space=1 (랜덤 스택 & 라이브러리)
# sysctl -w kernel.randomize_va_space=2 (랜럼 스택 & 라이브러리 & 힙)
# sysctl -w kernel.exec-shield=0 (스택 실행권한 해제)
# sysctl -w kernel.exec-shield=1 (스택 실행권한 설정)
시스템 시작할때 자동으로 설정하기
위에 설정 명령을 /etc/sysctl.conf 안에 쓴 후 reboot
[랜덤 스택&라이브러리, 스택 실행권한 설정상태 확인]
1. $ sysctl -a | grep exec (or random)
2. "gdb TARGET" 후 "shell" 명령어로 빠져나온 후 ps 로 TARGET PID 확인 후 "cat /proc/PID/maps" 로 확인
bfffa000-c0000000 rwxp ffffb000 00:00 0 [stack]
실행할때마다 왼쪽의 주소가 바뀌면 랜덤스택이며 rwxp 이면 실행권한이 있는 것으로 볼 수 있음.
[문제 만들 시 컴파일 옵션]
-fno-stack-protector -fno-builtin -mpreferred-stack-boundary=2 -z execstack
-fno-stack-protector : 스택 프로텍트
-fno-builtin : 표준 라이브러리와 링크되지 말고 단독으로 링크하라는 의미
-mpreferred-stack-boundary=2 : 더미 없애기
-z execstack : 스택에 실행 권한 주기
[+] Disable stack address randomization
$ echo 0 > /proc/sys/kernel/exec-shield
$ echo 0 > /proc/sys/kernel/exec-shield-randomize
$ sysctl -w kernel.randomize_va_space=0
(last one might need a reboot of your box)
[+] To disable format string protections
compile with "-D_FORTIFY_SOURCE=0 -Wno-format-security"
$ echo 0 > /proc/sys/kernel/exec-shield
$ echo 0 > /proc/sys/kernel/exec-shield-randomize
$ sysctl -w kernel.randomize_va_space=0
[+] 스택 프로텍트 On 하기
-fstack-protector
참고 : http://blog.naver.com/passket/100099108180
원문 : http://jjoon.net/tc/192