ASLR (Address Space Layout Randomization)
- 바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법
- 커널에서 지원하는 보호기법이며,
cat /proc/sys/kernel/randomize_va_space
로 확인할 수 있음
- 0 : No ASLR
- 1 : Conservative Randomization (stack, heap. lib, vdso, etc....)
- 2 : Conservative Rand. + brk (1 + brk allocated space)
- 특징
- 코드 영역의 메인 함수를 제외한 다른 영역의 주소들이 바이너리 실헹될 때마다 변경됨
- libc_base 주소 하위 12비트, printf 주소 하위 12비트 값은 변경 x
- ASLR 적용시 리눅스에선 파일을 페이지 단위(12비트)로 임의 주소 매핑
- libc_base와 printf의 offset은 항상 같음 (라이브러리 파일을 그대로 매핑함)