Information Security

[DreamHack] NX & ASLR 본문

INTERLUDE/System Hacking

[DreamHack] NX & ASLR

sohexz 2024. 2. 13. 17:40

NX(No-eXecute)

 

실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법

- 메모리 영역에 대해 쓰기 권한과 실행 권한이 함께 있으면 시스템이 취약해지기 때문

 

CPU

NX 지원 시: 컴파일러 옵션을 통해 바이너리에 NX 적용

-> NX가 적용된 바이너리는 실행될 때 각 메모리 영역에 필요한 권한만을 부여

 

 

메모리 맵 확인

pwndbg> vmmap

NX가 적용된 바이너리: 코드 영역 외에 실행 권한이 없음

NX가 적용되지 않은 바이너리: 스택 영역([stack])에 실행 권한이 존재하여 rwx 권한을 가지고 있음

 

 

 

ASLR( Address Space Layout Randomization)

 

바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법

 

$ cat /proc/sys/kernel/randomize_va_space
2

 

  • No ASLR(0): ASLR을 적용하지 않음
  • Conservative Randomization(1): 스택, 힙, 라이브러리, vdso 등
  • Conservative Randomization + brk(2): (1)의 영역과 brk로 할당한 영역

 

- 코드 영역의 main함수를 제외한 다른 영역의 주소들은 실행할 때마다 변경

- 바이너리를 반복해서 실행해도 libc_base 주소 하위 12비트 값과 printf 주소 하위 12비트 값은 변경되지 않음

- 리눅스는 ASLR이 적용됐을 때, 파일을 페이지(page) 단위로 임의 주소에 매핑합니다. 따라서 페이지의 크기인 12비트 이하로는 주소가 변경되지 않음

 

 

'INTERLUDE > System Hacking' 카테고리의 다른 글

[DreamHack] Return to Library  (0) 2024.02.15
[DreamHack] Static Link vs. Dynamic Link  (0) 2024.02.14
[DreamHack] Stack Canary  (1) 2024.02.13
[DreamHack] BOF / basic_exploitation_001  (0) 2024.02.08
[DreamHack] Calling Convention  (0) 2024.02.06