◎ Process Memory : 프로세스 메모리 분석
 > memmap : 해당 Image에서 할당된 Memory 주소 Map을 보여주는 명령어입니다.
  - 정확히 어떤 페이지가 메모리 상주인지 상세한 프로세스 DTB(또는 대기상태나 시스템 프로세스에서 이 플러그인을 쓴다면 커널 DTB)를 보여줍니다. 
  - 페이지의 가상주소, 페이지의 일치하는 물리적 오프셋, 그리고 페이지 사이즈를 보여줍니다. 
  - 맵 정보는 근본적인 주소 공간의 get_available_addresses 방법을 사용해 플러그인으로써 발생됩니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 memmap -p 1111

 

 > memdump : Process의 다양한 Memory Segment에서 모든 Data를 추출하여 dump 하는 명령어입니다.
  - 특정 출력 디렉토리를 설정하려면, --dump-dir=DIR 또는 -D DIR을 사용합니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 memdump -p 1111 -D folder_name/

 

 > procmemdump : 실행 가능한 Process(Slack space 포함)을 dump 하는 명령어입니다.
  - PE header 검증을 하지 않은 체로 dump 하려면 -u 또는 --unsafe를 사용하면 가능합니다.
  - 몇몇 악성코드는 PE 헤더에서 의도적으로 사이즈 필드를 위조해서 메모리 덤핑 툴이 실패하게 만듭니다.
  - 슬랙 공간(Slack space) : 저장 매체의 물리적인 구조와 논리적인 구조의 차이로 발생하는 낭비 공간. 물리적으로 할당된 공간이지만 논리적으로는 사용할 수 없는 공간을 말합니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 procmemdump -p 1111 -D folder_name/

 

 > procexedump : 실행 가능한 Process(Slack space 미포함)을 dump 하는 명령어입니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 procexecdump -p 1111 -D folder_name/

 

 > vadinfo : 프로세스의 VAD 노드들에 대한 확장된 정보를 보여주기 위한 명령어로 아래와 같은 정보를 보여줍니다.
  - VAD(Virtual Address Descriptor) : 프로세스 주소 공간에서 가상 주소가 예약되어 있는지 여부를 추적할 수 있게 관리하는 데이터 구조체 집합입니다.
  - 커널 메모리에서 MMVAD 구조체 주소
  - MMVAD(Memory Manager Virtual Address Descriptors) : 메모리 관리자 가상 주소 설명 자라는 이진트리 항목
  - 윈도우 메모리 관리자(Windows Memory Manager)는 실제 메모리에 액세스 하기 전 각 프로세스(프로세스 관리자가 프로세스를 관리하기 위해 필요한 정보를 포함하는 EPROCESS 구조)의 가상 주소 공간에 액세스 하기 위한 정보를 이진트리(MMVAD 구조로 메모리 세그먼트의 가상 메모리 기본 주소 및 크기와 같은 MM 관련 정보 포함) 형태로 관리합니다.
  - MMVAD 구조가 적용되는 프로세스 메모리에서의 시작과 끝 지점의 가상주소(Virtual Address)
  - VAD 태그
  - VAD 플래그와 컨트롤 플래그 등
  - 매핑된 메모리(memory map File)의 이름(존재할 경우)
  - 커널 메모리(Kernel Memory)의 MMVAD 구조체 주소
  - Memory Protection(only original protection) : PAGE_NOACCESS 로 메모리 할당 시 보호를 하였다 하더라도, 이것이 현재 메모리 상태를 나타내는 것이 아닐 수 도 있습니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 vadinfo -p 1111

 

 > vadwalk : VAD nodes 들을 보여주는 명령어입니다.
  - VAD tree(Virtual Address Descriptor tree) : 자체 밸런싱 바이너리 트리를 말하며 특정 노드의 왼쪽은 특정 노드보다 낮은 값의 노드, 오른쪽은 특정 노드보다 높은 값의 노드로 이루어져 있는 트리를 말합니다. Windows memory manager에서 프로세스가 할당받은 메모리를 표현하기 위해 사용됩니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 vadwalk -p 1111

 

 > vadtree : VAD nodes 들을 Tree 형태로 보여주는 명령어입니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 vadtree -p 1111

 

 > vaddump : memdump 와 유사한 명령어로서, 각각의 VAD Segment에서 포함된 Data를 dump 하는 명령어입니다.
  - memdump 와는 달리 dump 되는 dmp File 의 이름이 Memory 주소 영역으로 되어 있습니다.
  - 해당 File 명은 ProcessName.PhysicialOffset.StartingVPN.EndingVPN.dmp 와 같은 포맷으로 되어 있습니다.
  - PhysicalOffset 이 File 명에 들어가는 이유는 같은 이름을 가진 2 개 이상의 Process 들을 구분하기 위해서입니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 vaddump -D folder_name/

 

 > evtlogs : Windows 이벤트 로그 추출 명령어입니다. (XP/2003 only)

 # python vol.py -f image.vmem --profile=Win7SP1x64 evtlogs --dump-dir=folder_name/
 # cat folder_name/appevent.txt

 

Volatility 볼라틸리티 2.1 Plugins - 윈도우#01

◎ Image Identification : 이미지 식별

Volatility 볼라틸리티 2.1 Plugins - 윈도우#02

◎ Processes and DLLs : 프로세스와 DLLs 분석
Volatility 볼라틸리티 2.1 Plugins - 윈도우#03

◎ Process Memory : 프로세스 메모리 분석
Volatility 볼라틸리티 2.1 Plugins - 윈도우#04

◎ Kernel Memory and Objects : 커널 메모리와 오브젝트 분석
Volatility 볼라틸리티 2.1 Plugins - 윈도우#05

◎ Networking : 네트워크 정보
Volatility 볼라틸리티 2.1 Plugins - 윈도우#06

◎ Registry : 단지 Registry data를 추출하는데 도움을 줍니다.
Volatility 볼라틸리티 2.1 Plugins - 윈도우#07

◎ Crash Dumps, Hibernation and Conversion : 크래쉬 덤프, 하이버네이션 정보확인 및 파일변환
Volatility 볼라틸리티 2.1 Plugins - 윈도우#08

◎ Malware and Rootkits : 맬웨어와 루트킷 분석
Volatility 볼라틸리티 2.1 Plugins - 윈도우#09

◎ Miscellaneous : 기타 등등

