◎ RAW memory dump

자세한 내용은 [Windows] 메모리 덤프 형식(Memory Dump Format) 글에서 확인해주세요.

 

• Windd

• DumpIt

• Magnet Ram Capture

• Winpmem

• Belkasoft Live RAM Capturer

• FTK Imager

 

[Windd]

Unix 용 dd의 윈도우 버전이라고 보면 되겠습니다. win32dd(win64dd)는 MoonSols 사의 무료 메모리 덤프 툴입니다. 윈도우 XP, Vista 그리고 Win7 x86, x86_64를 지원합니다. 윈도우 10 22H2는 지원하지 않습니다(BSOD 발생).

 

[DumpIt]

win32dd와 win64dd의 기능을 하나로 통합한 MoonSols 사의 무료 메모리 덤프 툴입니다. MoonSols 사의 dumpit은 역시나 윈도우 10 22H2는 지원하지 않습니다(BSOD 발생)만, Comae 사(Magnet Forensics 사에 인수됨)의 dumpit은 윈도우 10 22H2를 지원합니다. 더블클릭하면 메모리덤프 진행여부를 묻고 진행 시 Dumpit이 실행된 폴더에 크래시 덤프 파일을 저장합니다.

제작사 홈페이지에서 다운받을 수 있습니다.

  > MoonSols Dumpit

  > Magnet(Comae) Dumpit

 

[Magnet Ram Capture]

Magnet Forensics 사가 Comae 사를 인수하기 전에 배포한 툴입니다. Comae 사를 인수한 이후 Magnet Forensics 사의 홈페이지에서 Magnet Ram Capture 내용 대신 Dumpit 내용을 보여주고 있습니다.

 

※ MoonSols 사의 홈페이지도 접속이 안되고, MoonSols 사의 Windd와 Dumpit은 왜 업데이트가 안되는건지 궁금해서 만든이(Mathieu Suiche)를 검색해봤습니다.  Mathieu Suiche(1988년 9월 22일 출생)는 프랑스의 해커 이자 기업가로 MoonSols 사의 창립자이자 VMWare 사에 의해 인수되기 전 CloudVolumes 사의 공동 창립자입니다. 이후 Comae 사를 설립하였으며, 회사는 Magnet Forensics 사에 인수되었습니다. 현재는 Magnet Forensics 사의 Incident Response R&D 이사로 재직하고 있습니다.

 

[Winpmem]

Google의 Rekall 프로젝트(오픈소스 메모리분석 프레임워크)에 속해 있다가 현재는 독립한 무료 메모리 덤프 툴입니다. 마지막 릴리즈가 2020년 10월인데 윈도우 10 22H2를 지원합니다. CMD창을 관리자모드로 실행하고 아래 명령어를 입력하면 메모리 덤프를 진행합니다.

 > winpmem_mini_x64_rc2 memdump.raw

Github에서 다운받을 수 있습니다.

 

 

[Belkasoft Live RAM Capturer]

Belkasoft 사의 메모리덤프 툴입니다. 더블클릭으로 메모리 덤프가 가능합니다. 윈도우 10 22H2를 지원합니다.

제작사 홈페이지에서 다운받을 수 있습니다.

 

 

[FTK Imager]

Exterro 사의 메모리덤프 툴입니다. FTK Imager를 설치하고 일반적으로 "C:\Program Files\AccessData\FTK Imager" 폴더를 USB에 복사하면 독립실행이 가능합니다. 메모리덤프를 진행하기 원하는 시스템에 USB를 연결하고 FTK Imager.exe를 더블클릭하면 GUI에서 File - Capture Memory메뉴를 통해 메모리 덤프가 가능합니다. 윈도우 10 22H2를 지원합니다.

제작사 홈페이지에서 다운받을 수 있습니다.

