프로세스의 스택 시작 주소를 알아내는 간단한 코드이다.


하지만 이 코드를 컴파일해서 실행해보면,





이처럼 프로세스가 실행될 때마다 프로세스의 스택 시작 주소가 불규칙하게 변한다는 사실을 알 수 있다.


이것을 두고 랜덤 스택이라고 하는 것 같다.


이 글에서는 이러한 랜덤 스택을 disable 하는 방법에 대해 설명하고자 한다.





먼저 랜덤스택이라고 하는 것은 위의 그림에서처럼 /proc/sys/kernel/randomize_va_space의 값에 의해 설정이


되는데, randomize_va_space 값은 0, 1, 혹은 2 값을 가질 수 있다.


0값은 randomization을 diasble하는 옵션이고 1이나 2는 randomization을 수행하게 하는 값이다.


(각 값들에 대한 자세한 설명은 글 맨 밑의 참고주소나 구글에 randomize_va_space로 검색을 해보시라)





그래서, 랜덤 스택을 disable 하려면 단순히 randomize_va_space 값을 0으로 바꿔주면 된다.


echo 0 > /proc/sys/kernel/randomize_va_space


혹은 sysctl -w kernel.randomize_va_space=0 이라고 명령을 내려도 된다.





그리고 다시 맨 처음에 작성했던 sp프로그램을 실행해보면 이번에는 프로세스의 스택 시작 주소가 변하지 않고 


일하다는 것을 알 수 있다.





참고로 방금 한 설정은 일시적으로만 유효하며, 재부팅을 하면 randomize_va_space의 값이 초기값인 2로 다시 


아가게 된다. 설정 값을 계속 유지하려면 그림에서처럼 /etc/sysctl.conf 파일을 열고 맨 밑에다가


kernel.randomize_va_space = 0


을 추가해주면 된다. 이제 재부팅을 해도 randomize_va_space의 값이 0으로 유지될 것이다.





참고)


랜덤 스택으로 알고 있는 내용인데, 찾아보니 ASLR이라고 Address Space Layout Randomization이라는 기법과


연관이 있는 모양이다.


http://docs.oracle.com/cd/E37670_01/E36387/html/ol_kernel_sec.html







Posted by huammmm1
,