◎ Processes and DLLs : 프로세스와 DLLs 분석
 > pslist : PsActiveProcessHead가 가리키는 이중 연결 목록(doubly-linked list)을 살펴보고 오프셋, 프로세스 이름, ID, 부모 프로세스 ID(PPID), 쓰레드의 수, 핸들의 수, 프로세스 시작 시간과 종료 시간 등 실행 중인 프로세스 정보를 나열합니다. 다만 프로세스가 은닉되거나 연결이 끊어진 프로세스는 출력해주지 않습니다.

  - doubly-linked list : 노드와 노드가 양방향으로 연결되어 있어 양방향으로 탐색이 가능합니다.

  - Time은 Process의 시작 시간을 의미하며 Thds와 Hnds가 0이면 해당 Process는 활성화 상태가 아님을 뜻합니다

  - System 과 smss.exe 는 세션 ID 를 가지지 않는데 System 은 세션들이 자리 잡기 이전에 시작되고 smss.exe 는 자기 스스로가 세션 관리자이기 때문입니다.
  - Offset은 Virtual address를 기본으로 보여주고 있기 때문에, Physical 주소를 보고 싶다면 -P Option을 주면 가능합니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 pslist -P

 

 > pstree : 부모(Parent) 프로세스와 자식(Child Process) 프로세스 간의 상관 관계를 5642138-마침표(.)를 통하여 트리 형태로 출력해줍니다.
  - pslist 와 유사하며 은닉되거나 연결이 끊긴 프로세스는 출력해주지 않습니다.
  - 자식 프로세스들은 "."(마침표)를 이용하여 Tree 형태로 보여줍니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 pstree

 

 > psscan : 실행 중인 프로세스 정보와 함께 이미 종료된 프로세스 정보를 나열합니다.
  - pslist, pstree 와 유사하지만 풀 태그 스캐닝(pool tag scanning)을 사용하여 프로세스를 출력해줍니다.
  - pool tag scanning : 커널 개체 할당을 찾기 위해 메모리 분석에서 일반적으로 사용되며 높은 정확도를 유지하면서 커널 데이터 구조를 훨씬 빠르게 스캔합니다.
  - 종료된 프로세스(interactive Process)나 비활성화 되어있는 프로세스, 루트 킷에 의해 숨겨(hidden)지거나 연결이 끊긴 프로세스(unlinked Process)들을 찾을 수 있습니다.
  - 프로세스가 이미 종료되었다면, 종료시간(Time exited) 항목에서 종료시간을 볼 수 있습니다.
  - 숨겨진 프로세스(프로세스의 DLL)에 대해서 조사하고 싶다면 해당 프로세스의 물리주소(Offset(P))로 이동하여 EPROCESS 구조체의 물리 오프셋 정보(헤더 시그니처 03 00 58 00 위에 풀태그 시그니처 50 72 6F E3 변조여부)를 확인하면 됩니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 psscan

 

 ※ EPROCESS(Executive Process) 구조체
  - 직접 적인 접근이 가능하며, 커널 모드(Kernel Mode)에서 프로세스 정보를 지닌 구조체입니다.
  - 시스템이 프로세스를 실행하고 관리하기 위한 모든 정보가 들어있습니다.
  - 프로세스가 생성되면 해당 프로세스의 정보를 가지고 있는 EPROCESS 라는 구조체가 커널 메모리에 생성됩니다.
  - 모든 프로세스(Process)는 각자의 EPROCESS 구조체를 하나씩 가지고 자신이 사용하는 쓰레드(Thread)의 개수만큼 ETHREAD 구조체를 가집니다.
  - Process : 메모리에 올라와 실행되고 있는 프로그램을 의미합니다.(Code, Data, Stack, Heap의 구조로 되어 있는 독립된 메모리 영역)
  - Thread : 프로세스가 할당받은 자원을 이용하는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원들을 프로세스 내 쓰레드끼리 공유하면서 실행됩니다.(Stack만 따로 할당받고 Code, Data, Heap 영역은 공유)
  - ETHREAD(Executive Thread Block) : 쓰레드가 속한 포인터와 그 쓰레드가 실행을 시작해야할 루틴의 주소 등과 KTHREAD의 포인터를 가집니다.
  - EPROCESS 와 ETHREAD 내부에는 각각 PCB = KPROCESS, TCB = KTHREAD란 이름의 구조체가 존재합니다.
  - KPROCESS : NULL 동기화 객체와 관련된 디스패처 객체 헤더(DISPATCHER_HEADER), 가상 메모리의 CR3 레지스터 값, 프로세스에 속해 있는 스레드 리스트 헤더, CPU에 대한 종속성(Affinity), 프로세스 우선순위, 프로세스에 서 생성되는 스레드의 기본 실행 시간 값 등과 같은 정보를 저장합니다.
  - PCB(Process Control Block) : DISPATCHER_HEADER, 디렉토리 테이블 주소, KTHREAD 목록, 우선순위, 커널/유저 CPU 시간 등에 대한 정보를 가지고 있습니다.
  - KTHREAD(Kernel Thread Block) : 쓰레드의 스케줄링 및 동기화 정보, 이 쓰레드가 커널 모드에서 실행될 때 사용되는 커널 스택과 TEB 포인터, 스레드 우선순위, 스케줄러에 의해 실행을 준비하고 있는 스레드 리스트, 퀀텀 값등의 정보를 저장합니다.
  - TCB(Thread Control Block) : 쓰레드별를 관리하는 자료구조입니다.
  - PEB(Process Environment Block) : 사용자 모드(User Mode, 빠른 연산 가능)에서 프로세스 실행에 필요한 정보(환경 설정 포인터 값)들을 담고 있으며, BaseAddress, Module List, Heap/Stack 정보가 들어있습니다.
  - TEB(Thread Environment Block) : 쓰레드 식별자, 사용자 모드(User Mode) 스택 및 쓰레드별 데이터를 저장하기 위한 배열을 가지고 있습니다.
  - ActiveProcessLinks : ActiveProcess List를 구성하는 이중 링크드 리스트로 프로세스의 목록을 얻을 수 있습니다. 작업관리자를 열면 보이는 System(PID 4) 프로세스는 윈도우 커널을 의미하며, 언제나 ActiveProcessLink의 첫번째 프로세스가 됩니다.
  - DISPATCHER_HEADER : 프로세스들 사이의 동기화에 필요한구조체이며 메모리 덤프에서 오브젝트를 찾을 때 중요한 역할을 합니다.

 

 > psdispscan : psscan과 비슷하지만 pool tag 대신 DISPATCHER_HEADER를 조사하여 프로세스들을 열거합니다.(only windows xp x86)
  - 명령어라인에 --plugins=contrib/plugins를 꼭 입력해야 합니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 psdispscan

 

 > dlllist : 특정 프로세스에서 로드 한 DLL의 정보를 분석합니다.
  - 특정 프로세스 DLL을 보기 위해서는 -p 또는 -pid 명령어를 통하여 볼 수 있으며 이는 PEB_LDR_DATA의 InLoadOrderModuleList에서 가리키는 LDR_DATA_TABLE_ENTRY(=LDR_MODULE) 구조체들의 이중연결리스트를 지닙니다. DLL들은 한 프로세스에서 LoadLibrary(또는 LdrLoadDll 과 같은 몇몇 파생함수)를 호출할 때 이 리스트에 자동으로 추가되며 FreeLibrary가 호출되거나 레퍼런스 카운트가 0이 될 때까지 제거되지 않습니다.
  - PEB_LDR_DATA : 로드된 모듈에 대한 정보를 제공(InLoadOrderModuleList, InMemoryOrderModuleList, InInitializationOrderModuleList)
  - InLoadOrderModuleList : 메모리에 로드된 순서, InMemoryOrderModuleList : 메모리에 위치한 순서, InInitializationOrderModuleList : 초기화된 순서
  - LDR_DATA_TABLE_ENTRY : 프로세스의 PE Image 정보를 담고있니다.
  - LoadLibrary : 프로세스의 주소 공간에 라이브러리(DLL) 모듈을 로드합니다.
  - LdrLoadDll : LoadLibrary와 같이 프로세스로 DLL을 로드하는 하위 수준의 함수입니다.
  - FreeLibrary : DLL 모듈이 더 이상 필요하지 않은 경우 프로세스의 주소 공간으로부터 DLL 파일을 unload하는 함수입니다.
  - 특정 Process에 대한 Dll list를 보려면 -p 또는 --pid Option을 사용하여 확인이 가능합니다
  - 루트킷에 의해 숨겨지거나 연결이 끊어진 프로세스들의 DLL들을 보기위해서는 psscan 명령어로 물리 주소를 획득하고 --offset=OFFSET 으로 확인합니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 dilllist
 # python vol.py -f image.vmem --profile=Win7SP1x64 dilllist -p 1111
 # python vol.py -f image.vmem --profile=Win7SP1x64 dilllist --pid 1111
 # python vol.py -f image.vmem --profile=Win7SP1x64 dilllist --offset=0x주소(physical
