WinPmem

Digital Forensic Wikipedia
둘러보기로 가기 검색하러 가기

소개

WinPmem은 Michael Cohen의 메모리 획득 도구로써 Windows XP SP2 이상에서 실행 가능하다. 오픈소스이며 현재는 rekall이라는 포렌식 도구에 탑재 되어있다. 다운로드는 웹페이지 (https://github.com/google/rekall/releases) 에서 rekall 전체의 소스코드를 다운로드 할 수 있으며 tools/windows/winpmem에서 winpmem의 소스코드를 확인할 수 있다. tools/linux에서 linux환경의 pmem을 tools/osx에서는 Mac OS 환경의 OSXPmem의 소스코드를 확인할 수 있다. winpmem은 x86(32bit), x64(64bit) 두 머신에서 정상 동작하고 파이썬 스크립트도 지원하며 Volatility와 연동이 가능하다. 일반 모드와는 다르게 별도로 Write 모드가 있는 응용프로그램도 존재한다. 이는 메모리의 특정 주소에 데이터를 쓸 수 있게 한다. winPmem은 1.3 버전 이후로 Windows Crash Dump 포맷을 지원하지 않으며 대신 ELF Core Dump 모드를 지원한다. [그림 1]은 winPmem의 실행화면이다.



[그림 1] WinPmem 실행화면



사용법

WinPmem은 [표 1]과 같이 파일이 구성되어 있다.



[표 1] winPmem 실행프로그램 종류
파일명 설명
winpmem_1.6.0.exe 공식적인 WinPmem 이미징 파일. 메모리 이미징을 위한 32-bit, 64-bit용 드라이버가 자체 내장되어 있다.
winpmem_write_1.6.0.exe 메모리에 쓰기 모드가 가능한 테스트 버전. 이를 이용하여 다른 프로그램에서 메모리에 데이터를 쓸 수 있다.



WinPmem을 구성하는 파일은 공식적인 메모리 이미저인 winpmem_1.6.0.exe과 비공식적인 테스트 모드인 winpmem_write_1.6.0.exe가 있다. 테스트 모드는 메모리에 쓰기 모드를 지원하는 드라이버를 로드하여 다른 프로그램이나 사용자가 직접 메모리에 데이터를 쓸 수 있게 한다. WinPmem의 기본적인 사용법은 [표 2]와 같다.



[표 2] winPmem의 명령어 형식
명령어 비고
winpmem_1.6.0.exe [옵션] [파일명] 관리자 권한의 커맨드창에서 실행



WinPmem은 콘솔에서 원하는 옵션을 선택하여 그에 맞는 모드를 실행할 수 있다. [표 3]는 WinPmem의 옵션을 정리한 표다.



[표 3] winPmem의 옵션
옵션 설명 비고
-l 드라이버를 로드하고 종료한다.
-u 드라이버를 언로드하고 종료한다.
-h 도움말을 출력한다.
-w 메모리에 쓰기모드를 지원한다. winpmem_write_1.6.0.exe에서만 구동 가능.
-0 MmMapIoSpace API를 통해 이미징 한다.
-1 물리 메모리를 직접 이미징 한다. 32비트 운영체제에서 디폴트 값으로 쓰인다.
-2 PTE Remapping [1]을 이용하여 이미징을 한다. 64비트 운영체제에서 디폴트 값으로 쓰인다. 64비트에서만 가능
-3 PTE Remapping을 이용하여 PCI 장치에 매핑되지 않은 예약영역을 추측하여 이미징을 한다. 시스템과 충돌 가능성이 있다. 64비트에서만 가능. vmware에서 불안정. 시스템 충돌 가능성이 있음
-e ELF(Excutable and Linkable Format) 코어 덤프를 한다.



0~3 옵션을 이용하여 raw 포맷의 이미지를 얻을 수 있으며, e 옵션을 이용하여 ELF 포맷의 이미지를 얻을 수 있다. WinPmem은 콘솔에서 동작하므로 netcat을 이용하여 원격지에서 이미지를 받을 수 있도록 지원한다. Windows용 netcat은 http://eternallybored.org/misc/netcat/ 에서 받을 수 있으며 메모리를 이미징하여 이미지를 받을 수신자 측에서 nc -l -p [port] > 파일명.raw를 입력하여 대기한 후, 보낼 송신자 측에서 winpmem_1.6.0.exe [option] - | nc [destination ip] [port]를 입력하여 실행하면 송신자 측에서 수신자 측으로 메모리 이미지를 받을 수 있다. [그림 2]와 [그림 3]은 winPmem을 이용하여 원격지에서 이미지 파일을 받는 예이다.



[그림 2] winPmem 수신측 명령어



[그림 3] winPmem 송신측 명령어



그리고 winPmem의 write 모드를 이용하여 volatility와 같은 프로그램에서 메모리 쓰기를 할 수 있다. winpmem_write_1.6.0.exe의 write 모드를 사용하기 위해서는 관리자 모드로 커맨드 창을 열어 Bcdedit.exe -set TESTSIGNING ON을 입력한 후 “작업을 완료했습니다”라는 메시지를 확인한 후 재부팅을 한다. 그 후 winpmem_write_1.6.0.exe -w -l을 입력하여 드라이버를 로드하여 메모리에 데이터를 쓸 수 있게 된다.

도구기능

winPmem은 4가지의 모드로 메모리를 이미징 할 수 있으며 그 중 옵션 2, 3의 PTE Remapping을 이용한 메모리 이미징은 API 후킹과 같은 안티포렌식 기술에 영향을 받지 않고 이미징 하기 위해 만든 개발자의 독자적인 모드이다. winPmem은 옵션을 통하여 여러 가지 방법을 이용하여 메모리 이미징을 할 수 있다는 장점이있다. 이미징 결과로는 Raw 포맷과 ELF 포맷을 얻을 수 있다.

수사 활용 방안

메모리 획득 도구를 처음 써보는 경우나 메모리에 관한 이해가 부족할 경우 여러 가지 옵션이 있어 혼란울 야기할 수 있다. 현장에서 수사관이 원하는 옵션을 사용하여 메모리 이미징을 할 수 있는 것이 장점이자 단점이다.

주석

  1. PTE Remapping: winPmem 제작자의 안티포렌식 이미징 방법. http://www.sciencedirect.com/science/article/pii/S1742287613000583 참고