Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ftz
- dreamhack
- 웹
- CodeEngn
- hacking
- TCP
- 해킹
- 순서도
- 모의해킹
- 드림핵
- webhacking
- reversing
- System
- WarGame
- bee-box
- Webhaking
- 비박스
- 네트워크
- 워게임
- Web
- 알고리즘
- 시스템해킹
- network
- XSS
- 시스템
- 네트워크보안
- 웹해킹
- 소프트웨어보안
- 소프트웨어
- 리버싱
Archives
- Today
- Total
Without a Break
[Dreamhack] Mitigation: NX & ASLR 본문
ASLR(Address Space Layout Randomization)
: 바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법
- 커널에서 지원하는 보호 기법
- cat /proc/sys/kernel/randomize_va_space2 명령어로 확인 가능
- 리눅스에서 이 값은 0/1/2의 값을 가질 수 있음
ASLR이 적용되는 메모리 영역
- No ASLR(0) : ASLR을 적용하지 않음
- Conservative Randomization(1): 스택, 힙, 라이브러리, vdso 등
- Conservative Randomization + brk(2): (1)의 영역과 brk로 할당한 영역
ASLR의 특징
- 코드 영역의 main 함수를 제외한 다른 영역의 주소들은 실행할 때마다 변경된다. => 바이너리를 실행하기 전에 해당 영역들의 주소를 예측할 수 없다.
- 바이너리를 반복해서 실행해도 libc_base 주소 하위 12비트 값과 printf 주소 하위 12비트 값은 변경되지 않는다. => 리눅스는 ASLR이 적용됐을 때, 파일을 페이지 단위로 임의 주소에 매핑한다. 따라서 페이지의 크기인 12비트 이하로는 주소가 변경되지 않는다.
- libc_base와 printf의 주소 차이는 항상 같다. => ASLR이 적용되면, 라이브러리는 임의 주소에 매핑된다. 그러나 라이브러리 파일을 그대로 매핑하는 것이므로 매핑된 주소로부터 라이브러리의 다른 심볼들까지의 거리(Offset)는 항상 같다.
NX (No-eXecute)
: 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법
- CPU가 NX를 지원하면 컴파일러 옵션ㅇ르 통해 바이너리에 NX를 지원할 수 있으며, NX가 적용된 바이너리는 실행될 때 각 메모리 영역에 필요한 권한만을 부여받는다.
- NX를 인텔은 XD, AMD는 NX, 윈도우는 DEP, ARM에서는 XN라고 칭하고 있으나 명칭만 다를 뿐 모두 비슷한 보호 기법이다.
'Pwnable > Dreamhack' 카테고리의 다른 글
[Dreamhack] Background: RELRO (0) | 2022.11.07 |
---|---|
[Dreamhack] Background: Library - Static Link vs. Dynamic Link (0) | 2022.11.06 |
[Dreamhack] Mitigation: Stack Canary (0) | 2022.11.06 |
[Dreamhack] Memory Corruption: Stack Buffer Overflow (0) | 2022.10.30 |
[Dreamhack] Exploit Tech: Shellcode (0) | 2022.10.30 |