티스토리 뷰
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 |
- FSB
- HackCTF
- TLS
- codegate
- ebp change
- srop
- SQLi
- hacking
- rt_sigreturn
- shellcoding
- exit
- pwnable.tw
- stack reusing
- fastbindup
- 본선가고싶다
- oob
- fsop
- pwnable
- pwable
- 해킹
- heap
- overflow
- tcache
- glibc
- fastbin
- Total
- Today
- Yesterday