[Memory Dump 란?]
Memory Dump 는 System의 물리 Memory 를 File 형태로 저장하는 방법으로, 해당 File 의 구조는 실제 물리 Memory 구조와 동일합니다. 침해사고 분석 시 침해 시스템에 실시간 분석을 수행하면 해당 명령어로 인해 Memory 의 상태 및 Data 가 변경됩니다. 

이는 Memory 로부터 얻을 수 있는 중요한 정보를 놓칠 수 있는 가능성이 존재하므로 분석에 불리하게 작용할 수 있습니다. 이 같은 실시간 분석의 단점으로 인해 침해사고 시점의 휘발성 Data 를 File 로 간직하여 Memory 에 변화를 주지 않으면서 분석을 하기위해 Memory Dump 를 수행합니다. 

◎ Windows 에서 Memory Dump
Windows 운영체제에서 메모리 덤프는 수집방법에 따라 파일 형식이 달라지지만 일반적으로 사용되는 메모리 덤프형식은 5가지가 있습니다.
• RAW memory dump.
• Windows crash dump.
• Windows hibernation files.(최대 절전 모드 파일)
• Expert witness format (EWF).
• HPAK format.

[RAW memory dump]
RAW 메모리 덤프는 가장 일반적으로 사용되는 메모리 덤프 형식입니다. RAW 메모리 덤프에는 headers, metadata, magic values 이 포함되어 있지 않습니다.

원시 형식에는 일반적으로 의도적으로 건너뛴 메모리 범위(예: 디바이스 메모리)나 수집 도구에서 읽을 수 없는 메모리 범위에 대한 패딩이 포함되어 공간 무결성(데이터 간 상대적 오프셋)을 유지하는 데 도움이 됩니다.

[Windows crach dump]
모든 Windows 운영체제는 컴퓨터 충돌 시 컴퓨터의 상태에 대한 정보를 덤프하도록 구성되어 있습니다. 이러한 크래시 덤프는 _DMP_HEADER 또는 _DMP_HEADER64구조로 시작됩니다.
Windows 크래시 덤프에는 세가지 형식의 메모리 덤프를 사용할 수 있습니다.
> Complete 메모리 덤프
이 메모리 덤프는 the largest kernel-mode 메모리 덤프 파일입니다.  이 메모리 파일에는 실제 메모리에 있던 모든 내용이 포함되어 있습니다. 이 메모리 덤프에는 플랫폼 펌웨어에서 사용하는 물리적 메모리가 포함되어 있지 않습니다.
> Kernel 메모리 덤프
이 커널 모드 메모리 덤프에는 메모리 캡처 시 커널에서 사용된 모든 내용이 포함되어 있습니다. 이 파일에는 커널에서 사용된 콘텐츠만 포함되어 있으므로 이 메모리 덤프는 전체 메모리 덤프보다 훨씬 작습니다. 이 메모리 덤프에는 할당되지 않은 메모리나 사용자 모드 응용 프로그램에 할당된 메모리가 포함되지 않으므로 분석 범위를 좁힐 수 있습니다.
> Small 메모리 덤프
이름에서 알 수 있듯이 Windows 크래시 덤프에서 생성할 수 있는 가장 작은 메모리 덤프 파일입니다.
이 메모리 파일에는 다음 내용이 포함됩니다.
• 버그 확인 메시지와 매개변수, 기타 블루스크린 데이터
• 충돌이 발생한 프로세서에 대한 프로세서 컨텍스트(PRCB)
• 충돌이 발생한 프로세스에 대한 프로세스 정보 및 커널 컨텍스트(EPROCESS)
• 충돌이 발생한 스레드에 대한 스레드 정보 및 커널 컨텍스트(ETHREAD)
• 충돌이 발생한 스레드에 대한 커널 모드 호출 스택. 16KB보다 길면 최상위 16KB만 포함
• 로드된 드라이버 목록

크래시 덤프가 생성될 수 있는 이유는 다음과 같습니다.
• Blue Screens
• CrashOnScrollControl
• Debuggers

그러나 위의 모든 방법이 법의학에 적합한 것은 아닙니다.