offsets)

 

 > dlldump : 모든 프로세스에서 로드한 DLL을 바이너리 형태로 추출합니다.
  - 특정 출력 디렉토리를 설정하려면, --dump-dir=DIR 또는 -D DIR 을 사용합니다.
  - 특정 프로세스로부터 모든 DLL을 덤프 뜨려면 -p 또는 --pid=PID 을 사용합니다.
  - 프로세스 메모리의 아무위치로부터 PE 를 덤프 뜨려면 --base=BASEADDR 을 사용합니다.
  - 숨겨지거나 연결이 끊어진 프로세스로부터 모든 DLL을 덤프 뜨려면 -o 또는 --offset=OFFSET 을 사용합니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 dlldump -D folder_name/
 # python vol.py -f image.vmem --profile=Win7SP1x64 dlldump --pid 1111 -D folder_name/ --base=0x주소
 # python vol.py -f image.vmem --profile=Win7SP1x64 dlldump -o 0x주소 -D folder_name/ --base=0x주소

 

 > handles : 의심되는 process 분석 시 어떤 경로에 이미지파일이 있는지, 어떤 파일을 이용하는지 등 Image로 부터 열려 있는 handle을 보여주는 명령어입니다. 악성코드 분석에 유용합니다.
  - 특정 Process에 대한 handle만을 출력하고 싶다면, -p 또는 --pid 또는 --physical-offset=OFFSET 을 사용합니다.
  - 특정 type에 대한 handle만을 출력하고 싶다면, -t 또는 --object-type=OBJECTTYPE 을 사용합니다.
  - 결과에 object 이름이 없어 공백으로 나오는 경우를 없애고 싶다면 --silent 를 사용합니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 handles

 

 > getsids : 각 프로세스의 소유자를 표시합니다.
  - SID(Security ID, 보안식별자)들을 보기 위해 getsids 라는 명령어를 사용합니다.
  - 권한 상승과 같은 의심 가는 부분을 확인할 수 있습니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 getsids

 

 > cmdscan : 공격자가 콘솔 쉘(cmd.exe)을 통해 입력한 명령어들을 찾기위해 _COMMAND_HISTORY을 스캐닝하여 아래와 같은 정보를 보여줍니다.
  - 콘솔 호스트 프로세스(csrss.exe 또는 conhost.exe)의 이름
  - 콘솔로 사용되고 있는 어플리케이션의 이름(어떤 프로세스든 cmd.exe 를 사용함)
  - 명령어 히스토리 버퍼들의 위치, 현재 버퍼 카운트, 마지막으로 추가된 명령어, 그리고 마지막으로 보여진 명령어
  - 어플리케이션 프로세스 핸들

 # python vol.py -f image.vmem --profile=Win7SP1x64 cmdscan

 

 > consoles : 공격자가 cmd.exe 에서 입력하거나 백도어를 경유하여 실행되는 명령어들을 찾기위해 _CONSOLE_INFORMATION을 스캐닝하여 아래와 같은 정보를 보여줍니다.
  - 공격자가 입력한 명령을 출력해줄뿐만 아니라, 스크린 버퍼(입력과 출력)를 모두 수집합니다.
  - 원본 콘솔 창 이름과 현재 콘솔 창 이름
  - 첨부된 프로세스들의 pid 와 이름(하나가 아닐 경우 LIST_ENTRY 를 순회하면서 열거합니다)
  - 특정 명령어 실행과 연관된 앨리어스. 예를 들면, 공격자는 "hello" 입력시 실제로는 "cd system"이 실행되는 앨리어스를 등록 할 수 있습니다.
  - cmd.exe 콘솔의 화면 위치

 # python vol.py -f image.vmem --profile=Win7SP1x64 consoles

 

 > envars : 프로세스의 환경변수들을 보여줍니다.
  - CPU 수, 하드웨어 아키텍처, 프로세스의 현재 디렉토리, 임시 디렉토리, 세션 이름, 컴퓨터 이름, 유저 이름 등등을 보여줍니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 envars

 

 > verinfo : PE File에 저장된 정보들을 보여주는 명령어입니다.
  - 모든 PE File들이 version 정보를 가지지 않습니다.
  - 해당 명령어는 -p 와 -o 옵션을 지원합니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 verinfo

 

 > enumfunc : 프로세스들, DLL들, 그리고 커널 드라이브들에서 불러오고 내보내는 함수들을 열거합니다.
  - 풀 스캐너를 이용하려면 -s 옵션을 사용하며, 숨겨진 드라이버들 또는 숨겨진 프로세스들의 함수들을 열거하는데 유용합니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 enumfunc -s

  - 프로세스 메모리의 내보낸 함수들을 보여줍니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 enumfunc -P -E

  - 커널 메모리의 불러온 함수들을 보여줍니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 enumfunc -K -I

 

Volatility 볼라틸리티 2.1 Plugins - 윈도우#01

◎ Image Identification : 이미지 식별

Volatility 볼라틸리티 2.1 Plugins - 윈도우#02

◎ Processes and DLLs : 프로세스와 DLLs 분석
Volatility 볼라틸리티 2.1 Plugins - 윈도우#03

◎ Process Memory : 프로세스 메모리 분석
Volatility 볼라틸리티 2.1 Plugins - 윈도우#04

◎ Kernel Memory and Objects : 커널 메모리와 오브젝트 분석
Volatility 볼라틸리티 2.1 Plugins - 윈도우#05

◎ Networking : 네트워크 정보
Volatility 볼라틸리티 2.1 Plugins - 윈도우#06

◎ Registry : 단지 Registry data를 추출하는데 도움을 줍니다.
Volatility 볼라틸리티 2.1 Plugins - 윈도우#07

◎ Crash Dumps, Hibernation and Conversion : 크래쉬 덤프, 하이버네이션 정보확인 및 파일변환
Volatility 볼라틸리티 2.1 Plugins - 윈도우#08

◎ Malware and Rootkits : 맬웨어와 루트킷 분석
Volatility 볼라틸리티 2.1 Plugins - 윈도우#09

◎ Miscellaneous : 기타 등등

