본문 바로가기
System/Linux

리눅스 - 메모리 보호 옵션(ref)

by bbolmin 2012. 10. 3.

 

Ref : http://jjoon.net/tc/192?category=0

 

 

[랜덤 스택&라이브러리, 스택 실행권한 설정]

커널 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 (스택 실행권한 해제) - stack에 'X'줄 때

# 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