티스토리 뷰

IT/Linux

[Linux] 메모리 보호 기법

lastcard 2017. 3. 28. 22:50

[리눅스 메모리 보호 기법]

1. ASLR(Address Space Layout Randomization)

2. DEP / NX(Not Excutable)

3. ASCII-Armor

4. Stack canary

 

예제)

 # cat /proc/self/maps

스택, 힙, 라이브러리 등의 주소가 랜덤하게 바뀌는지 확인이 가능합니다.

 

1. ASLR(Address Space Layout Randomization)

 

메모리상의 공격을 방어하기 위해 주소 공간배치를 난수화 시키는 기법입니다. 스택, 힙, 라이브러리 등의 데이터 영역 주소등을 난수화 시킨 주소로 프로세스의 주소 공간에 배치하는 것입니다. 리눅스 커널 2.6.12 이후로 적용 되었습니다.

(상세한 내용은 [Linux] 메모리 보호 기법 중 ASLR와 NX 설정값 확인 및 변경을 참고해주세요)

 

2. DEP / NX(Not Excutable)

 

메모리상의 보호를 위해 stack 과 heap 에서 코드가 실행되는 것을 막는 기법입니다. 공격자가 BOF 공격을 일으키면 DEP 가 적용된 상태에서는 실행권한이 없으므로 프로그램에 대한 예외처리 후 종료가 됩니다.

 

3. ASCII-Armor

 

Libc 영역을 보호하기 위한 기법으로 상위주소를 \x00 으로 시작하게 만들어 공격자가 라이브러리를 호출하는 BOF 공격을 하여도 NULL 바이트가 삽입된 주소로 접근 할 수 없게 됩니다.

 

4. Stack canary

 

RET
SFP
BUFFER

 

위 처럼 되있는 메모리 구조가

 

RET
SFP
CANARY
BUFFER

 

이렇게 SFP와 BUFFER 데이터 사이에 CANARY 가 추가되어 스택의 BOF를 모니터링하는 역할을 담당합니다. BOF 가 발생하면 CANARY 데이터값의 변조로 오버플로우에 대한 경고를 하고 프로그램을 종료시킵니다. 

 

CANARY 데이터는 다음과 같이 구성되어 있습니다.

 

 1) Terminator canaries
 문자열 끝문자를 이용하여 canary 를 구성하는 방법으로 canary 값으로 NULL, CR, LF, Oxff 값의 조합이 사용됩니다. 공격자는 공격시,  종료문자로 구성된 canary 값에 접근을 할 수 없게됩니다.


 2) Random canary
 프로그램을 실행할 때마다 임의의 canary 값을 삽입을 합니다. 이에 따라 공격자는 Canary 값을 예측불가능하므로 공격에 어려움이  발생합니다.


 3) Null canary(0x00000000)
 메모리상의 공격을 막기위해 canary 값을 NULL 로 구성합니다. 공격자는 공격코드상에 NULL 값을 삽입할 수 없으므로 canary 값에  접근이 불가능합니다.

 

[참고 사이트]

https://bpsecblog.wordpress.com/2016/05/16/memory_protect_linux_1/

http://dokydoky.tistory.com/449

http://blog.naver.com/revsic/220531540037

댓글
공지사항