[Windows hibernation files]
최대 절전 모드는 컴퓨터의 상태를 유지하면서 컴퓨터의 전원을 끄는 것입니다. 최대 절전 모드 시 컴퓨터는 RAM(Random Access Memory)의 내용을 하드 디스크나 기타 비휘발성 저장소에 저장하며, 컴퓨터를 다시 시작하면 최대 절전 모드에 들어가기 전과 똑같은 상태가 됩니다. 컴퓨터에서 최대 절전 모드가 활성화되면 메모리 전체 덤프 내용이 포함된 최대 절전 모드 파일이 시스템 폴더 아래에 생성됩니다.

[Expert witness format]
EnCase 소프트웨어로 메모리를 획득할 때 사용하는 형식입니다. 이 형식은 EnCase 소프트웨어에서 사용하지만, 그 인기로 인해 표준화된 파일 형식 중 하나가 되었습니다. 이 파일 형식은 EnCase 소프트웨어에서 메모리 파일을 분석하기 위해 사용하는 파일 형식이므로 사용할 수 있는 도구는 몇 가지뿐입니다. 조사자는 다음과 같은 EWF 메모리 덤프 분석 방법을 숙지하고 있어야 합니다.
• EWFAddressSpace
• Mounting with EnCase
• Mounting with FTK Imager

[HPAK Format]
HPAK Format은 HBGary 소프트웨어에서 사용하는 파일 형식입니다. HPAK를 사용하면 대상 시스템의 물리적 메모리와 페이지 파일을 동일한 출력 파일에 포함할 수 있습니다. HPAK Format은 독점 형식이므로 HBGary 도구로만 생성할 수 있습니다.

 

[Windows] 메모리 덤프#01
[Windows] 메모리 덤프#02
[Windows] 메모리 덤프#03

'DFIR > Memory Dump' 카테고리의 다른 글

[Windows] 메모리 덤프#03  (0) 2023.09.16
[Windows] 메모리 덤프#02  (0) 2023.09.14
[Windows] 메모리 덤프#01  (1) 2023.09.14
[VMware] 메모리 덤프 파일 생성  (0) 2017.04.05
[Linux] 메모리 덤프(Memory Dump)#01  (0) 2017.03.24

VMware 이미지를 변환하기 전에는 병합이 필요합니다. VMware 이미지 병합은 링크를 참고해주세요.

 

◎ QEMU 을 통한 이미지 변환

QEMU 는?

- 가상화 소프트웨어 가운데 하나입니다.

- Fabrice Bellard 가 만들었으며 x86 이외의 기종을 위해 만들어진 소프트웨어 스택 전체를 가상머신 위에서 실행할 수 있다는 특징이 있습니다.

- 동적 변환기(Portable dynamic translation)를 사용합니다.

- PC 환경을 위한 프로세스 에뮬레이터로 프로세스뿐만 아니라 각종 주변기기까지를 에뮬레이터 합니다.

- 하나의 가상 컴퓨터를 구축해 주는 소프트웨어입니다. vmware, Xen, Virtualbox 와 같은 가상화 솔루션의 하나로 보시면 됩니다.

 

사용자 환경에 따라 리눅스나 윈도우용 QEMU를 설치하면 qemu-img 를 이용하여 이미지를 변환할 수 있습니다.

먼저, qemu-img 를 이용해서 이미지 정보를 확인하고, 생성하는 명령어부터 보겠습니다.

 

[이미지 정보 확인]

# qemu-img info 이미지명

 # qemu-img info image.raw

 

[이미지 생성]

# qemu-img create -f 이미지포맷명 이미지명 이미지크기

 # qemu-img create {-f raw} out.raw 4G

※ 기본포맷이 raw 이기 때문에 생략이 가능합니다.

 

o 이미지 포맷 o

raw : Raw 이미지

vdi : VirtualBox 이미지

vmdk : VMwarw 이미지