◎ Image Identification : 이미지 식별
 > imageinfo : 생성한 메모리 덤프 파일의 운영체제와 하드웨어에 대한 프로파일(기본 정보)을 나열합니다.
  - PAE(Physical Address Extension, 물리주소확장) : 4GB 메모리 어드레싱 가능 여부
  - DTB(Directory Table Base) : 가상주소를 물리 주소로 변환하기 위한 디렉터리 테이블의 주소 값

  - KDBG(_KDDEBUGGER_DATA64) : 운영체제의 정보를 가지고 있는 구조체이며, Process 활성화 상태, Handle 오픈 여부, Kernel변수의 Memory 주소 등의 정보를 확인할 수 있습니다. 

  - KDBG(_KDDEBUGGER_DATA64) : 운영체제의 정보를 가지고 있는 구조체이며, Process 활성화 상태, Handle 오픈 여부, Kernel변수의 Memory 주소 등의 정보를 확인할 수 있습니다. 

  - KPCR(Kernel Processor Control Region): CPU의 정보를 가지고 있는 구조체이며, 멀티코어 시스템에서는 각각의 프로세서마다 KPCR을 가지고 있습니다.

  - KUSER_SHARED_DATA : 커널모드와 유저 모드 사이에 공통으로 매핑되어 있는 메모리, 커널단에서는 0 xFFDF0000 주소로, 사용자 영역에서는 0x7FFE0000 주소로 참조 가능한 물리적 페이지 메모리 영역이며, 4 Kbyte 영역 중 1 Kbyte만을 시스템이 사용 중이므로 나머지 3 Kbyte의 공간은 비어있음

 # python vol.py -f image.vmem imageinfo

 

 > kdbgscan : 정확한 프로파일과 커널 디버거 데이터 블록(_KDDEBUGGER_DATA64)의 특징을 찾고 분석합니다.
  - Offset (V) : virtual offsets(offsets : 메모리 주소를 표현하는 방식)
  - Offset (P) : physical offsets
  - KDBG 주소(만약 여러 개가 있다면) 중 0 프로세스, 0 모듈은 유효하지 않음
  - 유효한 KDBG 주소를 pslist플러그인에 '--kdbg=0x주소(virtual offsets)' 로 제공
  - PsActiveProcessHead : 활성화된 프로세스의 헤드 목록에 대한 주소(Pointer to the list head of active processes)
  - PsLoadedModuleList : 로드된 커널 모듈 목록에 대한 주소(Pointer to the list of loaded kernel modules)
  - KDBG 를 통해 OS 정보 식별: 32bit의 경우 8Byte의 0x00으로 시작, 64bit의 경우 0 xfffff800으로 시작
  - KernelBase : 커널주소
  - Major (OptionalHeader) : OS 버전 앞자리
  - Minor (OptionalHeader) : OS 버전 뒷자리
  - Microsoft Windows [Version 6.1.7601]인 경우 => Major : 6, Minor : 1

 # python vol.py -f image.vmem --profile=Win7SP1x64 kdbgscan

 

 > kprcscan : CPU의 정보를 가지고 있는 구조들을 스캔합니다.
  - KdVersionBlock : 커널의 전역 변수로 디버깅 시스템에 대한 버전 정보를 지닌 _DBGKD_GET_VERSION64 구조체의 주소를 가지고 있습니다. 또한 이 구조체의 DebuggerDataList 필드는 _KDDEBUGGER_DATA64 구조체의 Linked list에 포함되어 있습니다.
  - IDT(Interrupt Descriptor Table) : 인터럽트 디스크립터 테이블, CPU에서 트러블이 발생하면, 임시로 처리를 스위칭하는 기능으로 인터럽트 번호는 0~255까지 설정되어 있습니다.
  - GDT(Global segment Descriptor Table) : 글로벌 디스크립터 테이블, 세그먼트는 메모리의 구역을 정확히 나누어서 메모리의 이용 범위를 안 겹치게 하는 방법으로 4GB의 메모리를 분할한 뒤 각 블록의 처음 시작 번지를 0으로 하여 다루는 기능입니다.
  - CurrentThread : 현재 수행중인 쓰레드

  - IdleThread : 유휴 스레드
  - TID(ThreadID) : 운영체제 관점에서 쓰레드의 식별자
  - Details : CPU 벤더, 속도

  - CR3/DTB : CPU의 레지스터 페이지 디렉터리의 시작 위치로 페이지 디렉토리(PD) 혹은 페이지 디렉토리 포인터 테이블(PDPT)을 가리키기 위해 CR3 레지스터가 사용되며, 이 값을 Directory Table Base라 부릅니다. DTB는 _EPROCESS.Pcr.DirectoryTableBase 필드에도 존재

 # python vol.py -f image.vmem --profile=Win7SP1x64 kprcscan

 

Volatility 볼라틸리티 2.1 Plugins - 윈도우#01

◎ Image Identification : 이미지 식별

Volatility 볼라틸리티 2.1 Plugins - 윈도우#02

◎ Processes and DLLs : 프로세스와 DLLs 분석
Volatility 볼라틸리티 2.1 Plugins - 윈도우#03

◎ Process Memory : 프로세스 메모리 분석
Volatility 볼라틸리티 2.1 Plugins - 윈도우#04

◎ Kernel Memory and Objects : 커널 메모리와 오브젝트 분석
Volatility 볼라틸리티 2.1 Plugins - 윈도우#05

◎ Networking : 네트워크 정보
Volatility 볼라틸리티 2.1 Plugins - 윈도우#06

◎ Registry : 단지 Registry data를 추출하는데 도움을 줍니다.
Volatility 볼라틸리티 2.1 Plugins - 윈도우#07

◎ Crash Dumps, Hibernation and Conversion : 크래쉬 덤프, 하이버네이션 정보확인 및 파일변환
Volatility 볼라틸리티 2.1 Plugins - 윈도우#08

◎ Malware and Rootkits : 맬웨어와 루트킷 분석
Volatility 볼라틸리티 2.1 Plugins - 윈도우#09

◎ Miscellaneous : 기타 등등

1. profiles을 생성하기 위해 폴더 이동

 # cd [volatility directory]/tools/linux

설치시 경로를 별도로 지정하지 않았다면 /usr/tools/linux를 확인해 보시기 바랍니다.

 

2. profiles를 생성하기 위해 make 명령어 실행

 # make

make를 진행하면 module.dwarf 파일과 system map file이 생성됩니다.
system map file은 /boot 폴더에 생성되며 현재 커널버전과 동일하게 만들어집니다.


※ profiles 생성 전 확인 사항

# uname -a 

Linux localhost.localdomain 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

 

3. make 명령 실행 후 확인사항

 # ls /boot | grep System
 System.map-3.10.0-693.2.2.el7.x86_64

 

4. profiles를 생성하기 위해 zip 명령어 실행 및 이동

 # zip [profile name 지정] ./module.dwarf /boot/[make 이후 만들어진 system map file]

make 이후 생성된 module.dwarf 파일과 system map file을 zip으로 묶는 작업입니다.
완료되면 해당 파일을 [volatility directory]/volatility/plugins/overlays/linux로 이동합니다.

 

5. zip 파일 확인

 # ls /[volatility directory]/volatility/plugins/overlays/linux | grep .zip
 CentOS7x64.zip

 

6. profiles 확인

 # python ./vol.py --info | grep LinuxCent

 Profiles
 --------
 LinuxCentOS7x64    - A Profile for Linux CentOS7x64 x64

info 명령을 통해 생성한 profiles을 확인합니다.

 

◎ plugins 명령 및 profiles 확인

 # python ./vol.py --info

또는

 # volatility --info

위 명령을 사용하면 지원되는 plugins 명령 및 profiles을 볼 수 있습니다.

Linux 및 MAC OSX 용 plugins에는 'linux_'및 'mac_'접두어가 붙습니다.

이 접두사가없는 plugins은 MS Windows 용으로 설계되었습니다.

profiles은 볼라틸리티가 운영 시스템을 이해하는 데 사용하는 map입니다.

MS Windows profiles은 볼라틸리티에 의해 기본으로 제공됩니다.

기본적으로 제공하지 않는 Linux 및 Mac OSX 용 profiles은 직접 만들어야합니다.


[참조 URL]

https://github.com/volatilityfoundation/profiles

볼라틸리티 profiles는 홈페이지에서 다운로드 받을 수 있습니다.


◎ 명령어 실행 결과

 

Profiles

--------

VistaSP0x64           - A Profile for Windows Vista SP0 x64

VistaSP0x86           - A Profile for Windows Vista SP0 x86

VistaSP1x64           - A Profile for Windows Vista SP1 x64

VistaSP1x86           - A Profile for Windows Vista SP1 x86

VistaSP2x64           - A Profile for Windows Vista SP2 x64

VistaSP2x86           - A Profile for Windows Vista SP2 x86

Win10x64              - A Profile for Windows 10 x64

Win10x64_10586        - A Profile for Windows 10 x64 (10.0.10586.306 / 2016-04-23)

Win10x64_14393        - A Profile for Windows 10 x64 (10.0.14393.0 / 2016-07-16)

Win10x86              - A Profile for Windows 10 x86

Win10x86_10586        - A Profile for Windows 10 x86 (10.0.10586.420 / 2016-05-28)

Win10x86_14393        - A Profile for Windows 10 x86 (10.0.14393.0 / 2016-07-16)

Win2003SP0x86         - A Profile for Windows 2003 SP0 x86

Win2003SP1x64         - A Profile for Windows 2003 SP1 x64

Win2003SP1x86         - A Profile for Windows 2003 SP1 x86

Win2003SP2x64         - A Profile for Windows 2003 SP2 x64

Win2003SP2x86         - A Profile for Windows 2003 SP2 x86

Win2008R2SP0x64       - A Profile for Windows 2008 R2 SP0 x64

Win2008R2SP1x64       - A Profile for Windows 2008 R2 SP1 x64

Win2008R2SP1x64_23418 - A Profile for Windows 2008 R2 SP1 x64 (6.1.7601.23418 / 2016-04-09)

Win2008SP1x64         - A Profile for Windows 2008 SP1 x64

Win2008SP1x86         - A Profile for Windows 2008 SP1 x86

Win2008SP2x64         - A Profile for Windows 2008 SP2 x64

Win2008SP2x86         - A Profile for Windows 2008 SP2 x86

Win2012R2x64          - A Profile for Windows Server 2012 R2 x64

Win2012R2x64_18340    - A Profile for Windows Server 2012 R2 x64 (6.3.9600.18340 / 2016-05-13)

Win2012x64            - A Profile for Windows Server 2012 x64

Win2016x64_14393      - A Profile for Windows Server 2016 x64 (10.0.14393.0 / 2016-07-16)

Win7SP0x64            - A Profile for Windows 7 SP0 x64

Win7SP0x86            - A Profile for Windows 7 SP0 x86

Win7SP1x64            - A Profile for Windows 7 SP1 x64

Win7SP1x64_23418      - A Profile for Windows 7 SP1 x64 (6.1.7601.23418 / 2016-04-09)

Win7SP1x86            - A Profile for Windows 7 SP1 x86

Win7SP1x86_23418      - A Profile for Windows 7 SP1 x86 (6.1.7601.23418 / 2016-04-09)

Win81U1x64            - A Profile for Windows 8.1 Update 1 x64

Win81U1x86            - A Profile for Windows 8.1 Update 1 x86

Win8SP0x64            - A Profile for Windows 8 x64

Win8SP0x86            - A Profile for Windows 8 x86

Win8SP1x64            - A Profile for Windows 8.1 x64

Win8SP1x64_18340      - A Profile for Windows 8.1 x64 (6.3.9600.18340 / 2016-05-13)

Win8SP1x86            - A Profile for Windows 8.1 x86

WinXPSP1x64           - A Profile for Windows XP SP1 x64

WinXPSP2x64           - A Profile for Windows XP SP2 x64

WinXPSP2x86           - A Profile for Windows XP SP2 x86

WinXPSP3x86           - A Profile for Windows XP SP3 x86



Plugins

-------

amcache                    - Print AmCache information

apihooks                   - Detect API hooks in process and kernel memory

atoms                      - Print session and window station atom tables

atomscan                   - Pool scanner for atom tables

auditpol                   - Prints out the Audit Policies from HKLM\SECURITY\Policy\PolAdtEv

bigpools                   - Dump the big page pools using BigPagePoolScanner

bioskbd                    - Reads the keyboard buffer from Real Mode memory

cachedump                  - Dumps cached domain hashes from memory

callbacks                  - Print system-wide notification routines

clipboard                  - Extract the contents of the windows clipboard

cmdline                    - Display process command-line arguments

cmdscan                    - Extract command history by scanning for _COMMAND_HISTORY

connections                - Print list of open connections [Windows XP and 2003 Only]

connscan                   - Pool scanner for tcp connections

consoles                   - Extract command history by scanning for _CONSOLE_INFORMATION

crashinfo                  - Dump crash-dump information

deskscan                   - Poolscaner for tagDESKTOP (desktops)

devicetree                 - Show device tree

dlldump                    - Dump DLLs from a process address space

dlllist                    - Print list of loaded dlls for each process

driverirp                  - Driver IRP hook detection

drivermodule               - Associate driver objects to kernel modules

driverscan                 - Pool scanner for driver objects

dumpcerts                  - Dump RSA private and public SSL keys

dumpfiles                  - Extract memory mapped and cached files

dumpregistry               - Dumps registry files out to disk

editbox                    - Displays information about Edit controls. (Listbox experimental.)

envars                     - Display process environment variables

eventhooks                 - Print details on windows event hooks

evtlogs                    - Extract Windows Event Logs (XP/2003 only)

filescan                   - Pool scanner for file objects

gahti                      - Dump the USER handle type information

gditimers                  - Print installed GDI timers and callbacks

gdt                        - Display Global Descriptor Table

getservicesids             - Get the names of services in the Registry and return Calculated SID

getsids                    - Print the SIDs owning each process

handles                    - Print list of open handles for each process

hashdump                   - Dumps passwords hashes (LM/NTLM) from memory

hibinfo                    - Dump hibernation file information

hivedump                   - Prints out a hive

hivelist                   - Print list of registry hives.

hivescan                   - Pool scanner for registry hives

hpakextract                - Extract physical memory from an HPAK file

hpakinfo                   - Info on an HPAK file

idt                        - Display Interrupt Descriptor Table

iehistory                  - Reconstruct Internet Explorer cache / history

imagecopy                  - Copies a physical address space out as a raw DD image

imageinfo                  - Identify information for the image

impscan                    - Scan for calls to imported functions

joblinks                   - Print process job link information

kdbgscan                   - Search for and dump potential KDBG values

kpcrscan                   - Search for and dump potential KPCR values

ldrmodules                 - Detect unlinked DLLs

limeinfo                   - Dump Lime file format information

linux_apihooks             - Checks for userland apihooks

linux_arp                  - Print the ARP table

linux_aslr_shift           - Automatically detect the Linux ASLR shift

linux_banner               - Prints the Linux banner information

linux_bash                 - Recover bash history from bash process memory

linux_bash_env             - Recover a process' dynamic environment variables

linux_bash_hash            - Recover bash hash table from bash process memory

linux_check_afinfo         - Verifies the operation function pointers of network protocols

linux_check_creds          - Checks if any processes are sharing credential structures

linux_check_evt_arm        - Checks the Exception Vector Table to look for syscall table hooking

linux_check_fop            - Check file operation structures for rootkit modifications

linux_check_idt            - Checks if the IDT has been altered

linux_check_inline_kernel  - Check for inline kernel hooks

linux_check_modules        - Compares module list to sysfs info, if available

linux_check_syscall        - Checks if the system call table has been altered

linux_check_syscall_arm    - Checks if the system call table has been altered

linux_check_tty            - Checks tty devices for hooks

linux_cpuinfo              - Prints info about each active processor

linux_dentry_cache         - Gather files from the dentry cache

linux_dmesg                - Gather dmesg buffer

linux_dump_map             - Writes selected memory mappings to disk

linux_dynamic_env          - Recover a process' dynamic environment variables

linux_elfs                 - Find ELF binaries in process mappings

linux_enumerate_files      - Lists files referenced by the filesystem cache

linux_find_file            - Lists and recovers files from memory

linux_getcwd               - Lists current working directory of each process

linux_hidden_modules       - Carves memory to find hidden kernel modules

linux_ifconfig             - Gathers active interfaces

linux_info_regs            - It's like 'info registers' in GDB. It prints out all the

linux_iomem                - Provides output similar to /proc/iomem

linux_kernel_opened_files  - Lists files that are opened from within the kernel

linux_keyboard_notifiers   - Parses the keyboard notifier call chain

linux_ldrmodules           - Compares the output of proc maps with the list of libraries from libdl

linux_library_list         - Lists libraries loaded into a process

linux_librarydump          - Dumps shared libraries in process memory to disk

linux_list_raw             - List applications with promiscuous sockets

linux_lsmod                - Gather loaded kernel modules

linux_lsof                 - Lists file descriptors and their path

