[Tool] Volatility

 

볼라틸리티


(1) Volatility란?

  • 메모리 포렌식에서 메모리 덤프 파일을 분석할 때, 가장 많이 사용되고 있는 도구

  • 오픈 소스 기반으로 CLI 인터페이스를 제공하는 메모리 분석 도구

  • 컴퓨터(노트북)에서 덤프 된 파일을 분석 가능하며, 프로세스 정보와 네트워크 정보 등을 확인할 수 있음

  • 유용 정보들이 자세하게 나오기 때문에 많이 사용

  • 프로세스 덤프 기능을 제공하여 기존 컴퓨터나 노트북에서 실행되고 있던 프로세스 내용 확인 가능

볼라틸리티 도구는 현재 3 베타 버전까지 출시 되었지만, 필자는 2.6 버전대를 많이 사용하였으므로, 2.6 버전 소개 기준이다.

 

그리고 운영체제는 Windows 환경 기준이다.

 

설치 / 참조 사이트 : https://www.volatilityfoundation.org/

 

The Volatility Foundation - Open Source Memory Forensics

The Volatility Foundation is an independent 501(c) (3) non-profit organization that maintains and promotes The Volatility memory forensics framework.

www.volatilityfoundation.org


(2) 메모리 덤프

2-1. 물리 메모리 덤프

  • 하드웨어를 이용한 덤프 : FireWire(IEEE 1394)를 이용한 메모리 덤프

  • 장점 : 악성 프로그램에 영향을 받지 않으며, 빠른 메모리 덤프와 무결성 최소화

  • 단점 : 안전성에 대한 검증이 필요하며, 간혹 시스템 크래시 발생

2-2. 소프트웨어 메모리 덤프

  • DD, MDD, Winen, WIN32(64)DD & DumpIt, Memorize ProDiscovery, HBGary, FastDumpPro etc...

  • 장점 : 추가 장치 불필요, 오픈 소스 및 프리웨어, 사용 제품의 경우 원격 덤프 가능

  • 단점 : 커널 루트킷에 취약, OS 제약, 수집 시 메모리에 흔적 남음

2-3. 크래시 덤프

  • 시스템 유지에 치명적인 영향을 주는 문제가 발생하였을 때, 문제의 원인을 찾기 위해 윈도우가 자동 생성하는 메모리 덤프

  • Blue Screen of Death


(3) 설치 & 사용법

3-1. https://www.volatilityfoundation.org/ 접속

  • Releases > 2.6 선택

  • Volatility 2.6 Windows Standalone Executable (x64) 선택

[그림 1] 볼라틸리티 설치 및 사용 (1)

 

3-2. 파일 압축 풀기

  • 저장 경로 선택

  • zip 파일 압축 풀기

[그림 2] 볼라틸리티 설치 및 사용 (2)

 

3-3. 덤프 파일 폴더 안에 넣기

  • 내가 분석할 덤프 파일(dmp, vmss, vmem 등)을 압축 풀어준 폴더 안에 넣기

[그림 3] 볼라틸리티 설치 및 사용 (3)

 

3-4. cmd 창(명령 프롬프트)  켜기

  • 검색 기능을 이용하여 cmd(명령 프롬프트) 창 켜기

  • 내가 저장한 경로로 이동 (cd 명령어)

[그림 4] 볼라틸리티 설치 및 사용 (4)

 

3-5. 덤프 파일 시스템 정보 확인

  • 사용 방법 1 : volatility_2.6_win64_standalone.exe -f [덤프 파일명] imageinfo 명령어 입력

  • 덤프 파일의 시스템 및 프로파일 정보 확인

[그림 5] 볼라틸리티 설치 및 사용 (5) 

 

추가 내용 설명

  • KDBG : Debugger data block의 Header에 포함된 Signature

  • KPCR : 사용하고 있는 CPU의 정보를 담고 있는 구조체 

 

3-5-1. Image 정보 확인

  • kdbgscan : KDBG 구조체 확인

  • volatility_2.6_win64_standalone.exe --profile=[프로파일명] -f [덤프 파일 경로] kdbgscan > [저장 할 텍스트 파일 이름]

