[드림핵 시스템 해킹] NX & ASLR

asdf·2025년 1월 9일

pwnable

목록 보기
12/36

NX


No-eXecute(NX)는 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법입니다. 어떤 메모리 영역에 대해 쓰기 권한과 실행 권한이 함께 있으면 시스템이 취약해지기 쉽습니다.
NX가 적용된 바이너리는 실행될 때 각 메모리 영역에 필요한 권한만을 부여받습니다. NX가 적용된 바이너리에는 코드 영역 외에 실행 권한이 없지만, NX가 적용되지 않은 바이너리에는 스택 영역에 실행 권한이 존재합니다. 따라서 이전에 학습한 내용처럼 스택에서 셸코드를 실행할 수 없습니다.

ASLR


Address Space Layout Randomization(ASLR)은 바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법입니다.
코드 영역의 main함수를 제외한 다른 영역의 주소들은 실행할 때 마다 변경됩니다. 그러므로 실행하기 전에 해당 영역들의 주소를 예측할 수 없습니다.
libc_base와 printf의 주소 차이는 항상 같습니다. ASLR이 적용되면 라이브러리는 임의 주소에 매핑됩니다. 그러나 라이브러리 파일을 그대로 매핑하는 것이므로 매핑된 주소로부터 라이브러리의 다른 심볼들까지의 거리(Offset)은 항상 같습니다.

공격 방법

코드 영역에는 유용한 코드 가젯들과 함수가 포함되어 있습니다. 반환 주소를 셸 코드로 직접 덮는 대신, 이들을 활용해서 NX와 ASLR을 우회하여 공격할 수 있습니다. 대표적인 공격 방법으로는 Return-to-Libc(RTL)Return Oriented Programming(ROP)가 있습니다.

profile
Rainy Waltz(a_hisa)

0개의 댓글