NX
NX(No-eXecute)
- 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리
- 코드에 쓰기권한 있는 경우 : 임의 코드 입력, Return to Shellcode 등이 가능함
- CPU가 NX를 지원해야 함.
- NX를 인텔은 XD(eXecute Disable) , AMD는 NX, 윈도우는 DEP(Data Execution Prevention) ,
ARM에서는 XN(eXecute Never) 라고 칭하고 있습니다. 명칭만 다를 뿐 모두 비슷한 보호 기법입니다.
ASLR(Address Space Layout Randomization)
- 바이너리가 실행될 때마다 스택, 힙, 공유 lib 등을 임의의 주소에 할당하는 보호기법
- 이제 buf의 주소를 구하는 것이 선행되어야 함
Library
- libc에서 puts을 탐색, puts의 정의가 있는 libc에서 puts의 코드를 찾아서 실행
- 동적링크(Dynamic Link): 바이너리 실행 시, 동적lib가 프로세스의 메모리에 매핑
매핑된 라이브러리에서 호출할 함수의 주소를 찾고, 그 함수를 실행
- 정적링크(Static Link): 바이너리에 정적lib에 있는 필요한 모든 함수가 포함됨 (용량낭비가 심함)
PLT(Procedure Linkage Table)와 GOT(Global Offset Table)
- 라이브러리에서 동적 링크된 심볼의 주소를 찾을 때 사용하는 테이블
- PLT -> GOT -> -> _dl_runtime_resolve_fxsave (여기서 puts의 주소가 구해지고 GOT 엔트리에 주소를 쓴다)
- runtime resolve를 하기 위한 코드는 plt에 있다.
- PLT에서 GOT를 참조하여 실행 흐름을 옮길 때, GOT의 값을 검증하지 않음.
- 따라서 GOT 엔트리에 저장된 값을 임의로 변조할 수 있다면, puts가 호출될 때, 원하는 공격코드 실행이 가능함
(GOT Overwrite 공격)
레퍼런스
'System (Pwnable)' 카테고리의 다른 글
Dreamhack rop writeup (0) | 2025.03.08 |
---|---|
Dreamhack Return to Library Writeup (0) | 2025.03.06 |
Dreamhack ssp_001 Writeup (0) | 2025.03.06 |
스택 카나리(Stack Canary) 설명 및 카나리 우회방안(Return to Shellcode Writeup) (0) | 2025.03.04 |
basic_exploitation_001 Writeup (0) | 2025.03.04 |