linux_malfind              - Looks for suspicious process mappings

linux_memmap               - Dumps the memory map for linux tasks

linux_moddump              - Extract loaded kernel modules

linux_mount                - Gather mounted fs/devices

linux_mount_cache          - Gather mounted fs/devices from kmem_cache

linux_netfilter            - Lists Netfilter hooks

linux_netscan              - Carves for network connection structures

linux_netstat              - Lists open sockets

linux_pidhashtable         - Enumerates processes through the PID hash table

linux_pkt_queues           - Writes per-process packet queues out to disk

linux_plthook              - Scan ELF binaries' PLT for hooks to non-NEEDED images

linux_proc_maps            - Gathers process memory maps

linux_proc_maps_rb         - Gathers process maps for linux through the mappings red-black tree

linux_procdump             - Dumps a process's executable image to disk

linux_process_hollow       - Checks for signs of process hollowing

linux_psaux                - Gathers processes along with full command line and start time

linux_psenv                - Gathers processes along with their static environment variables

linux_pslist               - Gather active tasks by walking the task_struct->task list

linux_pslist_cache         - Gather tasks from the kmem_cache

linux_psscan               - Scan physical memory for processes

linux_pstree               - Shows the parent/child relationship between processes

linux_psxview              - Find hidden processes with various process listings

linux_recover_filesystem   - Recovers the entire cached file system from memory

linux_route_cache          - Recovers the routing cache from memory

linux_sk_buff_cache        - Recovers packets from the sk_buff kmem_cache

linux_slabinfo             - Mimics /proc/slabinfo on a running machine

linux_strings              - Match physical offsets to virtual addresses (may take a while, VERY verbose)

linux_threads              - Prints threads of processes

linux_tmpfs                - Recovers tmpfs filesystems from memory

linux_truecrypt_passphrase - Recovers cached Truecrypt passphrases

linux_vma_cache            - Gather VMAs from the vm_area_struct cache

linux_volshell             - Shell in the memory image

linux_yarascan             - A shell in the Linux memory image

lsadump                    - Dump (decrypted) LSA secrets from the registry

mac_adium                  - Lists Adium messages

mac_apihooks               - Checks for API hooks in processes

mac_apihooks_kernel        - Checks to see if system call and kernel functions are hooked

mac_arp                    - Prints the arp table

mac_bash                   - Recover bash history from bash process memory

mac_bash_env               - Recover bash's environment variables

mac_bash_hash              - Recover bash hash table from bash process memory

mac_calendar               - Gets calendar events from Calendar.app

mac_check_fop              - Validate File Operation Pointers

mac_check_mig_table        - Lists entires in the kernel's MIG table

mac_check_syscall_shadow   - Looks for shadow system call tables

mac_check_syscalls         - Checks to see if system call table entries are hooked

mac_check_sysctl           - Checks for unknown sysctl handlers

mac_check_trap_table       - Checks to see if mach trap table entries are hooked

mac_compressed_swap        - Prints Mac OS X VM compressor stats and dumps all compressed pages

mac_contacts               - Gets contact names from Contacts.app

mac_dead_procs             - Prints terminated/de-allocated processes

mac_dead_sockets           - Prints terminated/de-allocated network sockets

mac_dead_vnodes            - Lists freed vnode structures

mac_devfs                  - Lists files in the file cache

mac_dmesg                  - Prints the kernel debug buffer

mac_dump_file              - Dumps a specified file

mac_dump_maps              - Dumps memory ranges of process(es), optionally including pages in compressed swap

mac_dyld_maps              - Gets memory maps of processes from dyld data structures

mac_find_aslr_shift        - Find the ASLR shift value for 10.8+ images

mac_get_profile            - Automatically detect Mac profiles

mac_ifconfig               - Lists network interface information for all devices

mac_interest_handlers      - Lists IOKit Interest Handlers

mac_ip_filters             - Reports any hooked IP filters

mac_kernel_classes         - Lists loaded c++ classes in the kernel

mac_kevents                - Show parent/child relationship of processes

mac_keychaindump           - Recovers possbile keychain keys. Use chainbreaker to open related keychain files

mac_ldrmodules             - Compares the output of proc maps with the list of libraries from libdl

mac_librarydump            - Dumps the executable of a process

mac_list_files             - Lists files in the file cache

mac_list_kauth_listeners   - Lists Kauth Scope listeners

mac_list_kauth_scopes      - Lists Kauth Scopes and their status

mac_list_raw               - List applications with promiscuous sockets

mac_list_sessions          - Enumerates sessions

mac_list_zones             - Prints active zones

mac_lsmod                  - Lists loaded kernel modules

mac_lsmod_iokit            - Lists loaded kernel modules through IOkit

mac_lsmod_kext_map         - Lists loaded kernel modules

mac_lsof                   - Lists per-process opened files

mac_machine_info           - Prints machine information about the sample

mac_malfind                - Looks for suspicious process mappings

mac_memdump                - Dump addressable memory pages to a file

mac_moddump                - Writes the specified kernel extension to disk

mac_mount                  - Prints mounted device information

mac_netstat                - Lists active per-process network connections

mac_network_conns          - Lists network connections from kernel network structures

mac_notesapp               - Finds contents of Notes messages

mac_notifiers              - Detects rootkits that add hooks into I/O Kit (e.g. LogKext)

mac_orphan_threads         - Lists threads that don't map back to known modules/processes

mac_pgrp_hash_table        - Walks the process group hash table

mac_pid_hash_table         - Walks the pid hash table

mac_print_boot_cmdline     - Prints kernel boot arguments

mac_proc_maps              - Gets memory maps of processes

mac_procdump               - Dumps the executable of a process

mac_psaux                  - Prints processes with arguments in user land (**argv)

mac_psenv                  - Prints processes with environment in user land (**envp)

mac_pslist                 - List Running Processes

mac_pstree                 - Show parent/child relationship of processes

mac_psxview                - Find hidden processes with various process listings

mac_recover_filesystem     - Recover the cached filesystem

mac_route                  - Prints the routing table

mac_socket_filters         - Reports socket filters

mac_strings                - Match physical offsets to virtual addresses (may take a while, VERY verbose)

mac_tasks                  - List Active Tasks

mac_threads                - List Process Threads

mac_threads_simple         - Lists threads along with their start time and priority

mac_timers                 - Reports timers set by kernel drivers

mac_trustedbsd             - Lists malicious trustedbsd policies

mac_version                - Prints the Mac version

mac_vfsevents              - Lists processes filtering file system events

mac_volshell               - Shell in the memory image

mac_yarascan               - Scan memory for yara signatures

machoinfo                  - Dump Mach-O file format information

malfind                    - Find hidden and injected code

mbrparser                  - Scans for and parses potential Master Boot Records (MBRs)

memdump                    - Dump the addressable memory for a process

memmap                     - Print the memory map

messagehooks               - List desktop and thread window message hooks

mftparser                  - Scans for and parses potential MFT entries

moddump                    - Dump a kernel driver to an executable file sample

modscan                    - Pool scanner for kernel modules

modules                    - Print list of loaded modules

multiscan                  - Scan for various objects at once

mutantscan                 - Pool scanner for mutex objects

netscan                    - Scan a Vista (or later) image for connections and sockets

notepad                    - List currently displayed notepad text

objtypescan                - Scan for Windows object type objects

patcher                    - Patches memory based on page scans

poolpeek                   - Configurable pool scanner plugin

pooltracker                - Show a summary of pool tag usage

printkey                   - Print a registry key, and its subkeys and values

privs                      - Display process privileges

procdump                   - Dump a process to an executable file sample

pslist                     - Print all running processes by following the EPROCESS lists

psscan                     - Pool scanner for process objects

pstree                     - Print process list as a tree

psxview                    - Find hidden processes with various process listings

