1. ASLR이란?
ASLR (Address Space Layout Randomization) 은
프로그램을 실행했을 때 코드와 데이터가 항상 동일한 메모리 주소에 로드되는 것을 방지하기 위해
Windows Vista 이상의 시스템에 적용된 보안 기법입니다.
프로그램이 실행되어 Windows 실행파일 (.exe) 이 메모리에 로딩될 때마다 기본 주소 (Image Base)의 값을
랜덤하게 생성하여 프로세스가 메모리의 어느 부분에 로딩될지 알 수 없게 함으로써
버퍼 오버플로우 취약점을 통한 공격을 차단하는 기술입니다.
Windows XP 이하 시스템의 경우, 프로그램과 DLL (동적 링크 라이브러리, Dynamic Link Library) 의 메모리 주소가
정해져 있었기 때문에 이를 통한 버퍼 오버플로우 공격에 상당히 취약했습니다.
(이전 포스트에 설명드리지 못하였으나, 쪽지가 아니여도 네이트온을 시스템에서 가장 우선순위로 강제설정하여 종료시킬 수 있습니다. 하지만 XP이하 버젼에서만 적용되었습니다.)
그러나 ASLR이 적용된 시스템에서는 프로그램이 실행될 때마다 기본 주소의 값이 변하게 되므로
기존의 버퍼 오버플로우 기법으로는 더 이상 공격할 수 없게 되었습니다.
2. ASLR 우회하기
ASLR 보안기법이 적용된 시스템에서 실행되는 프로그램을 PEView로 열어보면
IMAGE_NT_HEADERS 아래의 IMAGE_OPTIONAL_HEADER의 DLL Characteristics에 '40' 이라는 값이 저장되어 있는 것을 볼 수 있습니다.
(ASLR 미적용 프로그램을 PEView로 열어보면 저 '40'이라는 값이 없습니다. 그 말은 40이 ASLR 적용을 위한 값이라는 뜻이겠죠.)
헥사에디터로 프로그램을 열어서 이 '40' 을 '00' 으로 바꿔 주기만 하면 천하무적일 것 같던 ASLR을
의외로 '간단하게' 우회할 수 있습니다.
Write BY. CISA(TERA 블로그 인용)