[그림 6] kdbgscan 사용 방법

필자는 이미 덤프 파일이 해당 폴더에 있고, 해당 폴더에 저장할 것이기 때문에 따로 경로를 지정해주지 않았지만, 필요하면 덤프 파일 경로와 저장 할 텍스트 파일 경로를 지정해주어야 한다.

 

 

3-5-2. Image 정보 확인

  • kpcrscan : 사용하고 있는 CPU의 정보를 담고 있는 구조체 

  • volatility_2.6_win64_standalone.exe --profile=[프로파일명] -f [덤프 파일 경로] kpcrscan > [저장 할 텍스트 파일 이름]

[그림 7] kpcrscan 사용 방법

 

덤프 파일 경로와 저장 할 텍스트 파일 경로에 대한 내용은 위 내용인 kdbgscan과 동일하다.


(4) 플러그인

 

이제 본격적으로 볼라틸리티 플러그인을 사용해보고, 내용을 확인해보자.

 

 

4-1. pslist

  • 시스템에서 사용하고 있는 프로세스 리스트 (가상 주소)

  • -P 옵션은 물리적 주소를 확인할 때 사용

  • Offset(V) : 가상 주소

  • Start : Process 시작 시간

  • Exit : Process 종료 시간

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] pslist

 

[그림 8] pslist 사용 방법

 

[그림 9] pslist 정보 확인

 

 

4-2. psscan

  • 이미 종료된(Interactive) 프로세스와 루트킷에 의한 hidden / unlinked 프로세스 확인 가능

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] psscan 

 

[그림 10] psscan 사용 방법

 

[그림 11] psscan 정보 확인

 

 

4-3. pstree

  • hidden / unlinked 프로세스까지 확인 가능

  • 자식 프로세스는 . 을 통해 트리 형태로 보여줌

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] pstree

 

[그림 12] pstree 사용 방법

 

[그림 13] pstree 정보 확인

 

 

4-4. psxview

  • psscan과 pslist 등에서 True나 False로 보여줌

  • 수상한 프로세스를 찾을 때 유용한 플러그인

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] psxview 

 

[그림 14] psxview 사용 방법

 

[그림 15] psxview 정보 확인

 

 

4-5. dlllist

  • Image에서 DLL 리스트를 보여줌

  • -p 옵션을 통해 pid를 넣어주면, 그에 해당하는 dll 리스트 보기도 가능

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] dlllist

 

[그림 16] dlllist 사용 방법

 

[그림 17] dlllist 정보 확인

 

 

4-6. ldrmodules

  • PEB 안의 linkedl list에서 link를 끊는 것을 통해 DLL을 숨기는 DKOM 기법의 경우, VAD(Virtual address Descriptor)에 정보가 남아 있기 때문에 이를 탐지 가능

  • 이 명령어는 unlinked 된 명령어를 출력

  • 해당 명령어 결과에서 Memory Mapping 된 PE 파일이 PEB List에 존재하면 True, 존재하지 않으면 False을 출력

  • -v 또는 -verbose option을 사용하여 모든 Entry의 Full Path를 확인 가능

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] ldrmodules 

 

[그림 18] ldrmodules 사용 방법

 

[그림 19] ldrmodules 정보 확인

 

 

4-7. handles

  • 프로세스에 의해 열린 핸들의 목록을 나타냄

  • 프로세스는 CreateFile 같은 함수를 사용하여 핸들을 획득

  • 그러한 핸들은 CloseHandle 함수가 호출되기 전까지 유효하게 사용

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] handles 

 

[그림 20] handles 사용 방법

 

[그림 21] handles 정보 확인

 

 

4-8. memdump

  • 해당 명령어를 사용해서 프로세스의 다양한 Memory Segment에서 모든 데이터를 추출하여 덤프 파일로 생성

  • 명령어에서 사용하는 ./는 해당 경로에 덤프 파일을 저장한다는 뜻

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] -p [PID] memdump -D ./ 

 

