ASLR이 걸리게 되면 라이브러리, 힙, 스택 할것없이 모두 주소가 랜덤화된다.

따라서 공격하는 입장에서는 골치아픈 문제인데, 이를 제한적이지만 해제하는 방법이 있다.

이 방법을 사용하기 위해서는 32bit 환경이어야 하며 로컬에 쉘을 가지고 있어야 한다.

"ulimit -s unlimited" 라는 명령을 사용하는 것이 그 방법인데, 이를 사용하면 힙과 스택에 걸린 ASLR을 제외한

라이브러리 등에 걸린 ASLR을 해제해 버릴 수 있다.


왜 그런지 찾아 보았는데,


출처 (http://asked.online/why-ldquoulimit--s-unlimitedrdquo-can-de-aslr-in-overflow/2442975/)


이렇게 나와 있었다.

커널 내부의 mmap.c 파일에 저런 코드가 정의되어 있다는 것인데, 살펴보니 Stack의 Limit가 Infinity이면 1이라는 값을 리턴하는 코드이다.

그 외에는 sysctl_legacy_va_layout을 리턴한다.


그리고 실제로 코드 내부를 확인해 보니 sysctl_legacy_va_layout은 0으로 정의되어 있는 것을 알 수 있다.

sysctl_legacy_va_layout은 아마 가상메모리의 매핑에 관련된 상수라고 생각되는데, 이 내용은

(http://surinderkumar432-tech.blogspot.kr/2007/03/new-virtual-address-space-layout.html)

여기에 나타나 있는 듯 하다.

읽어봐도 잘 알아듣기도 힘들지만 어쨌든 원래라면 0이 리턴되어야 하는 것이 1이 리턴되어 ASLR이 해제된다고 지금은 생각하고 있겠다.


'Knowledge' 카테고리의 다른 글

libcapstone-dev 설치 방법  (0) 2016.03.12
PE 파일과 Memory-Mapped File  (0) 2015.12.24
Wireshark로 인증서 추출하기  (0) 2015.11.02
제한적 ASLR 해제 방법  (0) 2015.10.22
RTL Chaining의 원리  (0) 2015.10.18
레지스터 (Register)  (0) 2015.10.12
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

댓글을 달아 주세요