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 참고