윈도우 메모리



파일로서의 메모리


파일로서의 메모리는 동적으로 존재하는 메모리와는 달리, 그 내용이 변하지 않으며 메모리 관련 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] 메모리 분석 - 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
:

크래시 덤프


시스템을 유지에 치명적인 영향을 주는 문제가 발생하였을 때 문제의 원인을 찾기 위해서 윈도우 스스로가 만드는 메모리 덤프를 말한다.




흔하게는 일명 BSoD(Blue Screen of Death)가 발생하였을 때 생성되는 크래시 덤프가 있다. BSoD가 발생하였을 때 생성되는 크래시 덤프는 시스템과 RAM의 내용이 정지된 상태로 쓰여 지기 때문에 순수하고 정확한 메모리 덤프라고 할 수 있다.




이러한 메모리 덤프 방법은 매우 유용할 수도 있다. 하지만, 몇 가지의 걸림돌이 존재한다.




우선, 기본적으로 사용자가 임의로 크래시 덤프를 생성할 수 없게 설정되어 있기 때문에 기본적인 환경으론 상당히 까다롭다


(어디까지나 Default 이므로 설정을 변경하면 되지만, 변경하면 재부팅을 해야 적용이 되기 때문에 결국 메모리 덤프로써의 의미가 없다).




두 번째로,  조사 대상의 시스템에 대한 영향을 최소화 하지 않기 때문에 크래시 덤프 파일을 저장함으로써, 대상 하드 드라이브의 잠재된 증거들을 덮어 써 버릴 가능성이 크다. 






크래시 덤프의 종류





크래시 덤프 환경 설정은 시스템>고급>시작 및 복구>설정 탭을 통해 접근할 수 있으며, 


환경 설정을 통해 어떤 덤프를 쓸 것인지, 또 어떤 경로에 저장할 것인지 등의 설정을 할 수 있다.




Small Memory Dump


시스템 크래시가 발생한 원인을 밝히기 위한 최소한의 메모리 정보만을 기록한다.



Kernel Memory Dump


비 할당 영역(Unallocated Memory Space)과 유저 모드로 동작중인 프로그램 메모리 영역을 제외한 커널 모드와 HAL 메모리 영역만을 덤프한다. 


메모리 포렌식 영역에 있어선 그다지 도움이 되지 않는다.



Full Memory Dump


RAM 전체를 그대로 덤프한다. 메모리 포렌식에 있어서 유용하다.



Menually Crash Dump


키보드를 이용한 메모리 덤프가 가능하다.


PS/2의 경우HKLM\System\\CurrentControlSet\Services\i8042prt\Parameters

USB의 경우 HKLM\System\\CurrentControlSet\Services\kbdhid\Parameters


위 경로에 아래와 같이 값을 설정하면 된다.



메뉴얼 덤프는 레지스트리를 등록 후, 재부팅하고 난 이후로 Ctrl키를 꾹 누르고 ScrollLock 키를 두 번 누르면 크래시 덤프를 만들 수 있다.




하이버네이션 파일


Hibernation 기능이란, 전력 관리를 보다 효율적으로 하기 위해 절전 상태에 돌입하게 되면, 하드 드라이브에 메모리 데이터를 기록한 다음 전력을 차단해버는 기능을 말한다.



하지만 이는, 기존 전력 관리 방식(RAM에 대한 지속적인 전력 공급)에 비해 Wakeup 시 복구 시간이 비교적 오래 걸린다. 


하지만, 전력 공급 면에선 괜찮은 기능이니 랩탑에겐 필수적인 기능이라 생각한다.



Windows 7의 경우 커맨드 프롬프트를 통해 Hibernation 설정을 할 수 있다.


powercfg -hibernate on/off 또는 powercfg -h on/off 명령으로 Hibernation 기능을 켜고, 끌 수 있다.



하이버네이션으로 인한 메모리 덤프 파일은 Full Mem Dmp가 아니며, 절전된 즉시 만들어 지기 때문에 복구가 되고 나면 그 상황 당시의 메모리 덤프가 아닌 이전의 메모리 덤프 파일이기 때문에 상황에 따라 쓸모가 없어질 수가 있다. 또한, 메인보드의 칩셋과 OS에 따라 지원 여부가 달라진다.





프로세스와 커널 오브젝트


커널 오브젝트는 메모리 분석의 핵심이다. 이는 간단히 말해, 윈도우가 사용 가능한 모든 리소스를 종류 별로 나눠서, 그 구조를 일반화 시킨 것이 커널 오브젝트라고 한다.


커널 오브젝트는 히든 프로세스나 네트워크 세션로 예를 들 수 있으며, 버전 마다 동일한 구조 규칙을 띄고 있어서 숨겨진 오브젝트 또한 찾아내기 쉽다.






프로그램, 프로세스, 스레드





프로그램은 파일들로 이루어진 수동적인 존재지만, 메모리에 올라가는 프로세스는 능동적인 존재이다. 


또한, 프로그램을 이루는 파일들은 이름, 경로, MAC Timestamp, MFT Entry 등의 파일 메타 데이터를 지니고 있고, 프로세스들은 PID, Handles, Access Token 등과 같은 프로세스 메타 데이터를 지니고 있는 특징이 있다.