[그림 22] memdump 사용 방법

 

[그림 23] memdump 생성 파일

 

 

4-9. vadwalk

  • VAD tree(Virtual Address Descriptor tree)란 자체 밸런싱 바이너리 트리를 뜻함

  • 이는 특정 노드의 왼쪽은 특정 노드보다 낮은 값의 노드, 오른쪽은 특정 노드보다 높은 값의 노드로 이루어져 있는 트리를 뜻함

  • Windows memory manager에서 프로세스가 할당 받은 메모리를 표현하기 위해 사용

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] -p [PID] vadwalk 

 

[그림 24] vadwalk 사용 방법

 

[그림 25] vadwalk 정보 확인 

 

 

4-10. vadtree

  • vad 노드들을 트리 형태로 보여주는 명령어

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] -p [PID] vadtree

 

[그림 26] vadtree 사용 방법

 

[그림 27] vadtree 정보 확인

 

 

4-11. vadinfo

  • Virtual address의 시작/끝, Tag, Flag, Kernel Memory의 MMVAD 구조체 주소, Memory Protection 등을 보여주는 명령어

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] -p [PID] vadinfo

 

[그림 28] vadinfo 사용 방법

 

[그림 29] vadinfo 정보 확인

 

 

4-12. vaddump

  • 각각의 VAD Segment에 포함된 Data를 dump하는 명령어

  • memdump와는 달리 두 도구에서 dump되는 dmp 파일의 이름이 Memory 주소 영역으로 되어 있음

  • PhysicalOffset이 파일명에 들어가는 이유는 같은 이름을 가진 2개 이상의 프로세스들을 구분하기 위함

  • 명령어에서 사용하는 ./는 해당 디렉토리에 저장한다는 의미

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] -p [PID] vaddump -D ./ 

 

[그림 30] vaddump 사용 방법

 

[그림 31] vaddump 정보 확인

 

 

4-13. modules

  • 시스템에 로드된 커널 드라이버들을 보여주는 명령어

  • 이 명령어는 PsLoadedModuleList가 가리키는 _LDR_DATA_TABLE_ENTRY 구조의 이중 연결 목록을 살펴봄

  • hidden/unliked kernel driver는 출력하지 않음

  • 기본적으로 Virtual Address로 출력하며, Physical Address를 확인하려면 -P 옵션을 추가

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] modules 

 

[그림 32] modules 사용 방법

 

[그림 33] modules 정보 확인

 

 

4-14. modscan

  • 해당 명령어는 실제 메모리에서 풀 태그를 검색하여 LDR_DATA_TABLE_ENTRY 구조를 찾음

  • 이전에 로드 되었던 드라이버, 루트킷에 의해 hidden/unlinked 된 드라이버도 출력

  • Volatility에서는 Physical Address로 출력

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] modscan 

 

[그림 34] modscan 사용 방법

 

[그림 35] modscan 정보 확인

 

 

4-15. moddump

  • 해당 명령어는 커널 드라이버를 파일로 덤프해주는 명령어

  • 이 명령어는 정규 표현식과 Physical Offset을 이용한 필터를 지원

  • 모든 드라이버들을 덤프하고 싶으면 아무런 필터를 적용하지 않으면 됨

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] moddump 

 

[그림 36] moddump 사용 방법

 

[그림 37] moddump 정보 확인

 

 

4-16. ssdt

  • SSDT(System Service Descriptor Table)는 유저 영역과 커널 영역 사이의 주된 인터페이스

  • 과거에는 악성코드가 SSDT 후킹을 시도하곤 했지만, MS사에서 PatchGuard를 발표하면서 지금은 거의 사라진 후킹 방법

  • 해당 명령어는 Native/GUI SSDT의 함수들을 list 시켜주는 명령어

  • ETHREAD 객체를 스캔한 후, 모든 유일한 ETHREAD.Tcb.ServiceTable Pointer들을 모아서 확인하기 때문에 루트킷에 의해 덮어 쓰거나 복사된 SSDT 미탐을 탐지 가능  

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] ssdt

 