※ qemu-img 가 지원하는 이미지 포맷 종류는 더 있으나 여기서는 3가지만 알면 되겠습니다.

 

 # qemu-img create -f vmdk out.vmdk 4G
 또는
 # qemu-img create -f vmdk -o size=4G out.vmdk
 또는
 # qemu-img create -f vdi out.vdi 4G

 

이제 우리가 주로 사용하게 될 이미지를 변환하는 명령어를 보겠습니다.

 

[이미지 변환]

# qemu-img convert {-f 기본포맷} -O 변환포맷 기본이미지명 변환이미지명 {-q} {-p}

※ 기본포맷, -q , -p 옵션은 생략이 가능합니다.

 

o 이미지 포맷 o

raw : Raw 이미지

vdi : VirtualBox 이미지

vmdk : VMwarw 이미지

vhd(x) : HYPER-V 이미지

 # qemu-img convert {-f raw} -O vmdk in.raw out.vmdk
 또는
 # qemu-img convert {-f raw} -O vdi in.raw out.vdi
 또는
 # qemu-img convert {-f vmdk} in.vmdk {-O raw} out.img -p
또는
# qemu-img convert {-f vmdk} -O vhdx in.vmdk out.vhdx

※ VMDK 에서 VDI 는 직접 변환이 불가합니다.

 

-o : compat, backing_file, backing_fmt, encryption, cluster_size, preallocation, lazy_refcounts 등 관련 옵션이 굉장히 많은 듯 싶은데 정확한 설명을 찾아보기가 어렵네요. 특정 옵션의 경우 지원 가능한 포맷이 정해져 있습니다.

-O : 변환될 포맷을 지정합니다.

-p : 진행 상태 바를 표시합니다. (compare, convert, rebase 커맨드 한정) -p 옵션을 지원하지 않는 커맨드의 경우, 진행상황은 프로세스가 SIGUSR1 신호를 받았을 때 보고됩니다.

-q : 침묵 모드로 오류를 제외한 다른 메세지들을 출력하지 않습니다. -q와 -p를 동시에 사용하면 진행 상태 바가 표시되지 않습니다.

 

 Vmdk2Vhd 을 통한 이미지 변환

[이미지 변환]

Vmdk2Vhd는 링크에서 다운받으세요.

다운받은 압축파일을 해제하고 Vmdk2Vhd.exe를 엽니다. VMDK 파일을 선택하는 창이 열립니다.
소스 VMDK 및 대상 VHD를 선택하고 변환을 클릭합니다. 

 

◎ VBoxManage 을 통한 이미지 변환

VirtualBox 설치 시 제공되는 VBoxManage 를 이용해서 이미지를 변황해 보겠습니다.

Raw 이미지를 vmdk로 변환 합니다.

 C:\> VBoxManage convertfromraw in.raw out.vmdk --format VMDK 
 C:\> VBoxManage convertdd in.raw out.vmdk

 

VMDK 에서 VDI 로 직접 변환이 가능합니다.

 C:\> VBoxManage clonehd in.vmdk out.vdi {--format VDI}

※ 기본포맷이 VDI 이기 때문에 생략이 가능합니다.

 

 C:\> VBoxManage convertfromraw in.raw out.vdi --format VDI
 C:\> VBoxManage convertdd in.raw out.vdi

※ Raw 이미지에서 VDI 이미지로 변환도 가능합니다.

 

 C:\> VBoxManage clonehd in.vdi out.raw --format raw
 C:\> VBoxManage internalcommands converttoraw in.vdi out.raw

※ VDI 이미지에서 Raw 이미지로 변환도 가능합니다.

 

[VBoxManage 옵션설명]

VBoxManage clonehd <uuid>|<filename> <outputfile>

[--format VDI|VMDK|VHD|RAW|<other>]

[--variant Standard,Fixed,Split2G,Stream,ESX]

[--existing]

 

o qemu-img 참고사항 o

$ qemu-img --help
qemu-img version 2.0.0, Copyright (c) 2004-2008 Fabrice Bellard
usage: qemu-img command [command options]
QEMU disk image utility


Command syntax:
  check [-q] [-f fmt] [--output=ofmt]  [-r [leaks | all]] filename
  create [-q] [-f fmt] [-o options] filename [size]
  commit [-q] [-f fmt] [-t cache] filename
  compare [-f fmt] [-F fmt] [-p] [-q] [-s] filename1 filename2
  convert [-c] [-p] [-q] [-n] [-f fmt] [-t cache] [-O output_fmt] [-o options] [-s snapshot_id_or_name] [-l snapshot_param] [-S sparse_size] filename [filename2 [...]] output_filename
  info [-f fmt] [--output=ofmt] [--backing-chain] filename
  map [-f fmt] [--output=ofmt] filename
  snapshot [-q] [-l | -a snapshot | -c snapshot | -d snapshot] filename
  rebase [-q] [-f fmt] [-t cache] [-p] [-u] -b backing_file [-F backing_fmt] filename
  resize [-q] filename [+ | -]size
  amend [-q] [-f fmt] -o options filename


Command parameters:
  'filename' is a disk image filename
  'fmt' is the disk image format. It is guessed automatically in most cases
  'cache' is the cache mode used to write the output disk image, the valid
    options are: 'none', 'writeback' (default, except for convert), 'writethrough',
    'directsync' and 'unsafe' (default for convert)
  'size' is the disk image size in bytes. Optional suffixes
    'k' or 'K' (kilobyte, 1024), 'M' (megabyte, 1024k), 'G' (gigabyte, 1024M),
    'T' (terabyte, 1024G), 'P' (petabyte, 1024T) and 'E' (exabyte, 1024P)  are
    supported. 'b' is ignored.
  'output_filename' is the destination disk image filename
  'output_fmt' is the destination format
  'options' is a comma separated list of format specific options in a
    name=value format. Use -o ? for an overview of the options supported by the
    used format
  'snapshot_param' is param used for internal snapshot, format
    is 'snapshot.id=[ID],snapshot.name=[NAME]', or
    '[ID_OR_NAME]'
  'snapshot_id_or_name' is deprecated, use 'snapshot_param'
    instead
  '-c' indicates that target image must be compressed (qcow format only)
  '-u' enables unsafe rebasing. It is assumed that old and new backing file
       match exactly. The image doesn't need a working backing file before
       rebasing in this case (useful for renaming the backing file)
  '-h' with or without a command shows this help and lists the supported formats
  '-p' show progress of command (only certain commands)
  '-q' use Quiet mode - do not print any output (except errors)
  '-S' indicates the consecutive number of bytes (defaults to 4k) that must
       contain only zeros for qemu-img to create a sparse image during
       conversion. If the number of bytes is 0, the source will not be scanned for
       unallocated or zero sectors, and the destination image will always be
       fully allocated
  '--output' takes the format in which the output must be done (human or json)
  '-n' skips the target volume creation (useful if the volume is created
       prior to running qemu-img)


Parameters to check subcommand:
  '-r' tries to repair any inconsistencies that are found during the check.
       '-r leaks' repairs only cluster leaks, whereas '-r all' fixes all
       kinds of errors, with a higher risk of choosing the wrong fix or
       hiding corruption that has already occurred.


Parameters to snapshot subcommand:
  'snapshot' is the name of the snapshot to create, apply or delete
  '-a' applies a snapshot (revert disk to saved state)
  '-c' creates a snapshot
  '-d' deletes a snapshot
  '-l' lists all snapshots in the given image


Parameters to compare subcommand:
  '-f' first image format
  '-F' second image format
  '-s' run in Strict mode - fail on different image size or sector allocation
  
Supported formats: vvfat vpc vmdk vhdx vdi sheepdog sheepdog sheepdog raw host_device file qed qcow2 qcow parallels nbd nbd nbd dmg tftp ftps ftp https http cow cloop bochs blkverify blkdebug

 

+ Recent posts