스레드는 프로세스에 속해있는 또 다른 커널 오브젝트이다. 모든 프로세스는 최소 한 개 이상의 스레드로 구성이 되어 있으며, 윈도우가 CPU에 일을 할당시킬 때 기준으로 삼는 최소 처리 단위이다. 이 최소 처리 단위와 연관이 있는 것이 바로 CPU Scheduling이다. 이에 대해선 검색을 해보길 바란다.




커널 오브젝트

윈도우 커널이 사용, 관리하는 자원들 중에서 명령 또는 함수로 조작이 가능하고, 일정한 구조를 띄고 있으며, 타입으로 분류가 가능한 것들을 뜻한다.




윈도우는 위 그림과 같이 많은 오브젝트들을 관리하기 위해 Object Manager를 사용하는데, 이의 역할을 세 가지 정도 들어보자면 다음과 같다.


1. 시스템 자원 사용에 대한 일관되고, 공통적인 수단을 제공한다.

2. 프로세스가 사용하는 오브젝트를 측정하여, 시스템 자원 사용에 제약을 둔다.

3. 오브젝트들을 쉽게 관리, 사용하기 위해서 오브젝트 명명 규칙을 확립시킨다.


모든 오브젝트는 타입 오브젝트라는 어떤 특정 오브젝트에 대한 포인터 값을 가지고 있으며 이에 따라 오브젝트의 타입이 결정된다.


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

PE Structure  (0) 2013.04.24
[InForensics] 메모리 분석 - 4  (0) 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
:

메모리 덤프 만들기


소프트웨어적인 메모리 덤프 방법과, 하드웨어적인 메모리 덤프 방법을 알아보도록 하자.

각자의 방법 또한 장단점이 존재하며, 소프트웨어 메모리 덤프 방법은 도구에 따라서 또 장단점이 나뉘게 되니 메모리 덤프 방법 및 도구 선택은 매우 신중해져야한다.




하드웨어를 이용한 메모리 덤프



하드웨어를 이용한 메모리 덤프는 다음과 같은 특징을 지니고 있다.



1. 메모리 덤프의 완전성이 높음

2. OS의 특성에 구애받지 않음

3. 루트킷의 영향을 받을 가능성이 낮음

4. DMA를 이용하여 물리 메모리에 빠르게 접근 가능



메모리 덤프 하드웨어 장치는 다음과 같이 나뉜다.



1. PCI 장치


PCI 확장 슬롯에 꼽아 사용할 수 있다. 대표적인 장치로는 ‘Tribble’이 있으며, 실제 구매해 사용하는 용도가 아닌 실험적 용도로 사용된다. ‘Tribble’ 외의 PCI 기반 장치 역시 구매가 가능한 제품이 별로 없다.


2. FireWire 장치


IEEE1394 인터페이스를 이용한 장치이다. 리눅스, 윈도우에서 사용 가능한 특징이 있다. 하지만, FireWire는 소프트웨어 메모리 덤프와 비교해보았을 때 오프셋에 차이가 발생하는 문제점과, UMA 문제로 인해 시스템 크래시 및 메모리 소실이 발생할 수 있는 문제점이 있다.




하드웨어를 메모리 덤프에 대한 장 단점은 아래의 표를 확인하고, 소프트웨어 메모리 덤프로 넘어가 보겠다.







소프트웨어를 이용한 메모리 덤프


이번에는 먼저 소프트웨어를 이용한 경우 어떤 장점지 있고, 어떤 단점이 있는지 살펴보자.






WinDD


메모리 덤프를 위해 세상에 나온 프로그램은 매우 다양하다. 하지만, 모두 일일이 설명하진 않을 것이고 그 중에서 WinDD라는 프로그램을 소개할까 한다.


DD는 원래 GNU 라이센스로 배포되는 유명한 유닉스 프로그램 중 하나인데 간단한 사용 방법 때문인지 인기가 매우 좋은 프로그램으로 널리 알려져있다. 


WinDD는 이러한 DD를 메모리 덤프 전용(물론 WinDD는 프로그램 이름과 같이 윈도우 용으로 만들어졌다)으로 개량한 프로그램이며, Windows XP 이후 버전만을 지원하고 있고 32/64비트 환경을 지원한다.




[Figure 1 - WinDD Memory Dumping]


WinDD에 대해 더 상세히 알고싶다면, 여기를 누르면 된다.


메모리 덤프 프로그램은 이 외에도 Fastdump, ProDiscover가 있다. 각각 CLI, GUI 환경에서 동작하며 자세한 사용 방법은 본인들이 각자 터득해보길 바란다.


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

[InForensics] 메모리 분석 - 4  (0) 2012.08.22
[InForensics] 메모리 분석 - 3  (1) 2012.08.22
[InForensics] 메모리 분석 - 1  (0) 2012.08.09
[Metasploit]Meterpreter API Cheat Sheet  (0) 2012.07.26
[Forensics]Live Response  (1) 2012.07.25
Posted by extr
: