볼라틸리티(Volatility)는 Volatility Foundation에서 제공하는 파이썬(Python) 스크립트 언어로 제작된 오픈소스(OpenSource) 메모리 포렌식 도구이다.
메모리 포렌식이란 포렌식 도구를 이용하여 분석 대상 시스템의 물리 메모리에서 침해사고와 연관된 정보 또는 증거 자료를 확보하기 위한 분석 행위이다.
최근 침해사고 조사와 악성코드 분석 과정에서 메모리 덤프를 추출하는 경우가 많다. 기존의 디스크 포렌식과 달리 메모리 포렌식에서는 용량은 작지만 많은 정보를 담고 있는 메모리 덤프 파일을 추출하여 조사한다.
메모리 덤프 파일에서 얻을 수 있는 정보는 하드 디스크에서 알 수 없는 현재 프로세스의 생성과 소멸 정보, 레지스트리 정보, 네트워크 연결 정보, 후킹 탐지 기능 등의 정보를 알아낼 수 있다.
볼라틸리티는 이런 정보들을 포함한 플러그인들이 존재한다.
메모리 포렌식 도구에 따라 지원되는 플랫폼과 기능이 다르므로 하나의 도구만 사용하는 것보다 분석 환경에 따라 여러 도구들을 사용하는 것을 추천한다. 하지만, 본 문서에서는 볼라틸리티만 사용한다.
도구 이름 | 인터페이스 | 플랫폼 | 제조사 | 라이센스 |
DumpIt | CLI | Windows | MoonSols | Freeware |
win(32/64)dd | CLI | Windows | MoonSols | Free/Comm |
FastDump Pro | CLI | Windows | HBGary | Commercial |
mdd | CLI | Windows | ManTech | Opensource |
Memorize (For Mac) |
GUI | Windows | Mandiant | Freeware |
FTK Imager (Lite) CLI FTK Imager for Debian, Ubuntu, Fedora, RedHat, Mac OS. |
GUI | Windows | AccessData | Freeware |
WinPmem | CLI | Windows | Michael Cohen | Freeware |
fmem | CLI | Linux | niekt0 | Freeware |
LiME | CLI | Linux | Joe Sylve | Freeware |
Second Look® Linux Memory Acquisition | CLI | Linux | Raytheon Pikewerks | Commercial |
Mac Memory Reader™ | CLI | Macintosh | Mac Marshal™ | Freeware |
OSXPMem | CLI | Macintosh | Michael Cohen | Freeware |
도구 이름 | 인터페이스 | 플랫폼 | 제조사 | 라이센스 |
Redline | GUI | Windows | Mandiant | Freeware |
Volatility | CLI | Anywhere | Volatile Systems | Opensource |
Memorize & Audit Viewer | GUI | Windows | Mandiant | Freeware |
Responder Pro | GUI | Windows | HBGary | Commercial |
Second Look® Linux Memory Analysis | CLI | Linux | Raytheon Pikewerks | Commercial |
Volafox | CLI | Mac OS | n0fate | Opensource |
Volafunx | CLI | FreeBSD | n0fate | Opensource |
볼라틸리티는 학습을 위해 악성코드가 감염된 메모리 덤프 셈플 파일을 제공한다. 샘플 파일을 다운로드해보면 vmem 확장자를 가진다.
vmem 확장자 파일은 VMware 소프트웨어에서 제공하는 게스트 운영체제(Guest Operating System)에 대한 실질적인 가상 페이징 파일(Virtual Paging File)이다.
vmem 확장자 파일 추출 |
VMware 소프트웨어는 악성코드를 실행하고 분석하기 위해 많이 사용한다. 현재 게스트 운영체제가 구동중인 상태의 vmem 확장자 파일(메모리 파일)를 추출하려면 실행 중인 게스트 운영체제를 일시 중지 시키면 vmem 확장자 파일이 생성된다. 여기서 주의할 점은 일시 중지 시키지 않고 종료시키면 vmem 확장자 파일은 생성되지 않는다. 왜냐하면 휘발성 데이터를 저장하고 있기 때문에 종료시키면 사라져버리기 때문이다. 생성된 vmem 확장자 파일을 메모리 포렌식 도구가 설치된 환경으로 복사해서 분석하면 된다. |
볼라틸리티를 이용해 악성코드 감염이 의심되는 분석 대상 시스템에서 생성한 메모리 덤프 파일을 분석하기 위해서는 6단계의 절차를 이용해 분석을 진행한다.
각 단계에서 제공하는 주요 플로그인과 설명을 목록화한 것이다.
분석 단계 | 플러그인 | 설명 |
운영체제 분석 | imageinfo | 메모리 덤프 파일의 하드웨어 정보, 생성시간 나열 |
프로세스 분석 | pslist | 실행중인 프로세스 정보 나열 |
psscan | 실행중인 프로세스와 종료된 프로세스 정보 나열 | |
psxview | pslist, psscan에서 확인한 프로세스 정보를 비교하여 나열(은폐된 프로세스 정보 획득 가능) | |
pstree | 프로세스의 부모와 자식 관계 나열 | |
procexedump | 프로세스의 메모리 영역에서 빈 공간(Slack Space)를 포함하지 않고 바이너리(Binary) 형태로 추출 | |
volshell | Windbg와 비슷한 명령 형식으로 분석 | |
네트워크 분석 | connections | 활성화 상태의 네트워크 연결 정보 나열(Windows XP, Windows Server 2003에서만 동작) |
connscan | 활성화 상태의 네트워크 연결 정보와 이미 종료된 네트워크 연결 정보 나열(Windows XP, Windows Server 2003에서만 동작) | |
netscan | 활성화 상태의 네트워크 연결 정보 나열(Windows Vista, Windows 7, Windows Server 2008에서만 동작) | |
DLL 및 Thread 분석 | dlllist | 특정 프로세스에서 로드 한 DLL 정보 분석 |
ldrmodules | 은폐된 DLL 정보 분석 | |
dlldump | 특정 프로세스에서 로드한 DLL 추출(바이너리 형태) | |
Malfind | 사용자 모드 형태로 은폐되어 있거나 인젝션된 코드 또는 DLL 정보 분석 | |
apihooks | 사용자 및 커널 모드에서 API 후킹 정보 분석 | |
문자열 분석 | yarascan | YARA를 이용하여 사용자 및 커널 모드 메모리 영역에 포함된 바이트 순서, ANSI 및 유니코드 문자열 검색 |
string | 문자열 검색 | |
레지스트리 분석 | printkey | 특정 레지스트리 키에 포함되어 있는 하위 키(Subkeys) 값과 데이터를 검색하여 나열 |
userassist | 메모리 덤프 파일에서 UserAssist 관련 레지스트리 키 정보 추출 |
볼라틸리티로 메모리 분석을 할 파일은 zeus.vmem이다. 해당 파일은 zeus malware에 감염된 컴퓨터에서 메모리 덤프를 한 파일이다.
칼리리눅스로 메모리 덤프 파일을 업로드하고 imageinfo 플러그인을 이용하면 운영체제, 프로세스, 덤프 시간 등의 정보가 확인된다.
psscan, pslist 플러그인을 이용하면 현재 실행중인 프로세스 정보를 확인할 수 있다.
psscan, pslist 플러그인을 비교해주는 것으로 어떤 프로세스가 은닉 기법(DKOM)을 사용했는지 확인할 수 있다.
connscan 플러그인을 이용하면 종료된 네트워크 상태 정보를 확인할 수 있다.
sockscan 플러그인을 이용하면 네트워크 전체 소캣 구조를 확인할 수 있다.