메모리 획득 도구

Digital Forensic Wikipedia
DFRC (토론 | 기여)님의 2015년 1월 25일 (일) 17:14 판
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
둘러보기로 가기 검색하러 가기

메모리 획득 도구란 물리 메모리를 첫 페이지부터 마지막 페이지까지 파일 형태로 이미징을 하여 저장을 하고 분석가가 메모리를 획득했을 당시의 시스템을 분석할 수 있도록 하는 도구를 말한다. [표 1]은 메모리 이미지 포맷의 유형에 대한 설명이다.

[표 1] 메모리 이미지의 포맷 유형
포맷 유형 설명
Raw 메모리 이미지 그 자체를 파일로 덤프 시킨 포맷
Windows Crash Dump Windows Crash Dump 포맷은 윈도우 디버거(WinDbg)를 통하여 디버깅을 할 수 있는 파일 포맷이다. 확장자는 dmp이며 블루스크린과 함께 Crash Dump를 생성한다. Windows 환경에서 코어덤프 [1]는 dmp 포맷으로 저장된다. Crash Dump의 종류로 small memory dump, kernel memory dump, complete memory dump가 있지만 통상 Crash Dump는 complete memory dump를 일컫는다.
ELF ELF(Executable and Linking Format)는 실행 가능한 바이너리, 오브젝트, 공유 라이브러리, 코어 덤프에 대한 정규 파일 포맷이며 여러 운영체제를 지원한다. 일반적으로 리눅스 실행파일 포맷으로 알려져 있다. 리눅스 환경에서 코어덤프는 ELF 포맷으로 저장된다.
Mach-O 맥(Mach) 오브젝트 파일이나 실행 가능한 바이너리, 공유 라이브러리 코어 덤프에 대한 Mach 커널 용 파일 포맷. 헤더에 각 메모리 영역의 오프셋과 크기가 위치한다.
LiME 파일의 앞부분에 32 바이트의 헤더가 존재한다.

시그니처는 ‘EMiL’ 이라는 LiME을 거꾸로 배열한 4바이트 문자열이며 32 바이트의 헤더 뒤로는 Raw 포맷 메모리 이미지가 위치한다.



메모리 이미지 포맷의 종류로 물리 메모리 그대로의 Raw 포맷과 윈도우 코어 덤프에 쓰이는 Windows Crash Dump, 여러 운영체제를 지원하는 ELF Core Dump, ELF 포맷과 비슷한 Mac OS용 Mach-O 포맷, 메모리 획득 도구의 자체 포맷인 LiME이 있다.



메모리 획득 도구 기능 분석

메모리 획득 도구의 기능 분석을 위한 종속변인으로 각 도구의 실행가능 운영체제와 메모리 덤프 속도, 획득 가능한 메모리 이미지의 크기, 최대 메모리 사용량에 대한 파악이 필요하다. 메모리 덤프 속도를 비교함으로써 각 운영체제 별 이미징이 가장 빠른 도구를 알 수 있으며, 획득 가능한 이미지의 크기를 분석하여 대용량의 메모리를 에러없이 이미징할 수 있는지 파악할 수 있다. 메모리 획득 도구의 검증은 각 도구의 최대 메모리 사용량을 확인함으로써 대략적인 검증을 할 수 있다. 메모리는 매 시각 디바이스 I/O, 응용 프로그램 등의 수많은 변수 때문에 지속적으로 변하게 되며, 메모리 획득 도구를 실행하는 순간 메모리에 획득 도구가 로드되어 메모리의 무결성이 훼손된다. 이러한 이유 때문에 각 도구가 메모리의 무결성을 훼손하지 않고 모두 같은 이미지를 생성하는 것이 실질적으로 불가능하며 정확한 검증이 어렵다. 하지만 각 메모리 획득 도구가 메모리 페이지를 어느정도 훼손했는가에 대한 검증은 할 수 있다. 메모리 획득 도구를 실행하여 메모리에 도구가 로드될 때의 도구의 크기에 따라 얼마나 많은 메모리 페이지를 훼손시키는지 대략적으로 비교할 수 있다. 예를 들어, 메모리 페이지의 크기가 4KB이고 메모리 획득 도구의 크기가 202KB라고 할 때, 메모리 획득 도구가 실행되면 최소 51 ()개의 메모리 페이지가 훼손되는 것이다. 하지만 이 방법 또한 매 시각 변하는 메모리의 특성과 콘솔 위에서 실행해야 하는 일부 도구가 있어 항상 정확한 수치를 산출할 수 없기 때문에 측정결과를 참고하는 정도로 이해해야 한다. 앞서 설명한 여러 이유로 메모리 획득 도구의 검증은 얼마나 정확한 이미지를 생성했는가에 중점을 두기보다 얼마나 많은 메모리 페이지를 훼손했는가에 중점을 두어 메모리 사용량을 통한 검증을 하도록 한다. 이를 토대로 메모리 획득 도구의 기능 분석 전략은 [표 2]와 같다.



[표 2] 메모리 획득 도구 구축전략
종속변인 세부 설명
메모리 이미징 소요시간 동일한 RAM의 크기로 여러 운영체제와 주요 옵션 별로 메모리를 덤프하여 이미징 시 소요시간을 측정
메모리 사용량 메모리 사용량을 측정하여 메모리의 무결성 훼손 정도를 확인
획득 가능 메모리 크기 대용량의 메모리를 에러없이 획득할 수 있는지 확인



[표 2]를 기준으로 메모리 획득 도구의 기능 분석을 진행하였으며, 메모리 획득 도구의 기능 분석 환경은 [표 3]과 같다.



[표 3] 메모리 획득 도구의 기능 분석 환경
시스템 환경
CPU RAM VMware 버전
Intel i5 750 (2.67GHz) 12 GB 10.0.1 build-1379776



각 도구의 기능 분석은 VMware에 운영체제를 설치하여 분석을 하였으며, 메모리 이미징 시 소요시간을 비교하기 위해 VMware상 각 운영체제의 RAM 크기는 2GB로 설정하였다. [표 4]는 메모리 획득 도구의 VMware 운영체제 환경이다.



[표 4] 메모리 획득 도구 구축전략
운영체제 종류 운영체제 버전 RAM
Windows Windows XP Professional 32-bit 2 GB
Windows 7 EnterpriseK 32-bit
Windows 7 EnterpriseK 64-bit
Linux Ubuntu 10.04.4 Lucid Lynx 32-bit
Ubuntu 10.04.4 Lucid Lynx 64-bit
Mac OS Mac OS X 10.8.1 Mountain Lion 64-bit



Dumpit, WinPmem, Windows Memory Reader, FTK Imager, Encase Imager는 Windows 환경에서 실험하였으며 Fmem, LiME은 Linux 환경에서 실험하였다. OSXPmem과 Mac Memory Reader는 Mac OS X 10.8.1 Mountain Lion에서 실험을 진행하였다. 메모리 분석 도구의 이미징 소요시간을 측정하기 위하여 VMware에서 운영체제를 부팅 후 스냅샷을 찍어두고, 매번 이미징을 할 때마다 스냅샷을 찍은 상태로 되돌아가 초기 환경을 최대한 동일하도록 맞추었다. 2GB의 메모리를 3회 이미징하여 평균 소요시간을 측정하였다. [표 5]는 메모리 획득 도구의 주요 옵션 별 이미징 소요시간 분석 결과이다.



[표 5] 메모리 분석 도구의 이미징 소요시간
운영체제 도구명 옵션 포맷 1차 2차 3차 평균
Win XP DumpIt Default raw 39 38 39 38.7
WinPmem 0 raw 97 88 39 91
1 raw 89 91 84 88
e elf 93 89 84 88.7
Windows Memory Reader Default raw 90 88 80 86
c dmp 79 87 86 84
FTK Imager Default raw 203 59 143 135
Encase Imager Default Ex01 217 183 175 191.7
Win 7 32-bit DumpIt Default raw 18 27 20 21.7
WinPmem 0 raw 38 92 20 50
1 raw 70 72 46 62.7
e elf 75 44 43 54
Windows Memory Reader Default raw 119 101 99 106.3
c dmp 100 98 102 100
FTK Imager Default raw 18 17 19 18
Encase Imager Default Ex01 20 18 19 19
Win 7 64-bit DumpIt Default raw 30 25 26 27
WinPmem 0 raw 57 48 44 49.7
1 raw 45 45 42 44
2 raw 42 43 44 43
3 raw Error Error 49 49
e elf 67 59 48 58
Windows Memory Reader Default raw 41 39 41 40.3
c dmp 41 42 41 41.3
FTK Imager Default raw 128 14 16 52.7
Encase Imager Default Ex01 19 18 20 19
Ubuntu 32-bit Fmem Default raw 42 41 49 44
LiME Default lime 39 38 39 38.7
Ubuntu 64-bit Fmem Default raw 34 39 33 35.3
LiME Default lime 41 46 46 44.3
Mac OS 64-bit OSXPmem Default elf 61 61 62 61.3
raw raw 47 61 59 55.7
mach Mach-O 59 64 59 60.7
Mac Memory Reader Default Mach-O Error Error Error -



