본문 바로가기

Hacking/System Hacking-

[시스템 방어] Buffer Over Flow 에 대한 방어, ASLR

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 블로그 인용)