1. ASLR 정의
- 바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법이다.
- 커널에서 지원하는 보호 기법으로, 아래와 같은 명령어로 확인할 수 있다.
$cat /proc/sys/kernel/randomize_va_space
2
0 (No ASLR) : ASLR을 적용하지 않는다. 1 (Conservative Randomization) : 스택, 힙, 라이브러리, vdso 2 (Conservative Randomization + brk(2) : 1의 영역과 brk로 할당한 영역 |
2. ASLR 특이점
- 코드 영역의 main함수를 제외한 다른 영역의 주소들은 실행할 때마다 변경된다.
- ASLR이 적용됐을 때, 파일을 페이지 단위로 임의 주소에 매핑한다.
- 이로 인해 페이지의 크기인 12bit 이하로는 주소가 변경되지 않는다.
- ASLR이 적용되면, 라이브러리는 임의 주소에 매핑된다. 그러나, 라이브러리 파일을 그대로 매핑하는 것이므로, 매핑된 주소로부터 라이브러리의 다른 심볼들까지의 거리(Offset)은 항상 같다.
3. NX 정의
- 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호기법이다.
4. NX 적용없이, gcc 컴파일하는 방법
- 아래와 같은 컴파일 옵션을 추가해야, NX 적용없이 컴파일이 가능하다.
-zexecstack
5. 환경에 따른, NX 명칭
Intel | XD (eXecute Disable) |
AMD | NX |
Windows | DEP (Data Execution Prevention) |
ARM | XN (eXecute Never) |
6. NX & ASLR이 존재되어 있어도, 생기는 문제점
- 스택, 힙, 데이터 영역에는 실행권한이 제거되고 할당 주소가 계속 변하지만,
바이너리의 코드가 존재하는 영역은 여전히 실행 권한이 존재하며, 할당되는 주소도 고정되어 있다.
7. NX & ASLR 우회
① RTL (Return-to-Libc)
② ROP (Return Oriented Programming)
'System Hacking' 카테고리의 다른 글
Fake EBP (0) | 2022.08.03 |
---|---|
RTC (Return To CSU) (0) | 2022.07.04 |
RTL (Return to Library) (0) | 2022.06.29 |
PLT & GOT (0) | 2022.06.27 |
Stack Canary (0) | 2022.06.25 |