[그림 38] ssdt 사용 방법

 

[그림 39] ssdt 정보 확인

 

 

4-17. driverscan

  • 해당 명령어는 메모리의 DRIVER_OBJECT를 스캔하는 명령어

  • 이는 커널 모듈을 찾을 수 있는 또 다른 방법이며, 모든 커널 모듈이 DRIVER_OBJECT와 관련된 것은 아님 

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] driverscan 

 

[그림 40] driverscan 사용 방법

 

[그림 41] driverscan 정보 확인

 

 

4-18. filescan

  • 해당 명령어는 메모리의 FILE_OBJECT를 스캔하는 명령어

  • 이는 루트킷이 디스크 파일을 숨기고, 루트킷이 실제 시스템의 open handle을 숨기는 기능을 하는 API 함수들을 후킹하더라도 open File을 찾을 수 있음

  • FILE_OBJECT와 offset, file name, number of pointers to the object 등을 결과로 출력

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] filescan 

 

[그림 42] filescan 사용 방법

 

[그림 43] filescan 정보 확인

 

 

4-19. mutantscan

  • 해당 명령어는 메모리에서 KMUTANT 객체를 스캔하는 명령어

  • mutant는 윈도우에서 named semaphore를 구현한 것

  • 이것은 악성코드의 단일 복사본이 동시에 실행되도록 하기 위해 악성코드가 사용

  • CID 컬럼은 Process ID가 Thread ID를 보여줌

  • 특정 악성코드 가닥이 사용하는 mutant의 이름을 분석하면, 악성코드가 시스템에서 실행 중인지 즉시 알 수 있음

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] mutantscan

 

[그림 44] mutantscan 사용 방법

 

[그림 45] mutantscan 정보 확인

 

 

4-20. thrdscan

  • 해당 명령어는 메모리의 ETHREAD 객체를 스캔하여 보여주는 명령어

  • ETHREAD는 부모 프로세스를 식별할 수 있는 정보를 가지고 있기 때문에 이는 hidden Process를 찾는데 도움을 줌

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] thrdscan 

 

[그림 46] thrdscan 사용 방법

 

[그림 47] thrdscan 정보 확인

 

 

4-21. threads

  • 해당 명령어는 모든 프로세스를 반복하고, 모든 프로세스의 모든 스레드를 나열하는 명령어

  • 각 쓰레드에 속한 레지스터 정보, 쓰레드 시작 주소와 디스어셈블 코드 등 조사에 관련된 다양한 정보를 제공해주는 명령어

  • ETHREAD 객체 가상 주소, PID, TID, Thread와 관련된 모든 tag(SystemThread, AttachedProcess, HookedSSDT), 생성/종료 시간, 상태, 순서, 시작 주소 등을 확인 가능

  • SSDT base 주소와 각 Service Table, Hook 된 함수도 출력해 줌

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] threads

 

[그림 48] threads 사용 방법 

 

[그림 49] thread 정보 확인

 

 

4-22. netscan

  • 해당 명령어는 Vista, 2008, Windows 7 이미지에서 connections와 socket을 확인할 수 있는 명령어

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] netscan 

 

[그림 50] netscan 사용 방법

 

[그림 51] netscan 정보 확인

 

 

4-23. hivescan

  • 해당 명령어는 메모리 덤프로부터 CMHIVEs(Registry hives)의 Physical Address를 찾아주는 명령어

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] hivescan

 

[그림 52] hivescan 사용 방법

 

[그림 53] hivescan 정보 확인

 

 

4-24. hivelist

  • 해당 명령어는 메모리 덤프로부터 Registry hives의 Virtual Address와 Disk상의 절대 경로를 출력해주는 명령어

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] hivelist 

 

[그림 54] hivelist 사용 방법

 

[그림 55] hivelist 정보 확인

 

 

4-25. userassist

  • 해당 명령어는 시스템에서 실행되었던 프로그램의 목록과 실행 횟수, 그리고 마지막 실행 시간 등의 정보를 출력해주는 명령어

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] userassist

 

[그림 56] userassist 사용 방법

 

