-
[Linux Memory Protection] - DEPSystem hacking training/Knowledge 2019. 5. 14. 12:38
복습겸 리눅스 환경의 메모리 보호 기법에 대해 알아봅시다.
Ref : https://bpsecblog.wordpress.com/2016/05/16/memory_protect_linux_1/
이 글을 토대로 공부한 내용을 포스팅하겠습니다.
- ASLR
- DEP(NX) <- 이번엔 요녀석!
- ASCII-Armor
- Stack Canary
DEP에 대해 알아봅시다.
DEP(Data Execution Prevention) 이란?
데이터 영역에서 코드가 실행되는 것을 막는 기법입니다.
예를 들면 BOF를 예로 들 수 있겠네요.
BOF로 eip를 핸들링 할 수 있을때 가장 기본적이고, 먼저 생각나는 공격 루트가 버퍼에 쉘코드를 넣고,
쉘코드를 가리키는 주소를 eip에 overwrite하여 쉘코드를 실행시키는 방법인데요.
DEP는 바로 이런 공격을 방지합니다.
이유는 DEP가 적용된 바이너리는 스택에 실행 권한이 없어서 쉘코드가 실행되지 않고, 예외처리가 되기 때문입니다.
직접 확인하기 위해서 취약한 프로그램 하나를 만들어봅시다.
#include <stdio.h> int main() { char buf[256]; gets(buf); printf("addr : %p\n", buf); return 0; }
[컴파일 옵션]
gcc -o DEP DEP.c -mpreferred-stack-boundary=2 -fno-stack-protector -z execstack -z norelro
-z exestack 옵션으로 스택 영역에서 실행 권한을 주었습니다.
실행 권한을 확인해보면 heap, stack에 실행권한이 주어진것을 확인할 수 있습니다.
결론적으로 DEP가 걸려있지 않다면 bof를 통해 return address를 스택의 쉘코드가 위치한 곳으로 변조하면 그대로 쉘코드가 실행되지만
DEP가 걸려있다면 스택과 힙에 실행 권한이 없기 때문에 return address를 조작할 수 있다고 하더라도, 스택이나 힙 영역에 쉘코드를 올리고 실행 시킬 수는 없습니다.
이상으로 포스팅을 마칩니다.
반응형'System hacking training > Knowledge' 카테고리의 다른 글
[Linux Memory Protection] - Stack Canary (2) 2019.05.17 [Linux Memory Protection] - ASCII-Armor (0) 2019.05.15 [Linux Memory Protection] - ASLR (2) 2019.05.14 What is heap - part 2 (0) 2018.12.21 What is heap - part1 (2) 2018.12.12