티스토리 뷰




linux 환경에서의 메모리 보호기법들 (ASLR, DEP, ASCII-Armor, Stack Canary)




ASLR : Address Space Layout Randomization


  • 메모리상의 공격을 어렵게 하기 위해 스택이나 힙, 라이브러리 등의 주소를 랜덤으로 프로세스 주소 공간에 배치함으로써 실행할 때 마다 데이터의 주소가 바뀌게 하는 기법.


/proc : procees의 줄임말, 프로세스의 정보들이 저장

/proc/self : 현재 실행되고 있는 프로세스의 정보가 담겨있는 디렉토리

/proc/self/maps : 현재 실행되고 있는 프로세스의 주소 맵


  • ASLR을 해제하는 명령 echo 0>/proc/sys/kernel/randomize_va_space

  • randomize_va_space=0 : ASLR 해제

  • randomize_va_space=1 : 랜덤 스택 & 랜덤 라이브러리 설정

  • randomize_va_space=2 : 랜덤 스택 & 랜덤 라이브러리 & 랜덤 힙 설정



DEP : Data Excution Prevention


  • 데이터 영역에서 코드가 실행되는 것을 막는 기법

  • DEP가 적용된 경우에는 실행권한이 없으므로 쉘코드가 실행되지 않고 종료


* 스택에 실행권한을 설정하는 옵션 : gcc -z execstack


  • checksec.sh을 이용하여 적용이 되어있는지 확인가능(NX)

  • DEP가 걸려 있지 않다면 bof를 통해 return address를 스택 상에 쉘 코드가 위치한 곳으로 변조하면 그대로 쉘코드가 실행됨.


ASCII-Armor


  • 공유라이브러리 영역의 상위 주소에 0x00을 포함시키는 방법.

  • RTL (Return To Library) 공격에 대응하기 위한 방법.

  • 공격자가 라이브러리를 호출하는 Buffer Overflow 공격을 해도 NULL 바이트가 삽입된 주소로는 접근할 수 없음.

  • 이 기법이 적용되어 있으면 라이브러리를 호출하는 공격을 한다고 해도(RTL) NULL 바이트가 삽입되게 되므로 exploit 하지 못하게 됨.


Stack Canary


  • SSP (Stack Smashing Protector) stack overflow를 방지하기 위한 컴파일러 옵션

  • 함수 진입 시 스택에 sfp와 ret 정보를 저장할 때, 이 정보들이 공격자에 의해 덮어 씌어지는 것으로부터 보호하기 위해 스택상의 변수들의 공간과 sfp 사이에 특정한 값을 추가하는데 이 값을 Canary라고 함.

  • 공격자가 return address를 조작하기 위해 BOF공격을 시도할 때, return add를 덮기 이전에 Canary 값이 먼저 덮어지기 때문에 이 Canart값의변조 유무로 BOF를 탐지 할 수 있음


| Buffer+dummy | Canary | Sfp | Ret |


  • SSP 끄기 옵션 : -fno-stack-protector

  • SSP를 모든 함수에 설치 : -fstack-protector-all


다음번에는 RELRO 기법을 정리 하겠습니다.



'pwnable > 정리' 카테고리의 다른 글

정적 라이브러리와 공유 라이브러리  (0) 2018.01.13
linux 환경에서의 메모리 보호기법들 2 (RELRO)  (0) 2018.01.13
PLT와 GOT  (0) 2018.01.07
Static Link 방식과 Dynamic Link 방식  (0) 2018.01.07
gdb 사용법 정리  (0) 2018.01.06
Comments