WinPmem
소개[편집]
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의 실행화면이다.
사용법[편집]
WinPmem은 [표 1]과 같이 파일이 구성되어 있다.
파일명 | 설명 |
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]와 같다.
명령어 | 비고 |
winpmem_1.6.0.exe [옵션] [파일명] | 관리자 권한의 커맨드창에서 실행 |
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을 이용하여 원격지에서 이미지 파일을 받는 예이다.
그리고 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 포맷을 얻을 수 있다.
수사 활용 방안[편집]
메모리 획득 도구를 처음 써보는 경우나 메모리에 관한 이해가 부족할 경우 여러 가지 옵션이 있어 혼란울 야기할 수 있다. 현장에서 수사관이 원하는 옵션을 사용하여 메모리 이미징을 할 수 있는 것이 장점이자 단점이다.
주석[편집]
- ↑ PTE Remapping: winPmem 제작자의 안티포렌식 이미징 방법. http://www.sciencedirect.com/science/article/pii/S1742287613000583 참고