본문 바로가기

시스템

Linux 환경에서의 메모리 보호 기법





1) ASLR (Address Space Layout Randomization)

메모리 상의 공격을 방어하기 위해서 주소 공간 배치를 난수화 시키는 기법.

--> 스택,힙,라이브러리 등의 데이터 영역 주소 등을 난수화 시킨 주소로 프로세스 주소 공간에 배치하는 것.


Window 에서 적용되는 것과 유사한 기법이며 리눅스 커널 2.6.12 이후로 적용되어 있음.




위 사진을 보면 왼쪽의 주소값이 바뀌는 것을 볼 수 있음.




2) DEP / NX (Not eXcutable)

메모리 상의 보호를 위해 stack 과 heap 에서 코드가 실행되는 것을 막는 기법.

공격자가 BOF공격을 일으키면 DEP가 적용된 상태에서는 실행권한이 없으므로 프로그램에 대한 예외처리가 발생되고 종료된다.


위 사진에서 주소값 오른쪽에 권한이 나오는데,

stack 과 heap, libc 부분에 실행권한이 없는 것을 확인할 수 있다.


3) ASCII-Armor

libc 영역을 보호하기 위한 기법으로, 상위주소를 \x00 으로 시작하게 만드는 기법이다.

공격자는 라이브러리를 호출하는 BOF 공격 수행 시, NULL 바이트가 들어있는 주소로 접근을 할 수 없게 됨.


4) Canary

카나리는 Window 에서의 메모리 보호 기법인 stack cookie 와 같은 개념으로 Buffer 와 RET 사이에서 스택의 BOF를 모니터링 하는 역할을 담당한다.

Canary 데이터가 변조되면, 오버플로우에 대한 경고와 함께 프로그램을 종료시킨다.


Terminator Canaryies

문자열 끝 문자를 이용하여 canary 를 구성하는 방법으로 Canary 값으로 NULL,CR,LF,0xff 값의 조합이 사용됨. 공격자는 공격 시, 종료 문자로 이루어진 Canary 값에 접근을 할 수 없음


Random Canary

매 프로그램 실행 시 임의의 Canary 값을 삽입함.

--> 공격자는 Canary 값을 예측할 수 없어 공격에 어려움.


Null Canary

메모리 상의 공격을 막기 위해 Canary 값을 NULL 로 구성한다. 공격자는 공격코드 상에

NULL을 삽입할 수 없음. --> Canary 값에 접근이 불가능함.






'시스템' 카테고리의 다른 글

Modern browser analysis and exploit development  (0) 2016.12.27
codegate junior nuclear  (0) 2015.04.11
파일 디스크립터  (0) 2015.04.10
ROPasaurusrex  (0) 2015.04.09