[그림 57] userassist 정보 확인

 

 

4-26. malfind

  • 해당 명령어는 일반적인 방법이나 툴로 찾아내지 못하는 Code/DLLs를 VAD tag나 Page Permission과 같은 특성에 기반하여 확인 가능

  • malfind의 목적은 일반적인 Method/Tool로는 확인할 수 없는 DLL들을 찾는 것

  • CreateRemoteThread > LoadLibrary를 이용하여 삽입된 DLL은 hidden 상태가 아니므로 dlllist 명령어를 사용해서 확인 필요

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] -p [PID] malfind 

 

[그림 58] malfind 사용 방법

 

[그림 59] malfind 정보 확인

 

 

4-27. svcscan

  • 해당 명령어는 메모리에 어떤 서비스가 등록되었는지 확인하는 명령어

  • 각 윈도우 서비스에 대한 프로세스 ID와 서비스 이름, 서비스 타임, 서비스의 현재 상태 등을 확인 가능

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] svcscan

 

[그림 60] svcscan 사용 방법

 

[그림 61] svcscan 정보 확인

 

 

4-28. callbacks

  • 해당 명령어는 다양한 소스들로부터 설치된 콜백 루틴들을 단순히 열거하는 명령어

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] callbacks

 

[그림 62] callbacks 사용 방법

 

[그림 63] callbacks 정보 확인

 

 

4-29. driverirp

  • IRP Major Function Table을 보기 위해서 사용하는 명령어

  • 해당 명령어는 드라이버의 IRP Inline Hooking을 감지하기 위한 명령어

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] driverirp

 

[그림 64] driverirp 사용 방법

 

[그림 65] driverirp 정보 확인

 

 

4-30. devicetree

  • _DRIVER_OBJECT.DeviceObject.NextDevice를 통해 드라이버 객체와 장치의 관계를 보여줌

  • _DRIVER_OBJECT.DeviceObject.AttachedDevice를 통해 연결된 장치 관계를 보여줌

  • Windows는 계층화된 Driver Architecture 또는 Driver chain을 사용하므로, 여러 개의 Driver를 검사 또는 IRP에 응답 가능

  • RootKit은 Driver나 Device를 이러한 Chain에 검사 우회의 목적으로 삽입

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] devicetree 

 

[그림 66] devicetree 사용 방법

 

[그림 67] devicetree 정보 확인

 

 

4-31. timers

  • 해당 명령어는 Kernel times(KTIMER)와 관련된 DPC(Deferred Procedure Calls)를 출력해주는 명령어

  • DPC 주소와 KTIMES를 통해 악성코드가 다양한 방법으로 커널 공간에 숨어 있는 것을 빠르게 찾을 수 있음

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] timers

 

[그림 68] timers 사용 방법

 

[그림 69] timers 정보 확인

 

 

4-32. memmap

  • 해당 image에서 할당 된 Memory 주소 Map을 보여줌

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] -p [PID] memmap 

 

[그림 70] memmap 사용 방법

 

[그림 71] memmap 정보 확인

 

 

4-33. getsids

  • Process와 관련된 Security ID를 보여주며, 권한 상승과 같은 의심 부분을 확인 가능

  • 보안 식별자는 [그림 72]와 같음

[그림 72] 보안 식별자

 

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] getsids 

 

[그림 73] getsids 사용 방법

 

[그림 74] getsids 정보 확인

 

 

4-34. verinfo

  • PE 파일에 저장된 정보를 보여주며, 모든 PE 파일들이 버전 정보를 가지고 있지는 않음

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] verinfo 

 

[그림 75] verinfo 사용 방법

 

[그림 76] verinfo 정보 확인

 

 

4-35. procdump

  • 실행 가능한 Process를 덤프

  • 악성코드가 의도적으로 PE Header의 size 필드를 위조 시에도 확인 가능

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] -p [PID] procdump 

 

[그림 77] procdump 사용 방법

 

[그림 78] procdump 정보 확인

 

 

4-36. symlinkscan

  • Symbolic Link 객체 Scan

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] symlinkscan 

 

