지난 시간에 배운 r2s!는
1. 반환 주소를 임의 주소로 덮을 수 있다
2. 버퍼의 주소를 알 수 있다.
3. 그 버퍼가 실행 가능하다.
위 세가지 이유 때문에 실행이 가능하다!
-> Attack surface를 줄이기 위해 보호기법이 추가로 도입되어야 한다.
Address Space Layout Randomization(ASLR)은 실행될 때마다 스택, 힙, 라이브러리 등 메모리를 랜덤 주소에 할당하는 보호 기법이다.
ASLR은 커널에서 지원하는 보호기법
brk
로 할당한 영역man brk
: program break의 위치를 변경한다.실행과 쓰기 메모리 영역 보호 기법
쓰기 권한 -> 코드 수정 가능
실행 권한 -> Return to Shellcode와 같은 공격 시도 가능
NX가 적용된 바이너리에는 코드 영역 외에 실행 권한이 없다!
스택, 힙, 데이터 영역은 보호가 잘 되는데,
바이너리의 코드가 존재하는 영역은 여전히 실행권한이 존재하며, 할당되는 주소도 고정되어 있다.