크래시 덤프


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




흔하게는 일명 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
: