윈도우 전체 메모리 덤프 생성 – MDD, Win32dd, Memoryze

메모리 덤프는 Windbg로 분석할 수 있는 메모리 덤프와 다른 일반적인 메모리 분석툴에서 분석을 진행할 수 있는 RAW타입(바이너리)의 메모리 덤프이다. 이 둘은 서로 호환되지 않으므로, 만약 침해사고 분석 용도라면 RAW 타입으로 생성하야 함을 명심하기 바란다.

MDD

mdd_1.3

ManTech에서 오픈 소스로 제공하는 메모리 덤프 프로그램이다. (소스는 http://sourceforge.net/projects/mdd/files/ 에서 다운로드 가능하다.)

본 툴은 윈도우 XP부터 Windows 2008까지 지원하며, RAW 바이너리 형태로 저장된다(메모리 저장 형식에는 RAW와 Windbg에 맞는 Crash 형태의 2종류가 있다)

유용한 기능으로 저장 완료시 MD5(Message-Digest Algorithm 5)를 저장하므로 화면 출력 내용을 파일로 함께 저장하면 유용하다.

-o <파일이름>     : 생성할 덤프 파일 이름

-q        : 오류가 있을시 출력하지 않음

-v        : 매핑 실패시 해당 오류 출력

-c. –w        : GPL 라이선스 관련 정보 확인

-o 옵션이외에는 사용되지 않을 정도로 간단하여 유용한 도구라 할 수있다. 아래와 같이 덤프를 생성하고 실행 메시지를 파일로 저장하도록 하자.

C:\Forensic\Dump>mdd –o %Computername%_Phys.dmp >> %Computername%_dump_result.txt

C:\Forensic\Dump>type %Computername%_dump_result.txt

-> mdd

-> ManTech Physical Memory Dump Utility

Copyright © 2008 ManTech Security & Mission Assurance

-> This program comes with ABSOLUTELY NO WARRANTY; for details use option -w'

This is free software, and you are welcome to redistribute it

under certain conditions; use option -c’ for details.

-> Dumping 511.48 MB of physical memory to file ‘JUHAN-1_Phys.dmp’.

130940 map operations succeeded (1.00)

0 map operations failed

took 20 seconds to write

MD5 is: 9ebaa66c3a0b5a1aa891c41dfd08f7fa

↓실행 결과, 다음과 같은 내용을 확인 할 수 있다.

[그림] 메모리 덤프 실행결과를 파일로 저장하여 차후 확인이 가능하다

Win32dd(Win64dd)

Win32dd역시 오픈 소스 툴로써, 메모리 덤프 수집툴로써 가장 유용한 툴일 것 같다는 판단이 든다.

메모리 덤프 생성에 대한 다양한 옵션을 지원하며, 생성 형태도 RAW와 Crash 형태 2종류 모두 지원한다. 따라서 Crash 덤프 형태로 생성할 경우 마이크로소프트에서 제공하는 디버깅 툴를 이용하여서도 메모리 분석을 진행할 수 있다.

그리고 함께 제공하는 툴로써 dmp2bin를 통해 마이크로소프트형 메모리 덤프를 RAW 타입으로 변환하거나 bin2dmp.exe를 통해 그 반대로 가능하다. 추가로 서버모드를 통해 원격지에 메모리 덤프 파일을 바로 내보낼 수 있다.

C:\>win32dd –h

win32dd – 1.3.1.20100417 – (Community Edition)

Kernel land physical memory acquisition

Copyright © 2007 – 2010, Matthieu Suiche <http://www.msuiche.net>

Copyright © 2009 – 2010, MoonSols <http://www.moonsols.com>

Usage: win32dd [options]

Option Description

—— ———–

/f <file> File destination.

/r Create a Raw memory dump file. (default)

/d Create a Microsoft memory crash dump file. (WinDbg compliant, XP and later only)

/c <value> Memory content.

0 – Full physical address space.

1 – Memory manager physical memory block. (default)

2 – Memory manager physical memory block + Very First PFNs.

/m <value> Mapping method for either /d or /r option.

0 – MmMapIoSpace().

1 – \\Device\\PhysicalMemory.

2 – PFN Mapping. (default)

/e Create a Microsoft hibernation file. (local only, reboot)

/k Create a Microsoft memory crash dump file (BSOD).

(local only, reboot)

/s <value> Hash function to use. (Only on sender/local machine)

0 – No hashing algorithm. (default)

1 – SHA1 algorithm.

2 – MD5 algorithm.

3 – SHA-256 algorithm.

/y <value> Speed level.

0 – Normal.

1 – Fast.

2 – Sonic.

3 – Hyper sonic. (default)

/t <addr> Remote host or address IP.

/p <port> Port, can be used with both /t and /l options. (default: 1337)

/l Server mode to receive memory dump remotely.

/a Answer “yes” to all questions. Must be used for piped-report.

/? Display this help.

Samples:

win32dd /d /f physmem.dmp – Standard Microsoft crash dump.

win32dd /m 0 /r /f F:\physmem.bin – Raw dump using MmMapIoSpace() method.

win32dd /l /f F:\msuiche.bin – Waiting for a local connexion on port 1337.

win32dd /t sample.foo.com /d /c 0 – Send remotely a Microsoft full crash dump.

win32dd /d /f \\smb_server\remote.dmp – Send remotely on a SMB server.

[내용] Win32dd 도움말

그럼 실제 메모리 덤프를 아래와 같이 생성해 보도록 하자.

//RAW 형 데이터로 메모리 덤프를 생성하고, 결과는 텍스트 파일에 저장하도록 지정하자.
C:\win32dd>win32dd /m 0 /r /f %Computername%_physmem.bin /a /s 2 >> %Computername%_physmem_result.txt

//메모리 덤프 생성 결과를 type 명령을 이용하여 확인해 보자.

C:\win32dd>type %Computername%_physmem_result.txt

win32dd – 1.3.1.20100417 – (Community Edition)

Kernel land physical memory acquisition

Copyright (C) 2007 – 2010, Matthieu Suiche <http://www.msuiche.net>

Copyright (C) 2009 – 2010, MoonSols <http://www.moonsols.com>

Name Value

—- —–

File type: Raw memory dump file

Acquisition method: MmMapIoSpace()

Content: Memory manager physical memory block

Destination path: JUHAN_physmem.bin

O.S. Version: Microsoft Windows 7 Business, 32-bit Service Pac

k 1 (build 7601)

Computer name: JUHAN

Physical memory in use: 75%

Physical memory size: 3399160 Kb ( 3319 Mb)

Physical memory available: 830300 Kb ( 810 Mb)

Paging file size: 6796564 Kb ( 6637 Mb)

Paging file available: 3347072 Kb ( 3268 Mb)

Virtual memory size: 2097024 Kb ( 2047 Mb)

Virtual memory available: 2064096 Kb ( 2015 Mb)

Extented memory available: 0 Kb ( 0 Mb)

Physical page size: 4096 bytes

Minimum physical address: 0x0000000000001000

Maximum physical address: 0x00000000CF7DF000

Address space size: 3481141248 bytes (3399552 Kb)

–> Are you sure you want to continue? [y/n] y

Acquisition started at: [6/2/2012 (DD/MM/YYYY) 6:13:1 (UTC)]

Processing….Done.

Acquisition finished at: [2012-02-06 (YYYY-MM-DD) 6:14:03 (UTC)]

Time elapsed: 1:02 minutes:seconds (62 secs)

Created file size: 3481141248 bytes ( 3319 Mb)

NtStatus (troubleshooting): 0x00000000

Total of written pages: 849790

Total of inacessible pages: 0

Total of accessible pages: 849790

MD5: 7941F73731C49458DA221B3B1D7C7D1D

Physical memory in use: 73%

Physical memory size: 3399160 Kb ( 3319 Mb)

Physical memory available: 887236 Kb ( 866 Mb)

Paging file size: 6796564 Kb ( 6637 Mb)

Paging file available: 3350768 Kb ( 3272 Mb)

Virtual memory size: 2097024 Kb ( 2047 Mb)

Virtual memory available: 2060000 Kb ( 2011 Mb)

Extented memory available: 0 Kb ( 0 Mb)

Physical page size: 4096 bytes

Minimum physical address: 0x0000000000001000

Maximum physical address: 0x00000000CF7DF000

Address space size: 3481141248 bytes (3399552 Kb)

[내용] Win32dd를 이용한 메모리 덤프 생성

MoonSols은 Win32dd이외에도 Dumpit 역시 공객하였는데, 옵션이 존재하지 않고 실행시 덤프를 생성할지 여부만 확인한다. 아래에서 다운로드 가능하다.

DumpIt

http://www.moonsols.com/ressources/

[그림] 간편히 사용할 수 있는 Dumpit

Memoryze

sdl-memoryze

Mandiant에서 제공하는 무료 툴로써 자체 분석기툴를 통해 보고서를 생성하여 확인할 수 있는게 특징이다. 윈도우 2000부터 윈도우 2008 R2 32/64비트까지 폭넓게 지원하며, 사전에 만들어 놓은 배치 파일이 이용하여 원하는 메모리 내용만을 골라 덤프 할 수 있다.

MemoryDD.bat        : 다른 메모리 덤프 프로그램과 같이 메모리 덤프를 생성한다.

ProcessDD.bat        : 저정한 프로세스 덤프를 생성한다.

DriverDD.bat        : 현재 메모리 상의 전체 드라이버를 덤프 한다.

Process.bat        : 현재 메모리 상의 전체 프로세스의 핸들과 가상 메모리, 그리고 사용 네트워크 포트와 저장된 스트링을 출력 한다.(XML형식)

HookDetection.bat    : 현재 운영체제에서 후킹 중인 프로세스 혹은 드라이버를 출력한다.(XML형식)

DirverSearch.bat        : 드라이버 검색(XML형식)

DriverWalkList.bat    : 현재 메모리상의 전체 드라이버를 출력한다.(XML형식)

MemoryDD.bat, ProcessDD, DriverDD.bat를 제외하고 나머지는 XML 형식으로 출력되므로, 출력 결과를 전용 뷰어(http://www.mandiant.com/products/free_software/mandiant_audit_viewer )로 확확인하는 것 유용하다.

전용 뷰어의 경우 Memoryze로 메모리 덤프를 분석해주는 툴로써, 메모리 내 데이터를 분석하여, 원하는 결과값을 생성하여 준다.

↓원하는 정보를 선택하여 분석을 진행한다.

[그림] 자동 분석을 통해 프로세스들의 사용중인 네트워크 현황등을 쉽게 확인할 수 있다

그럼 실습을 통해 확인해 보자.

C:\>memorydd -output C:\Dump

Memoryze.exe by MANDIANT, Inc. (c) 2009 – www.mandiant.com/software/memoryze.htm

Usage: memorydd

-offset optional offset into physical memory. Exclude for all.

-size optional size of physical memory to acquire. Exclude for all.

-output directory to write the results. Default .\Audits

위와 같이 실행하면, 스크립트가 실행되며 다음과 같이 파일을 생성하게 된다.

자동 수집 도구 보다, 데이터를 수집이후 분석용도로 사용해 보는것도 좋을 듯싶다.

↓스크립트에 의해 아래와 같은 결과 값을 생성한다.

[그림]Memorydd.bat 실행 결과

이외에도 많은 메모리 덤프 수집 도구들이 존재 하지만, 이 정도로도 충분하리라 판단되므로 메모리 데이터 수집은 이것으로 마치도록 하겠다.

Facebook Comments

Leave A Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.