2023. 3. 29. 17:17ㆍ해킹
NX, ASLR 보호기법
Address Space Layout Randomization(ASLR) : 바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법
- No ASLR(0): ASLR을 적용하지 않음
- Conservative Randomization(1): 스택, 힙, 라이브러리, vdso 등
- Conservative Randomization + brk(2): (1)의 영역과 brk로 할당한 영역
main을 제외하면 모두 주소가 실행할 때 마다 달라짐.
다만 libc_base와 printf와 같은 라이브러리는 하위 12비트는 같으며, 늘상 일정한 거리에 떨어져 있다.
보호 기법 확인
cat /proc/sys/kernel/randomize_va_space 2
cat /proc/sys/kernel/randomize_va_space 0(ASLR X)
cat /proc/sys/kernel/randomize_va_space 1(stack, library ASLR O)
cat /proc/sys/kernel/randomize_va_space 2(stack, library, heap ASLR O)
No-eXecute(NX) : 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법.
어떤 메모리 영역에 대해 쓰기 권한과 실행 존재 -> 권한시스템이 취약 유발
ex)코드 영역에 쓰기 권한 존재 -> 공격자는 코드를 수정하여 원하는 코드가 실행되게 할 수 있고, 반대로 스택이나 데이터 영역에 실행 권한이 있으면 Return to Shellcode와 같은 공격을 시도 가능.
따라서 CPU가 NX를 지원하면 컴파일러 옵션을 통해 바이너리에 NX를 적용할 수 있음.
NX가 적용된 바이너리는 실행될 때 각 메모리 영역에 필요한 권한만을 부여받음.
gdb의 vmmap으로 NX 적용 전후의 메모리 맵을 비교하면, 다음과 같이 NX가 적용된 바이너리에는 코드 영역 외에 실행 권한이 없는 것을 확인 가능
but NX가 적용되지 않은 바이너리에는 스택, 힙, 데이터 영역에 실행 권한이 존재하는 것을 확인할 수 있음.
vmap으로
컴파일 옵션
-zexecstack(메모리에 실행권한 부여, NX 해제)
-> shell code 불가능
gcc 컴파일러 메모리 보호기법 (tistory.com)
gcc 컴파일러 메모리 보호기법
오브젝트 파일, 실행파일로 바꾸기 위해서는 고급언어를 저급언어로 바꿔주는 컴파일러가 필요한데 이를 C언어에서는 gcc가 담당한다. 여러가지 옵션이 많기는 하지만 일단 실행파일을 생성하
sumsum2.tistory.com
이전에 포스팅 했던 보호기법의 내용이 이것.
'해킹' 카테고리의 다른 글
[dreamhack] rutern to Library, 개념혼동 정리 (0) | 2023.03.29 |
---|---|
[dreamhack]XSS 공부 (0) | 2023.03.16 |
gcc 컴파일러 메모리 보호기법 (0) | 2023.03.08 |