본문 바로가기

System Hacking

NX & ASLR

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