윈도우 메모리



파일로서의 메모리


파일로서의 메모리는 동적으로 존재하는 메모리와는 달리, 그 내용이 변하지 않으며 메모리 관련 API가 아닌 파일 시스템 API를 통해 접근을 할 수 있다.




시스템 메모리


시스템 메모리는 보통 물리적 메모리를 의미한다. 1차 저장장치인 RAM과 여기에 추가적으로 하드 드라이브가 보조 장치로써 2차 저장장치가 될 수 있다.



그런데 이러한 물리 메모리가 아닌 가상 메모리라는 것도 존재다. 가상 메모리란 멀티태스킹 능력을 확장시키기 위해 페이징 기법을 사용하는 기술로써, 루트 폴더의 PageFile.sys 파일에 기록한다.






또한 여기서 간단히 짚고 넘어가야 할 문제가 있다. 물리적 메모리의 정의가 철저해져야 할 필요가 있다는 것이다.



물리 메모리(시스템 메모리)는 RAM만을 뜻하는 것이 아닌 RAM과 Page File 두 가지를 의미하는 것이다. 


하지만, 그렇다고 해서 메모리 덤프 시에 RAM과 Page File 두 가지가 모두 덤핑이 되는 것은 아니다. 이 경우, RAM만이 덤프가 된다.



또한, 프로세스 덤프를 하게 되면 가상 메모리에 대한 덤프가 되기 때문에 RAM과 Page File 모두 사용하는 가상 메모리로썬 모두 덤프할 수 밖에 없다.





가상 메모리


일반적인 물리 형태의 메모리가 아닌 논리 형태의 메모리이다.



가상 메모리의 데이터 저장 형태는 RAM이나 Page File 같은 물리적 메모리 또는 하드 드라이브에 저장되며, 할당되는 주소도 물리 메모리와는 달리 VAS(Virtual Adress Space)라는 주소 공간을 따로 할당 받게 된다.



또한 32비트 기준으로, 윈도우의 모든 프로세스는 개별적으로 4GB의 가상 메모리를 할당받는다. 


어디까지나 ‘가상’ 메모리라서 가능한 점이다. 또한, 가상 메모리는 물리 메모리 뿐만 아니라 하드 드라이브(Page File)도 주소 공간으로 사용한다.





가상 메모리의 특징을 몇 가지 간추려 보자면 다음 표와 같다.








가상 메모리의 구조





32비트 기준으로 가상 메모리의 구조는 위의 그림과 같다. 



실제 하나의 사용자 프로세스가 사용할 수 있는 영역은 사용자 영역 2GB로 제한되어 있으며, 이는 사용자 모드로 동작하기 때문에 커널 영역에 진입할 수 없다. 


커널 영역은 오직 커널 모드로 동작하는 프로세스만 진입 가능하다.



또한 사용자 영역은 boot.ini에서 ‘/3GB’ 옵션을 붙여 재부팅하게 되면 사용자 영역을 3GB로 증설하고, 커널 영역을 1GB로 축소 시킬 수 있는데, 이러한 경우 한 번에 실행할 수 있는 프로세스의 개수가 줄어들게 된다.



그리고 커널 영역은 모든 프로세스에게 공통적인 영역이라서 다른 프로세스의 다른 커널영역이라도 두 커널 내의 오브젝트가 가지고 있는 Virtual Address는 동일하다.





커널 영역은 시스템 운영에 사용되기 때문에 Page File보다는 RAM에 저장되며, 가상 주소에 매핑된다.



사용자 영역은 당장 필요 없다고 판단되는 데이터는 Page File로 이동 시키고, 프로세스가 요청할 경우 RAM으로 올린다.


그렇기 때문에 온전한 사용자 데이터를 얻기 위해서는 RAM+Page File을 추출해야만 얻을 수 있다.




가상 메모리 주소와 물리 메모리 주소 간의 주소 변환



모든 프로세스의 가상 메모리는 가상 주소와 실제 주소가 다르기 때문에 매핑을 시켜주어야 한다. 이는 MMU(Memory Management Unit)에 의해 이루어지며, 반드시 필요한 작업이다.





가령 위와 같이 서로 다른 프로세스가 같은 가상 주소에 다른 데이터를 저장하였더라도, 매핑되어있는 물리 주소가 다르기 때문에 실제론 다른 공간에 저장된다.



그렇다면 어떻게 매핑 정보를 알 수 있는 것일까?



가상 메모리의 주소는 32비트 시스템에서는 32비트의 길이를 갖는다.



이 가상 메모리의 주소가 물리 메모리의 주소로 변환될 땐 Page Directory라는 테이블과 Page Table이라는 테이블, 그리고 하나의





가상 주소를 이용한 물리 주소 찾기


- 메모리는 페이지(Page)라는 단위로 불리는 일정 크기의 물리적 단위를 사용하여 물리 메모리를 관리하는데 가상 주소와 물리 주소의 매핑 또한 이 페이지를 기준으로 이루어진다.



각각의 페이지는 첫 번째 페이지부터 0번 순서가 매겨지며, 이 번호를 페이지 프레임 넘버(Page Frame Number)라고 한다. 가상 주소의 구조는 다음과 같다.

 


위와 같은 정보를 이용하여 가상 주소를 토대로 물리 주소를 찾을 수 있다.





방법은 다음과 같다.



 위의 순서를 그림대로 표현하자면 다음과 같다.







'공부 > Forensics' 카테고리의 다른 글

PE Structure  (0) 2013.04.24
[InForensics] 메모리 분석 - 4  (0) 2012.08.22
[InForensics] 메모리 분석 - 3  (1) 2012.08.22
[InForensics] 메모리 분석 - 2  (2) 2012.08.12
[InForensics] 메모리 분석 - 1  (0) 2012.08.09
[Metasploit]Meterpreter API Cheat Sheet  (0) 2012.07.26
Posted by extr

댓글을 달아 주세요