728x90
반응형
Definition | 정의
No-eXecute의 약자로, 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호기법
코드 영역에 쓰기 권한이 있으면 공격자가 코드르 수정하여 원하는 코드가 실행되게 할 수 있음
스택, 데이터1 영역에 실행권한이 있으면 스택에 쉘 코드를 넣어 코드가 실행될 수 있음
이러한 상황을 막기 위해 NX가 적용됨
보호기법들마다, 적용되는 단계가 다르다
NX bit의 경우 CPU에서 지원해줌
NX 확인하기
gdb의 vmmap
pwndbg> vmmap
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA
Start End Perm Size Offset File
0x400000 0x401000 r--p 1000 0 /home/dreamhack/nx
0x401000 0x402000 r-xp 1000 1000 /home/dreamhack/nx
0x402000 0x403000 r--p 1000 2000 /home/dreamhack/nx
0x403000 0x404000 r--p 1000 2000 /home/dreamhack/nx
0x404000 0x405000 rw-p 1000 3000 /home/dreamhack/nx
0x7ffff7d7f000 0x7ffff7d82000 rw-p 3000 0 [anon_7ffff7d7f]
0x7ffff7d82000 0x7ffff7daa000 r--p 28000 0 /usr/lib/x86_64-linux-gnu/libc.so.6
0x7ffff7daa000 0x7ffff7f3f000 r-xp 195000 28000 /usr/lib/x86_64-linux-gnu/libc.so.6
0x7ffff7f3f000 0x7ffff7f97000 r--p 58000 1bd000 /usr/lib/x86_64-linux-gnu/libc.so.6
0x7ffff7f97000 0x7ffff7f9b000 r--p 4000 214000 /usr/lib/x86_64-linux-gnu/libc.so.6
0x7ffff7f9b000 0x7ffff7f9d000 rw-p 2000 218000 /usr/lib/x86_64-linux-gnu/libc.so.6
0x7ffff7f9d000 0x7ffff7faa000 rw-p d000 0 [anon_7ffff7f9d]
0x7ffff7fbb000 0x7ffff7fbd000 rw-p 2000 0 [anon_7ffff7fbb]
0x7ffff7fbd000 0x7ffff7fc1000 r--p 4000 0 [vvar]
0x7ffff7fc1000 0x7ffff7fc3000 r-xp 2000 0 [vdso]
0x7ffff7fc3000 0x7ffff7fc5000 r--p 2000 0 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
0x7ffff7fc5000 0x7ffff7fef000 r-xp 2a000 2000 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
0x7ffff7fef000 0x7ffff7ffa000 r--p b000 2c000 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
0x7ffff7ffb000 0x7ffff7ffd000 r--p 2000 37000 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
0x7ffff7ffd000 0x7ffff7fff000 rw-p 2000 39000 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
0x7ffffffde000 0x7ffffffff000 rw-p 21000 0 [stack]
0xffffffffff600000 0xffffffffff601000 --xp 1000 0 [vsyscall]
[stack] 영역에 보면 nx를 enable하면 x(실행권한)이 없는 것을 확인할 수 있다
checksec
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: Canary found
NX: NX enabled
PIE: No PIE (0x400000)
NX enabled - 즉, NX가 실행되고 있음을 확인할 수 있음
더보기
[ 다른 운영체제의 mitigation ]
인텔의 경우 XD
AMD의 경우 NX
윈도우의 경우 DEP
ARM의 경우 XN
이라고 칭한다
Bypassing NX
RTL(Return-to-libc)를 활용한다
리턴 주소를 라이브러리 내의 함수 주소로 바꾸어 NX bit를 우회할 수 있음
reference
Dreamhack SystemHacking > Mitigation: NX & ASLR
728x90
반응형
'Hacking > Pwnable' 카테고리의 다른 글
[Exploit] Return to Library (0) | 2024.09.06 |
---|---|
[Mitigation] ASLR (0) | 2024.08.25 |
[Mitigation] Stack Canary (0) | 2024.08.24 |
gdb를 pwntools와 디버깅하기 (0) | 2024.07.26 |
[Memory Corruption] Stack Buffer Overflow (1) | 2024.01.29 |