WinPmem의 –2 옵션과 –3 옵션은 64-bit 모드에서만 구동 가능하므로 Windows 7 64-bit 환경에서만 분석하였다. WinPmem의 –3 옵션은 VMware의 Win7 64-bit 환경에서 동작 시 VMware 전체가 멈추는 프리징현상이 있었으며 수차례 반복실험 결과 낮은 확률로 메모리 획득이 가능하였다. Mac Memory Reader는 VMware의 Mac OS X 10.8.1과 10.8.4 환경에서 “Bad Address” 에러를 출력하며 동작하지 않았다. [표 6]은 메모리 획득 도구의 획득 가능한 메모리 크기와 메모리 사용량에 대한 분석 결과이다. VMware 32-bit 환경의 시스템에서 메모리의 크기를 4GB로 설정한 결과 운영체제가 실제 사용 가능한 메모리의 크기가 3GB 이였다. 메모리 사용량은 프로그램 실행 시 최대 메모리 사용량을 분석하여 정리하였다.



[표 6] 획득 가능 메모리와 최대 메모리 사용량 분석결과
운영체제 메모리 크기 실제사용 메모리 도구명 획득 가능 메모리 크기 메모리 사용량
WinXP 4 GB 3 GB DumpIt 3 GB 1608 kb
WinPmem 3 GB 2104 kb
WMR 3 GB 2312 kb
FTK Imager 3 GB 26840 kb
Encase Imager 3 GB 56646 kb
Win 7 32-bit 4 GB 3 GB DumpIt 3 GB 380 kb
WinPmem 3 GB 1404 kb
WMR 3 GB 712 kb
FTK Imager 3 GB 17412 kb
Encase Imager 3 GB 25488 kb
Win 7 64-bit 16 GB DumpIt 16 GB 592 kb
WinPmem Error-3.5 GB 1524 kb
WMR 16 GB 852 kb
9 GB FTK Imager 9 GB 11640 kb
Encase Imager 9 GB 40128 kb
Ubuntu 32-bit 4 GB 3 GB Fmem 3 GB 1736 kb
LiME 3 GB 364 kb
Ubuntu 64-bit 9 GB Fmem Error-3.7 GB 1840 kb
LiME 9 GB 596 kb
Mac OS 64-bit 9 GB OSXPmem 9 GB 928 kb
MMR Error -



WinPmem은 VMware Win7 64-bit 환경에서 메모리 이미지를 3.5GB까지 덤프 중 에러문을 출력하며 중지하였다. Fmem은 Ubuntu 10.04.4 64-bit 환경에서 메모리 이미지를 3.7GB까지 덤프 중 에러문을 출력하며 중지하였다. FTK Imager와 Encase Imager는 타 도구에 비하여 최대 메모리 사용량이 [표 5]의 이미징 소요시간과 [표 6]의 획득 가능한 메모리 크기, 최대 메모리 사용량 분석 결과 Windows 계열은 DumpIt, Linux 계열은 LiME, Mac OS 계열은 OSXPmem이 우수한 성능을 보였다. [그림 1], [그림 2], [그림 3], [그림 4], [그림 5]는 [표 1]과 [표 2]의 내용을 그래프로 표현한 그림이다.



[그림 1] 메모리 획득 도구 이미징 소요시간 비교 (Windows)



[그림 2] 메모리 획득 도구 메모리 사용 영역 (Windows)



[그림 3] 메모리 획득 도구 이미징 소요시간 비교 (Ubuntu)



[그림 4] 메모리 획득 도구 메모리 사용 영역 (Ubuntu)



[그림 5] 이미징 소요시간 및 메모리 사용 영역 (Mac)

주석

  1. 코어덤프: 시스템이 충돌하여 다운됐을 시, 저장되는 메모리 이미지