qemuinfo                   - Dump Qemu information

raw2dmp                    - Converts a physical memory sample to a windbg crash dump

screenshot                 - Save a pseudo-screenshot based on GDI windows

servicediff                - List Windows services (ala Plugx)

sessions                   - List details on _MM_SESSION_SPACE (user logon sessions)

shellbags                  - Prints ShellBags info

shimcache                  - Parses the Application Compatibility Shim Cache registry key

shutdowntime               - Print ShutdownTime of machine from registry

sockets                    - Print list of open sockets

sockscan                   - Pool scanner for tcp socket objects

ssdt                       - Display SSDT entries

strings                    - Match physical offsets to virtual addresses (may take a while, VERY verbose)

svcscan                    - Scan for Windows services

symlinkscan                - Pool scanner for symlink objects

thrdscan                   - Pool scanner for thread objects

threads                    - Investigate _ETHREAD and _KTHREADs

timeliner                  - Creates a timeline from various artifacts in memory

timers                     - Print kernel timers and associated module DPCs

truecryptmaster            - Recover TrueCrypt 7.1a Master Keys

truecryptpassphrase        - TrueCrypt Cached Passphrase Finder

truecryptsummary           - TrueCrypt Summary

unloadedmodules            - Print list of unloaded modules

userassist                 - Print userassist registry keys and information

userhandles                - Dump the USER handle tables

vaddump                    - Dumps out the vad sections to a file

vadinfo                    - Dump the VAD info

vadtree                    - Walk the VAD tree and display in tree format

vadwalk                    - Walk the VAD tree

vboxinfo                   - Dump virtualbox information

verinfo                    - Prints out the version information from PE images

vmwareinfo                 - Dump VMware VMSS/VMSN information

volshell                   - Shell in the memory image

win10cookie                - Find the ObHeaderCookie value for Windows 10

windows                    - Print Desktop Windows (verbose details)

wintree                    - Print Z-Order Desktop Windows Tree

wndscan                    - Pool scanner for window stations

yarascan                   - Scan process or kernel memory with Yara signatures



Address Spaces

--------------

AMD64PagedMemory              - Standard AMD 64-bit address space.

ArmAddressSpace               - Address space for ARM processors

FileAddressSpace              - This is a direct file AS.

HPAKAddressSpace              - This AS supports the HPAK format

IA32PagedMemory               - Standard IA-32 paging address space.

IA32PagedMemoryPae            - This class implements the IA-32 PAE paging address space. It is responsible

LimeAddressSpace              - Address space for Lime

LinuxAMD64PagedMemory         - Linux-specific AMD 64-bit address space.

MachOAddressSpace             - Address space for mach-o files to support atc-ny memory reader

OSXPmemELF                    - This AS supports VirtualBox ELF64 coredump format

QemuCoreDumpElf               - This AS supports Qemu ELF32 and ELF64 coredump format

VMWareAddressSpace            - This AS supports VMware snapshot (VMSS) and saved state (VMSS) files

VMWareMetaAddressSpace        - This AS supports the VMEM format with VMSN/VMSS metadata

VirtualBoxCoreDumpElf64       - This AS supports VirtualBox ELF64 coredump format

Win10AMD64PagedMemory         - Windows 10-specific AMD 64-bit address space.

WindowsAMD64PagedMemory       - Windows-specific AMD 64-bit address space.

WindowsCrashDumpSpace32       - This AS supports windows Crash Dump format

WindowsCrashDumpSpace64       - This AS supports windows Crash Dump format

WindowsCrashDumpSpace64BitMap - This AS supports Windows BitMap Crash Dump format

WindowsHiberFileSpace32       - This is a hibernate address space for windows hibernation files.



Scanner Checks

--------------

CheckPoolSize          - Check pool block size

CheckPoolType          - Check the pool type

KPCRScannerCheck       - Checks the self referential pointers to find KPCRs

MultiPrefixFinderCheck - Checks for multiple strings per page, finishing at the offset

MultiStringFinderCheck - Checks for multiple strings per page

PoolTagCheck           - This scanner checks for the occurance of a pool tag



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

1) 운영체제 분석
- 어떠한 운영체제에서 생성한 Memory Dump인지 분석


2) 프로세스 분석
- 생성한 Memory Dump에서 실행 중이거나 은폐된 Process 및 그와 관련된 정보들을 분석


3) 네트워크 정보
- 생성한 Memory Dump에서 활성화되거나 은폐된 Network 및 그와 관련된 정보를 분석


4) DLL 및 쓰레드 분석
- 특정 Process에서 load한 DLL 정보나 Thread 정보들을 분석


5) String 분석
- 생성한 Memory Dump 전체 또는 Binary 형태로 추출한 Process 및 DLL Memory Dump에서 특정 string 분석


6) 레지스트리 분석
- 생성한 Memory Dump 전체에서 Windows Registry 관련 정보들을 분석

1) Process와 Threads
- 실행 중이거나 종료되었지만 Memory에 남아 있는 정보들 추출


2) Modules와 Libraries
- 실행 중이거나 종료되었던 Process 관련 Modules와 Libraries 정보들 추출


3) Open Files와 Sockes
- 실행 중이거나 종료되었던 파일들과 Network 연결 관련 Socket 정보들 추출


4) Various Data Structures
- Memory에만 존재하는 다양한 Data의 구조 정보들 추출

[Debian 계열의 리눅스]

◎ 커널 헤더 패키지 설치

 # apt-get install linux-headers

※ linux-headers 는 설치시 정확한 패키지명을 지정하라는 메세지가 발생하는데 "uname -r"을 통해 버전을 확인하고 설치를 하면 됩니다.

 

◎ 개발에 필요한 기본 라이브러리와 헤더파일 등을 가지고 있는 패키지 설치

 # apt-get install build-essential

※ Debian 계열에서 make / compile 과 관련된 에러가 발생하면 build-essential 패키지를 설치해주면 됩니다.

 

◎ Dwarfdump 설치

 # apt-get install dwarfdump

dwartdump 를 설치합니다.

 

[Redhat 계열의 리눅스]

◎ 커널 헤더 패키지 설치

 # yum install kernel-devel

또는

 # rpm --install [패키지명]

 

◎ Libdwarf 설치

 # tar xvfz libdwarf-20170416.tar.gz

 # cd dwarf-20170416/libdwarf

 # ./configure

 # make

 # cd ../dwarfdump

 # ./configure

 # make

 # ln -s (dwarf dir)/dwarfdump/dwarfdump /usr/local/bin/dwarfdump

CentOS 의 경우 Libdwarf 를 자동으로 설치할 수 없기 때문에 소스를 다운로드 받아 수동으로 설치해야 합니다.

다운로드 경로 : https://www.prevanders.net/dwarf.html#releases

 

◎ 개발에 필요한 기본 라이브러리와 헤더파일 등을 가지고 있는 패키지 설치

 # yum install elfutils-libelf-devel

 

◎ 종합 

 # yum groupinstall "Development Tools" -y && yum install kernel-devel kernel-headers glibc* binutils elfutils elfutils-devel elfutils-libelf* gcc subversion

 

[공통]

◎ 볼라틸리티(Volatility) 설치

 # cd volatility

 # python ./setup.py install

다운로드 경로 : http://www.volatilityfoundation.org/26

 

