본문 바로가기

High Level Technique/Reversing

Address Space Layout Randomization (ASLR)

Address Space Layout Randomization (ASLR)


Address Space Layout Randomization (이하 ASLR)은 Windows Vista 부터 적용된 기술입니다. (오래전에 XP SP3부터 적용되었다고 들었는데...)



Windows Kernel Version


Windows 2000                 5.0


Windows XP                     5.1


Windows Server 2003     5.2


Windows Vista                 6.0


Windows Server 2008     6.0


Windows 2008 R2           6.1


Windows 7                        6.1


Windows 8                       6.2


Windows 8.1                     6.3


Windows 10                     6.4



ASLR 기능은 Kernel 6.0 이후 부터 지원되는 기능이라고 합니다.





ASLR


시스템 해킹을 해보신 분이라면 ASLR이 어떤 역할을 하는지 알고 계실겁니다. 아주 단순히 말하자면 실행할 때마다 주소가 바뀌는 거죠. 그래서 exploit을 할 때 주소가 바뀌게 되어 원하는 주소를 넣기 힘들게 만듭니다.


좀 더 자세히 말하자면 ASLR 기술은 PE file이 메모리에 로딩될 때 로딩 시작 주소 값을 랜덤하게 바꾸는 것입니다. 프로그램의 스택, 힙의 시작 주소도 실행될 때마다 랜덤으로 바뀌게 됩니다. 그래서 파일이 실행될 때 프로세스 메모리에서 실제 로딩 주소는 매번 달라지게 되고, DLL 파일이 최초로 로딩될 때도 메모리에서 실제 로딩 주소가 달라집니다.


모든 프로그램에서 ASLR이 적용되는 것은 아닙니다. Kernel Version 6 이상이여야 하고 Visual Stdio에서 링커 - 고급 - 임의 기준 주소(/DYNAMICBASE)를 지원해야 한다고 합니다.






ASLR이 적용된 프로그램과 적용되지 않는 프로그램의 차이


1. ASLR이 적용된 프로그램은 주소가 항상 바뀐다.

2. ASLR이 적용된 프로그램은 .reloc section이 존재한다.

3. ASLR이 적용된 프로그램은  IMAGE_FILE_HEADER - Characteristics값에 IMAGE_FILe_RELOCS_STRIPPED(1) 플래그가 없다.

4. ASLR이 적용된 프로그램은 IMAGE_OPTIONAL_HEADER - DLL Characteristics 값에 IMAGE_DLLCHRACTERISTICS_DYNAMIC_BASE(40) 플래그가 세팅되어있다.





TIP - ASLR 기능을 제거하여 분석을 편하게 하자!


ASLR이 걸려있는 파일을 Hex Editor을 이용하여  DLLCHRACTERISTICS_DYNAMIC_BASE(40) 값을 제거하여 항상 고정된 주소에서 실행되도록 만들어 분석을 하면 됩니다.


'High Level Technique > Reversing' 카테고리의 다른 글

DLL Injection in kernel 6  (0) 2016.07.27
Session in Kernel 6  (0) 2016.07.26
WinDBG명령어와 분석방법  (0) 2016.07.26
64비트에서 달라진 점  (0) 2016.07.26
API Hooking - API Code Patch, Global Hooking  (0) 2016.07.25