VA(Virtual address), RVA(Relative virtual address) 그리고 ASLR

VA, RVA 그리고 ASLR

VA(Virtual address)는 변하지 않는 프로세스 내 가상 메모리상의 절대 주소를 말하며, RVA(Relative virtual address)는 특정 기준점으로부터 계산된 상대주소를 뜻한다.

PE Header의 많은 정보들 중 대부분의 주소 RVA로 되어 있다.

이처럼 상대주소로 설정된 이유는 다른 PE파일과 메모리 로딩시 충돌을 방지하고자 함에 있다.

RVA인 상대주소로 작성되어야 메모리 로딩 위치가 변하더라도 기준 위치에 따른 상대주소는 변하지 않기 때문이다. RVA를 통해 VA를 구하는 방법은 다음과 같다.

 

VA = RVA + Imagebase

 

여기에 최근 윈도우 비스타에서 보안 강화를 위해 도입된 ASLR(Address space layout randomization) 기술을 도입해 .dll이나 .exe파일에 대해 메모리에 로딩되는 ImageBase가 실행시마다 달라지게 된다. 이는 메모리 위치를 실행 시마다 계속 변경하게 되어 보안적으로 후킹을 어렵게 함에 있다(해킹 중 고정된 API의 메모리 주소를 지정하여 하는 방식을 과거 많이 사용하여, 이를 보안하기 위해 도입되었다).

그럼 예제를 통해 확인해 보자.

PEview를 이용하여, 윈도우 XP를 설치한 가상머신에서 메모장을 열어보자.

 

[그림] PEview로 확인한 Notepad.exe의 PE Header 내용

 

Address of Entry Point와 Base of Code, Base of Data는 RVA로 특정 기준점에서 계산된 값이 들어 있다. 이 값의 기준점은 아래 Image Base다. 그렇다면 VA값을 계산해 보자.

 

// Address of Entry Point VA 구하기

0x739Dh(Address of Entry Point RVA) + 0x1000000h(Image Base) = 0x100739Dh

// Base of Code VA 구하기

0x1000h(Base of Code RVA) + 0x1000000h(Image Base) = 0x1001000h

// Base of Data VA 구하기

0x9000h(Base of Data RVA) + 0x1000000h(Image Base) = 0x1009000h

[내용] VA주소구하기

 

위와 같이 우리가 구한 위치값에 메모리 로딩시 위치하게 된다. 그럼 실제 계산한 값이 맞는지 Ollydbg를 이용하여 확인해 보자.

 

[그림] Ollydbg로 확인한 Notepad.exe의 메모리 로딩 위치와 EP 주소

 

우리가 조사한 주소 대역과 일치함을 확인할 수 있다. 그럼 이제 ASLR이 적용된 윈도우 7에서는 어떨까? 아래 그림은 윈도우 7의 메모장을 PEview를 통해 확인한 내용이다.

 

[그림] 윈도우 7에서 PEview를 이용하여 Notepad.exe의 PE Header 내용

 

PEview 구조로는 차이가 없어 보인다. 그럼 Ollydbg를 이용해 Notepad.exe를 열어보자.

 

[그림] Image Base에서 지정한 주소와 다른 주소에 로드되어 있다.

 

위와 같이 Image Base에서 지정한 주소 0x01000000 주소가 아닌, 0x00B60000 위치에 로드되어 있음을 확인할 수 있다.

이처럼 주소를 랜덤으로 부여할 수 있는 이유는 앞서 배운 PE Header에서 IMAGE_OPTIONAL_HEADER \ DLL Characteristics에 추가된 IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE의 플래그 값를 통해 ASLR을 구현 유무를 확인할 수 있다. 개발시에는 컴파일 옵션에 /DYNAMICBASE를 설정하여 적용할 수 있다. reloc 섹션 역시 ASLR을 위해 존재한다(여기에서는 이를 해제하는 방법에 대해서는 다루지 않겠다. 아래 내용을 확인하면 ASLR 이해에 조금더 도움이 될 것이다.

http://blogs.msdn.com/b/winsdk/archive/2009/11/30/how-to-disable-address-space-layout-randomization-aslr.aspx

처음 접해보는 독자는 이해가 어려울 수도 있다. 조금 도움을 주자면 PEview에서는 VA, RVA를 확인할 수 있는 옵션을 제공하는데, 이를 사용자 용도에 맞게 설정하여 사용하면 편리하다.

 

[그림] PEview의 Address View 옵션 이용

Facebook Comments

Leave A Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.