[그림 79] symlinkscan 사용 방법

 

[그림 80] symlinkscan 정보 확인

 

 

4-37. connscan

  • Pool tag scanning을 통하여 connection 구조체를 찾아 줌

  • 이미 종료된 연결 정보도 찾을 수 있는 장점이 있음

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] connscan 

 

[그림 81] connscan 사용 방법

 

[그림 82] connscan 정보 확인

 

 

4-38. printkey

  • 특정 레지스트리 키의 서브키, 값, 데이터, 데이터 타입 등을 보여줌

  • 레지스트리 하이브의 가상 주소와 디스크 상의 절대 경로 확인 가능

  • 해당 키를 출력하려면 -o [주소값] 옵션을 활용하면 됨

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] printkey

 

[그림 83] printkey 사용 방법

 

[그림 84] printkey 정보 확인

 

 

4-39. consoles

  • 마지막으로 사용한 콘솔 창의 명령어 확인

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] consoles 

 

[그림 85] consoles 사용 방법

 

[그림 86] consoles 정보 확인


(5) 추가 플러그인

 

  • 해당 플러그인들은 실습 덤프 파일로 분석한 결과, 제대로 된 결과가 나오지 않아 참고하기 위한 플러그인

 

5-1. crashinfo

  • 해당 명령어는 Crash dump header 정보를 출력해주는 명령어 

  • Crash dump는 프로그램이 죽었을 때의 메모리 내용이 파일로 남기는 것을 뜻함

  • 이 파일을 분석하면 어떤 프로그램의 오류 때문에 죽었는지 분석 가능

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] crashinfo 

 

[그림 87] crashinfo 사용 방법

 

[그림 88] crashinfo 정보 예시

 

 

5-2. apihooks

  • User-mode 또는 Kernel-mode에서의 API Hooking을 탐지하기 위해서 사용하는 명령어

  • IAT, EAT, Hooking을 찾아낼 수 있음

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] apihooks 

 

[그림 89] apihooks 사용 방법

 

 

5-3. impscan

  • import 된 function에 대한 call을 검색하는 명령어

  • Base address를 지정해주지 않으면 프로세스의 main module 끝까지 검색

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] impscan 

 

[그림 90] impscan 사용 방법

 

[그림 91] impscan 정보 예시

 

 

5-4. volshell

  • WinDBG와 비슷한 인터페이스 제공

  • Memory Image를 대화 형식으로 조사 가능

사용법은 다음과 같다.

 

volatility_2.6_win64_standalone.exe --profile=[프로 파일명] -f [덤프 파일명] volshell 

 

[그림 92] volshell 사용 방법

 

[그림 93] volshell 정보 예시


(6) DKOM을 이용한 프로세스 은닉 기법

  • 커널 오브젝트란 커널에서 관리하는 정보를 담은 데이터 블록

  • 윈도우는 실행 중인 프로세스를 EPROCESS 구조체로 관리하며, 이는 연결 리스트로 이어져 있음

  • EPROCESS 구조체 안에 LIST_ENTRY의 구조체 멤버에서 FLINK와 BLINK를 수정하여 프로세스를 은닉 시킴

[그림 94] DKOM으로 은닉한 프로세스 도식화


(7) Volatility를 사용해 메모리를 분석할 때, 효율적인 분석을 위한 절차

 

[그림 95] Volatility 메모리 분석 절차

 

  • 침해 사고가 발생해 악성코드 감염이 의심되는 시스템에서 생성한 메모리 덤프 파일을 분석하기 위해서는 위와 같은 6단계의 절차를 이용하여 메모리 분석을 진행


# Reference

 

https://www.volatilityfoundation.org/

 

MEMORY ANALYSIS TOOLS BY C-Lab

'Tool' 카테고리의 다른 글

[Tool] 디지털 포렌식 유용 도구 소개 (Digital Forensics Tool)  (0) 2020.05.11
[Tool] FTK Imager  (0) 2020.03.01
[Tool] HxD Editor  (0) 2020.03.01

+ Recent posts