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 |