◎ vtypes(kernel's data structures : 커널의 데이터 구조) 생성 

 # cd [volatility directory]/tools/linux

 # make

 # head module.dwarf

make를 진행하면 module.dwarf 파일과 system map file 이 생성됩니다.

 

◎ Symbols 가져오기

 # zip /[volatility directory]/volatility/plugins/overlays/linux/[profile name.zip] volatility/tools/linux/module.dwarf /boot/[make  이후 만들어진 system map file]

리눅스용 프로파일은 커널 데이터 구조와 디버그 심볼로 이루어진 압축 파일 형태로 만들면 됩니다. 이는 Volatility 가 커널 데이터 구조와 디버그 심볼을 통해 필요한 정보를 찾고 해석하기 때문입니다. 심볼은 System.map 파일 안에 있으며 /boot 디렉토리에 있습니다.

리눅스용 프로파일 생성은 make 시 생성된 module.dwarf 파일과 심볼 정보를 가지고 있는 System.map 파일을 zip 파일 형태로 압축하면 됩니다. 

 # zip linux_profile_name.zip module.dwarf /boot/system_map _file.map

만약 dwarf 파일이 생성된 폴더에서 zip 작업을 한다면 생성된 파일을

[volatility directory]/volatility/plugins/overlays/linux 디렉토리에 저장해줍니다.

 

 

◎ 프로파일 확인

 # python ./vol.py --info | grep Profile

volatility 의 info 옵션으로 프로파일이 정상적으로 등록되었는지 확인합니다.

 

[참조 URL]

https://github.com/volatilityfoundation/volatility/wiki/Linux

볼라틸리티(Volatility)를 설치해서 정상적으로 사용하려면 다음 3가지가 선행되어야 합니다.

1. 리눅스 프로파일 생성을 위한 유틸 설치

2. 커널 헤더 패키지 설치

3. 개발에 필요한 기본 라이브러리와 헤더파일 등을 가지고 있는 패키지 설치


해당 내용에 대해서 자세히 알아보겠습니다.

[리눅스 프로파일 생성을 위한 유틸]

볼라틸리티(Volatility)를 설치하면 생각보다 기본 프로파일(Profile) 이 적습니다. 때문에 Profile 을 만드는 작업이 필요하며 profile 을 만드는 유틸을 설치해야합니다.

◎ Libdwarf And Dwarfdump 

원래는 DWARF 2/3/4 Debug 포맷을 가지는 것에서 디버깅 정보를 뽑아내는 유틸인데 여기에서는 리눅스 프로파일 생성에 사용됩니다.


◎ libdwarf 란 무엇입니까?

Libdwarf 는 DWARF2, DWARF3, DWARF4 을 사용하여 응용 프로그램의 읽기(쓰기)를 단순화하기위한 C 라이브러리입니다. SGI 의 컴파일러 작성자 및 디버거 작성자의 업무를 단순화하기 위해 1991년 초 SGI (Silicon Graphics, Inc.)에서 작성되었으며 1990년대 중반에 오픈 소스로 제작되었습니다. SGPL 은 LGPL 버전 2.1에 저작권이 있습니다. ELF 오브젝트 파일에서 DWARF2/3/4 정보를 읽는 용도로 다양한 프로젝트에서 사용됩니다. 또한 컴파일러에서 생성 된 DWARF 정보를 작성할 수 있습니다 (최소한 2개의 시스템 제조업체에서 사용하는 기능). 원래의 AT & T DWARF1 (현재는 그대로) 형식은 DWARF2/3/4 와 완전히 다른 방식으로 구현되어 읽을 수 없습니다.


◎ dwarfdump 란 무엇입니까?

Dwarfdump 는 DWARF 정보를 사람이 읽을 수 있는 형식으로 인쇄하기 위해 libdwarf 를 사용하는 응용 프로그램입니다. 또한 오픈 소스이며 SGI 가 저작권을 보유한 GPL 입니다. libdwarf 를 사용하여 DWARF2/3/4 정보를 읽거나 읽을 수있는 텍스트 출력을 제공하는 예제를 제공합니다.


◎ DWARF 란 무엇입니까?

널리 사용되는 표준화된 디버깅 자료 형식입니다. DWARF 는 원래 ELF 파일 형식을 위해 만들어 졌지만, 이것은 목적 파일과 독립적입니다. 이름은 중세 판타지인 "ELF" 같은 것으로서 공식적인 뜻은 없지만 이후에 배크로님(backronym-이미 존재하는 단어에 맞추기 위해 만들어진 약어)인 'Debugging With Attributed Record Formats' 이 제안되었습니다.

DWARF 의 첫 버전은 지나친 저장 공간을 사용하였지만 호환 불가능한 다음 버전인 DWARF-2 는 자료 크기를 줄이기 위해 다양한 인코딩 기법들을 추가하였습니다. DWARF 는 즉시 범용적으로 받아들여지지 않았습니다. 예를 들면 썬 마이크로시스템즈나 리눅스에서 DWARF-2는 1990년대 후반까지도 일반적으로 채택되지 않았습니다.


자유 표준 그룹(Free Standards Group)의 DWARF 워크그룹은 2006년 1월에 DWARF 버전 3을 릴리즈하였습니다. 이것은 C++ 이름공간과 추가적인 컴파일러 최적화 기법들의 지원을 추가하였습니다. DWARF 위원회는 2010년 버전 4를 공개하였으며 개선된 데이터 압축, 최적화된 코드에 대한 더 나은 명세 그리고 C++ 언어의 새로운 특징들을 지원합니다. 


[커널 헤더 패키지]

debian 계열에서는 linux-headers 커널 헤더 패키지를 설치해야하고

redhat 계열에서는 kernel-headers 커널 헤더 패키지를 설치해야합니다.


[개발에 필요한 기본 라이브러리와 헤더파일 등을 가지고 있는 패키지]

debian 계열에서는 build-essential 패키지를 설치해야하고

redhat 계열에서는 elfutils-libelf-devel 패키지를 설치해야합니다.

볼라틸리티(Volatility)는 최초 2006년 컴퓨터 공학자이자 기업가인 아론 월터스(Aaron Walters)에 의해 메모리 포렌식(memory forensics)관련 FATKit 프로젝트에서 출발하여 볼라툴즈 프로젝트(Volatools Project)로 발전했습니다.

그 이후 2007년 아론 월터스에 의해 볼라틸리티 프레임워크(Volatility Framework)개발팀인 볼라틸 시스템즈(http://volatilesystems.blogspot.kr/)가 만들어지고 현재는 아론 월터스가 회장으로 있는 볼러틸리티 재단(Volatility Foundation)의 사고조사 및 멀웨어 분석을 위한 오픈소스(OpenSource) 소프트웨어로 자리잡았습니다.

플러그인(Plugin)을 자신이 직접 만들어 사용이 가능한 이유로 메모리 분석과 관련된 다양한 기능을 가진 공개용 Plugin 파일이 개발되고 있습니다.

또한 침투 테스트(Pentest)를 목적으로 개발된 데비안 기반 운영체제인 칼리 리눅스(Kali Linux, http://www.kali.org/downloads)에도 포함되어 있습니다.

Volatility 는 파이썬(Python) 프로그래밍 언어로 작성되었고 Microsoft Windows, MacOSX 및 Linux 를 지원합니다.(버전 2.6기준)


[지원 포맷 형식]

Volatility 는 다양한 파일 포맷 형식을 지원하고 이러한 포맷 형식 간에 전환이 가능합니다.

  - Raw linear sample (dd)

  - Hibernation file (from Windows 7 and earlier)

  - Crash dump file

  - VirtualBox ELF64 core dump

  - VMware saved state and snapshot files

  - EWF format (E01) 

  - LiME format

  - Mach-O file format

  - QEMU virtual machine dumps

  - Firewire 

  - HPAK (FDPro)


[요구사항]

Python 2.6 또는 이후 버전(3.0 불가).

Web:

http://www.python.org


[관련 홈페이지]

For information or requests, contact:

Volatility Foundation


Web:

http://www.volatilityfoundation.org

http://volatility-labs.blogspot.com

http://volatility.tumblr.com

https://github.com/volatilityfoundation/volatility

+ Recent posts