◎ Windows hibernation files

자세한 내용은 [Windows] 메모리 덤프 형식(Memory Dump Format) 글에서 확인해주세요.

 

[최대절전모드]

> 1단계

최대절전모드의 시스템메모리는 일반적으로 c:\hiberfil.sys 파일에 저장됩니다. 최대절전모드를 사용 중인지 모르는 상태에서 종료해야된다면, 관리자권한으로 cmd를 실행한 뒤 아래 명령어로 최대절전모드를 켜고, 컴퓨터를 종료하면 됩니다.

 > powercfg /h on
 > shutdown /f /h

• powercfg /h on : powercfg는 전원관리 명령어, /h는 hibernate(최대절전모드), on은 설정 켜기입니다.

• shutdown /f /h : shutdown은 시스템 종료 명령어, /f는 강제종료, /h는 대기모드입니다.

 

> 2단계

저장장치를 분리해서 Linux 컴퓨터에서 hiberfil.sys 파일을 USB에 복사합니다.

 

> 3단계

제작사 홈페이지에서 Comae 툴킷을 다운받아서 Hibr2Bin.exe 이용해 hiberfil.sys 파일을 압축되지 않은 바이너리로 변환합니다.

일반적으로 Windows 10 응용 프로그램의 경우 다음과 같이 실행합니다.

 > Hibr2Bin /PLATFORM X64 /MAJOR 10 /MINOR 0 /INPUT hiberfil.sys /OUTPUT mem.bin

아래는 옵션 설명입니다.

 

> 4단계

이미지를 분석합니다.

 

◎ Expert witness format

EnCase 상용소프트웨어가 필요하기 때문에 생략합니다.

 

◎ HPAK Format

HBGary Responder 상용소프트웨어가 필요하기 때문에 생략합니다.

◎ Windows crach dump

자세한 내용은 [Windows] 메모리 덤프 형식(Memory Dump Format) 글에서 확인해주세요.

 

• Complete 메모리 덤프

• Kernel 메모리 덤프

• Small 메모리 덤프

 

[크래시 덤프 생성 설정]

설정 - 시스템 - 정보로 이동합니다.

고급 시스템 설정을 선택한 다음 고급 탭을 선택합니다.

시작 및 복구 영역에서 설정을 선택합니다.

디버깅 정보 쓰기에서 원하는 덤프 형식을 지정합니다.

덤프파일 위치는 변경가능합니다.

 

[전체 메모리 덤프]

저장위치 : %SystemRoot%\Memory.dmp

 

[커널 메모리 덤프]

저장위치 : %SystemRoot%\Memory.dmp

 

[작은 메모리 덤프]

저장위치 : %SystemRoot%\Minidump 폴더

 

[수동 메모리 덤프 생성 방법]

Microsoft Sysinternals NotMyFault 도구를 사용하여 덤프를 생성할 수 있습니다.

 > notMyfault.exe /crash

 

◎ RAW memory dump

자세한 내용은 [Windows] 메모리 덤프 형식(Memory Dump Format) 글에서 확인해주세요.

 

• Windd

• DumpIt

• Magnet Ram Capture

• Winpmem

• Belkasoft Live RAM Capturer

• FTK Imager

 

[Windd]

Unix 용 dd의 윈도우 버전이라고 보면 되겠습니다. win32dd(win64dd)는 MoonSols 사의 무료 메모리 덤프 툴입니다. 윈도우 XP, Vista 그리고 Win7 x86, x86_64를 지원합니다. 윈도우 10 22H2는 지원하지 않습니다(BSOD 발생).

 

[DumpIt]

win32dd와 win64dd의 기능을 하나로 통합한 MoonSols 사의 무료 메모리 덤프 툴입니다. MoonSols 사의 dumpit은 역시나 윈도우 10 22H2는 지원하지 않습니다(BSOD 발생)만, Comae 사(Magnet Forensics 사에 인수됨)의 dumpit은 윈도우 10 22H2를 지원합니다. 더블클릭하면 메모리덤프 진행여부를 묻고 진행 시 Dumpit이 실행된 폴더에 크래시 덤프 파일을 저장합니다.

제작사 홈페이지에서 다운받을 수 있습니다.

  > MoonSols Dumpit

  > Magnet(Comae) Dumpit

 

[Magnet Ram Capture]

Magnet Forensics 사가 Comae 사를 인수하기 전에 배포한 툴입니다. Comae 사를 인수한 이후 Magnet Forensics 사의 홈페이지에서 Magnet Ram Capture 내용 대신 Dumpit 내용을 보여주고 있습니다.

 

※ MoonSols 사의 홈페이지도 접속이 안되고, MoonSols 사의 Windd와 Dumpit은 왜 업데이트가 안되는건지 궁금해서 만든이(Mathieu Suiche)를 검색해봤습니다.  Mathieu Suiche(1988년 9월 22일 출생)는 프랑스의 해커 이자 기업가로 MoonSols 사의 창립자이자 VMWare 사에 의해 인수되기 전 CloudVolumes 사의 공동 창립자입니다. 이후 Comae 사를 설립하였으며, 회사는 Magnet Forensics 사에 인수되었습니다. 현재는 Magnet Forensics 사의 Incident Response R&D 이사로 재직하고 있습니다.

 

[Winpmem]

Google의 Rekall 프로젝트(오픈소스 메모리분석 프레임워크)에 속해 있다가 현재는 독립한 무료 메모리 덤프 툴입니다. 마지막 릴리즈가 2020년 10월인데 윈도우 10 22H2를 지원합니다. CMD창을 관리자모드로 실행하고 아래 명령어를 입력하면 메모리 덤프를 진행합니다.

 > winpmem_mini_x64_rc2 memdump.raw

Github에서 다운받을 수 있습니다.

 

 

[Belkasoft Live RAM Capturer]

Belkasoft 사의 메모리덤프 툴입니다. 더블클릭으로 메모리 덤프가 가능합니다. 윈도우 10 22H2를 지원합니다.

제작사 홈페이지에서 다운받을 수 있습니다.

 

 

[FTK Imager]

Exterro 사의 메모리덤프 툴입니다. FTK Imager를 설치하고 일반적으로 "C:\Program Files\AccessData\FTK Imager" 폴더를 USB에 복사하면 독립실행이 가능합니다. 메모리덤프를 진행하기 원하는 시스템에 USB를 연결하고 FTK Imager.exe를 더블클릭하면 GUI에서 File - Capture Memory메뉴를 통해 메모리 덤프가 가능합니다. 윈도우 10 22H2를 지원합니다.

제작사 홈페이지에서 다운받을 수 있습니다.

[Memory Dump 란?]
Memory Dump 는 System의 물리 Memory 를 File 형태로 저장하는 방법으로, 해당 File 의 구조는 실제 물리 Memory 구조와 동일합니다. 침해사고 분석 시 침해 시스템에 실시간 분석을 수행하면 해당 명령어로 인해 Memory 의 상태 및 Data 가 변경됩니다. 

이는 Memory 로부터 얻을 수 있는 중요한 정보를 놓칠 수 있는 가능성이 존재하므로 분석에 불리하게 작용할 수 있습니다. 이 같은 실시간 분석의 단점으로 인해 침해사고 시점의 휘발성 Data 를 File 로 간직하여 Memory 에 변화를 주지 않으면서 분석을 하기위해 Memory Dump 를 수행합니다. 

◎ Windows 에서 Memory Dump
Windows 운영체제에서 메모리 덤프는 수집방법에 따라 파일 형식이 달라지지만 일반적으로 사용되는 메모리 덤프형식은 5가지가 있습니다.
• RAW memory dump.
• Windows crash dump.
• Windows hibernation files.(최대 절전 모드 파일)
• Expert witness format (EWF).
• HPAK format.

[RAW memory dump]
RAW 메모리 덤프는 가장 일반적으로 사용되는 메모리 덤프 형식입니다. RAW 메모리 덤프에는 headers, metadata, magic values 이 포함되어 있지 않습니다.

원시 형식에는 일반적으로 의도적으로 건너뛴 메모리 범위(예: 디바이스 메모리)나 수집 도구에서 읽을 수 없는 메모리 범위에 대한 패딩이 포함되어 공간 무결성(데이터 간 상대적 오프셋)을 유지하는 데 도움이 됩니다.

[Windows crach dump]
모든 Windows 운영체제는 컴퓨터 충돌 시 컴퓨터의 상태에 대한 정보를 덤프하도록 구성되어 있습니다. 이러한 크래시 덤프는 _DMP_HEADER 또는 _DMP_HEADER64구조로 시작됩니다.
Windows 크래시 덤프에는 세가지 형식의 메모리 덤프를 사용할 수 있습니다.
> Complete 메모리 덤프
이 메모리 덤프는 the largest kernel-mode 메모리 덤프 파일입니다.  이 메모리 파일에는 실제 메모리에 있던 모든 내용이 포함되어 있습니다. 이 메모리 덤프에는 플랫폼 펌웨어에서 사용하는 물리적 메모리가 포함되어 있지 않습니다.
> Kernel 메모리 덤프
이 커널 모드 메모리 덤프에는 메모리 캡처 시 커널에서 사용된 모든 내용이 포함되어 있습니다. 이 파일에는 커널에서 사용된 콘텐츠만 포함되어 있으므로 이 메모리 덤프는 전체 메모리 덤프보다 훨씬 작습니다. 이 메모리 덤프에는 할당되지 않은 메모리나 사용자 모드 응용 프로그램에 할당된 메모리가 포함되지 않으므로 분석 범위를 좁힐 수 있습니다.
> Small 메모리 덤프
이름에서 알 수 있듯이 Windows 크래시 덤프에서 생성할 수 있는 가장 작은 메모리 덤프 파일입니다.
이 메모리 파일에는 다음 내용이 포함됩니다.
• 버그 확인 메시지와 매개변수, 기타 블루스크린 데이터
• 충돌이 발생한 프로세서에 대한 프로세서 컨텍스트(PRCB)
• 충돌이 발생한 프로세스에 대한 프로세스 정보 및 커널 컨텍스트(EPROCESS)
• 충돌이 발생한 스레드에 대한 스레드 정보 및 커널 컨텍스트(ETHREAD)
• 충돌이 발생한 스레드에 대한 커널 모드 호출 스택. 16KB보다 길면 최상위 16KB만 포함
• 로드된 드라이버 목록

크래시 덤프가 생성될 수 있는 이유는 다음과 같습니다.
• Blue Screens
• CrashOnScrollControl
• Debuggers

그러나 위의 모든 방법이 법의학에 적합한 것은 아닙니다.

[Windows hibernation files]
최대 절전 모드는 컴퓨터의 상태를 유지하면서 컴퓨터의 전원을 끄는 것입니다. 최대 절전 모드 시 컴퓨터는 RAM(Random Access Memory)의 내용을 하드 디스크나 기타 비휘발성 저장소에 저장하며, 컴퓨터를 다시 시작하면 최대 절전 모드에 들어가기 전과 똑같은 상태가 됩니다. 컴퓨터에서 최대 절전 모드가 활성화되면 메모리 전체 덤프 내용이 포함된 최대 절전 모드 파일이 시스템 폴더 아래에 생성됩니다.

[Expert witness format]
EnCase 소프트웨어로 메모리를 획득할 때 사용하는 형식입니다. 이 형식은 EnCase 소프트웨어에서 사용하지만, 그 인기로 인해 표준화된 파일 형식 중 하나가 되었습니다. 이 파일 형식은 EnCase 소프트웨어에서 메모리 파일을 분석하기 위해 사용하는 파일 형식이므로 사용할 수 있는 도구는 몇 가지뿐입니다. 조사자는 다음과 같은 EWF 메모리 덤프 분석 방법을 숙지하고 있어야 합니다.
• EWFAddressSpace
• Mounting with EnCase
• Mounting with FTK Imager

[HPAK Format]
HPAK Format은 HBGary 소프트웨어에서 사용하는 파일 형식입니다. HPAK를 사용하면 대상 시스템의 물리적 메모리와 페이지 파일을 동일한 출력 파일에 포함할 수 있습니다. HPAK Format은 독점 형식이므로 HBGary 도구로만 생성할 수 있습니다.

 

[Windows] 메모리 덤프#01
[Windows] 메모리 덤프#02
[Windows] 메모리 덤프#03

◎ Miscellaneous : 기타 등등
 > strings : <decimal_offset>:<string> line 형식으로 된 주어진 Image와 File에서 해당 문자열을 찾을 수 있는 Process와 Virtual Address를 출력해 주는 명령어입니다.
  - 해당 명령의 입력은 Sysinternals의 Strings Utility 또는 유사한 Tool 들의 출력(offset:string)이며, 입력 Offset 은 File/Image의 시작 지점의 물리 Offset입니다.
  - Sysinternals 의 Strings는 Linux/MAC 에서 Wine을 이용하여 사용 가능하며, 이에 대한 출력은 File 형식으로 Volatility에게 Redirect 되어야 합니다. 
  - GNU 의 Strings 명령어를 사용한다면 -td Option을 통해 Offset을 10 진수로 출력 가능합니다.(GNU strings는 십육진 오프셋 미지원) 
  - File/Image 를 Sysinternals의 Strings Utility를 수행하면 많은 시간이 걸리며, -q와 -o는 Header 출력의 생략(-q)과 각 줄의 Offset(-o)을 구하기 위해 필수적인 Option입니다

 # wine strings.exe -q -o -accepteula image.vmem > image.vmem.txt
 # python vol.py -f image.vmem --profile=Win7SP1x64 strings -s export.txt

  - Default 로 PsActiveProcessHead를 이용해 Double-linked 형태로 Process 들을 출력하며, -S Option을 통해 Hidden Process 들도 출력 가능합니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 strings -s export.txt --output-file=export_strings.txt -S

  - EPROCESS Offset 도 지원해 줍니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 strings -s export.txt --output-file=export_strings.txt -o 0x00000000

 

 > volshell : 메모리 덤프 파일 분석 시에 Windbg와 유사한 명령 형식으로 분석 할 수 있습니다.
 ※ 제공 기능
  - 프로세스들의 목록화(List processes)
  - 프로세스들의 문맥 교환(witch into a process's context)
  - 구조체와 객체들의 형식 출력(Display types of structures/objects)
  - 주어진 주소에 타입 덮어씌우기(Overlay a type over a given address)
  - 링크드 리스트 순회(Walk linked lists)
  - 주어진 주소의 코드 디스어셈(Disassemble code at a given address)
  - db, dd, dt, dis 명령어는 특정 주소 공간을 인자로 전달 가능하며, 사용하는 주소 공간에 따라 다른 결과를 출력하는 것을 확인 가능합니다.

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

 

 > bioskbd : Memory 의 BIOS 영역에서 Key 입력을 읽을 때 사용하는 명령어입니다.
  - Lenovo 의 BIOS와 SafeBoot, TrueCrypt, BitLocker에 입력한 비밀 번호를 확인 가능합니다.
  - 메모리 덤프 툴에 따라서 필요한 BIOS 영역을 포함할 수도 있고 아닐 수도 있습니다.

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

 

 > patcher : Patches memory based on page scans
  - patcher 플러그인을 실행할때, 명령줄에 쓰기 옵션(-w) 지정하지 않으면 수정이 안됩니다.

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

 

 > pagecheck : pagecheck 플러그인은 커널 DTB (System/Idle 프로세스로부터)을 사용하고 페이지들(pages)이 위치하고 있는 메모리(AddressSpage.get_avaliable_pages 메서드를 사용) 정보를 출력하는 명령어입니다.
  - 각 페이지별로 그 페이지 데이터에 접근하는 것을 시도하고 자세하게 결과를 출력합니다. 만약 그 시도한 것이 실패되면 PDE, PTE 주소 정보들도 나타냅니다.
  - 이 플러그인은 기본적으로 지원되지 않고, contrib 디렉터리 안에 위치하고 있으며 non-PAE x86 주소 공간들에서 작동이 됩니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 --plugins=contrib/plugins/ -f pat-2009-11-16.mddramimage pagecheck

 

 > mftparser : 파일이 디스크에 있는지 확인하는 명령어입니다.

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

  - 내용이 상당히 길기 때문에 --output-file 옵션을 사용하여 파일에 저장하는 것이 좋습니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 mftparser --output=body -D folder_name/ --output-file=mft.body
 # cat mft.body

 

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 : 기타 등등

 

◎ Malware and Rootkits : 맬웨어와 루트킷 분석
 > malfind : 사용자 모드 형태로 은폐되어 있거나 인젝션 된 코드 또는 DLL 정보를 분석하는 명령어입니다.
  - VAD 태그와 페이지 권한들 같은 문자들을 기반으로 사용자 모드 메모리에 숨겨져 있거나 삽입되어 있는 코드가 DLLs를 찾아냅니다.
  - CreateRemoteThread -> LoadLibrary로 사용되는 프로세스에 삽입되는 DLLs은 탐지하지 않습니다. 이 기술로 삽입된 DLLs는 숨겨지지  않으며 dlllist에서 이것들을 확인할 수 있습니다. 
  - malfind의 목적은 기본적인 메서드/도구들이 보지 못하는 것을 DLLs의 위치를 찾아내는 것입니다. malfind에 의해 인식되는 메모리 세그먼트의 압축된 복사 파일을 저장하고 싶다면 -D 옵션과 결과가 저장될 dir를 지정해주면 됩니다.

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

 

 > yarascan : YARA를 이용하여, 사용자 및 커널 모드 메모리 영역에 포함된 바이트(Byte) 순서, ANSI 및 유니코드 (Unicode) 문자열 검색하는 명령어입니다.
  - 의심스러운 드라이버(xxx.sys)에 대한 메모리 스캔

 # python vol.py -f image.vmem --profile=Win7SP1x64 yarascan -Y "xxx.sys" --wide

  - YARA 패턴(Rules)을 만들 수 있고, --yara-file=RULESFILE 옵션을 이용하여 명시할 수 있습니다.
  - 프로세스에서 rules.yara 파일 내에 정의되어 있는 문자들을 검색하기 위해서 아래와 같은 명령어를 입력하고, 간단하게 결과를 확인할 수 있습니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 yarascan --yara-file=/path/rules.yara

  - 프로세스에서 간단한 문자를 검색하고, 매칭 되는 문자가 포함되는 메모리 세그먼트들을 덤프 하기 위해서는 아래 명령어를 입력하면 됩니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 yarascan -D dump_files --yara-rules="stringtext"

  - 커널 메모리에서 바이트 패턴을 검색하기 위해서, 아래 명령어를 사용합니다.(kernel driver들에 의해 Load되어 있는 Memory만 탐색)

 # python vol.py -f image.vmem --profile=Win7SP1x64 yarascan --yara-rules="{8B 00 81 38 54 44 4C 33 75 5A}" -K

  - 각 프로세스 안에 있는 byte패턴을 얻기 위한 검색은 아래 예제와 같습니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 yarascan --yara-rules="{eb 90 ff e4 88 32 0d}" --pid=624

  - 각 프로세스 안에 있는 정규 표현식에 대한 검색은 아래 예제와 같습니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 yarascan --yara-rules="/my(regular|expression{0,2})" --pid=624

 

 > svcscan : Memory Image에 등록된 service 목록을 확인할 수 있는 명령어입니다.
  - Process ID, Service name, Service display name, Service type, Current status, Binary path을 확인할 수 있습니다.
  - Binary path의 경우 User-mode service 뿐만 아니라, Kernel-mode에서 사용된 service의 Driver 이름까지도 출력합니다.

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

 

 > ldrmodules : 특정 프로세스나 DLL에 의해 은폐된 DLL 정보 분석하는 명령어입니다.
  - PEB 안의 linked list에서 Unlinking을 통해 DLL을 숨기는 기법의 경우 VAD(Virtual address Descriptor)에 정보(Base address, Full path)가 남아 있기 때문에 탐지가 가능합니다.
  - Unlinked 된 명령어를 출력해 주며, Memory mapping 된 PE File 이 PEB List에 존재하면 1, 하지 않으면 0을 출력해 줍니다.
  - 경로를 덮어쓰기 함으로써 악성코드가 DLL을 숨길 수 있으며, 이는 모든 Entry의 Full path를 보는 -v 또는 --verbose Option을 사용하여 확인할 수 있습니다.

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

 

 > impscan : 코드가 import 하고 있는 함수를 보여줍니다.
  - Impscan은 PE의 IAT(Import Address Table)를 파싱 할 필요 없이 API들을 불러와 정의하며, 만약 악성코드가 완벽하게 PE Header를 지우고 커널 드라이브에서 실행되고 있다면 여기엔 나오지 않을 것입니다.
  - IAT(Import Address Table) :  프로그램에서 사용할 외부 라이브러리가 메모리에 로드되고 난 후, 해당 함수의 주소를 가지고 있는 테이블입니다.
  - 명령어 라인에  -b 또는 -base 옵션으로 탐색 시작 베이스 주소 지정이 가능합니다.(Kernel driver의 Base address 도 지정 가능) 만약 Base address를 지정해 주지 않으면, Process의 main module 끝까지 탐색할 것입니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 malfind -p pid 
 # python vol.py -f image.vmem --profile=Win7SP1x64 -p pid impscan -b [IAT 주소] 

  - 명령어 라인에 -D 옵션으로 modules 명령으로 확인한 base address를 통하여 Rebuild가 가능합니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 modules | grep find_text
 # python vol.py -f image.vmem --profile=Win7SP1x64 impscan -b [IAT 주소] -D folder_name/

 

 > apihooks : 사용자 및 커널 모드에서 API 후킹 정보를 분석하는 명령어입니다.
  - IAT, EAT, Inline Hooking을 찾아낼 수 있습니다.
  - Inline Hooking을 탐지하기 위해서 CALL, JMP Operand 가 직접 또는 간접적으로 위치를 참조하는 것, PUSH/RET 명령어를 탐지하며, ntdll.dll의 syscall이나 Kernel memory의 unknown code page를 호출하는 것을 탐지합니다.
  - Kernel driver의 unknown code page를 CALL 하는 부분도 탐지할 수 있습니다.(cf. tcpip.sys 에 의심스러운 redirection)

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

 ※ hook을 포함하는 Code 추출 가이드
  - malfind 명령어가 자동으로 찾고 추출 가능한지 확인
  - volshell의 dd/db 명령어를 통해 MZ header를 찾은 후, dlldump를 --base 값과 함께 사용하여 추출
  - vaddump 명령어를 통해 모든 Code segment 들을 추출 한 후(File 명은 주소 범위) 해당 범위에 해당하는 Dump File을 찾음.

 

 > idt : System의 IDT(Interrupt Descriptor Table) 현재 주소, Module, Interrupt 목적 등을 보여주는 명령어입니다.
  - IDT(Interrupt Descriptor Table) : 인터럽트가 발생했을 때 처리해주는 함수의 루틴을 포함하고 있는 테이블입니다.
  - Inline Hooking을 탐지하기 위해 IDT Entry 들도 Check 합니다.
  - IDT 변경사항에 대해서 자세한 정보를 얻고 싶다면, --verbose 옵션을 사용합니다.

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

 

 > gdt : System의 GDT(Global Descriptor Table)를 탐지하는 명령어입니다.
  - GDT(Global Descriptor Table) : 커널 모드 메모리 내에 존재하는 구조체입니다.
  -  호출 문(call gate)에 설치된 Alipop 같은 루트킷들을 탐지하는데 유용합니다.
  - 조금 더 많은 조사를 원한다면 volshell을 사용하면 됩니다.

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

 

 > threads : 각 Thread에 속한 Register 정보, Thread 시작 주소의 Disassemble Code 등 조사에 관련된 다양한 정보를 제공해주는 명령어입니다.(Investigate _ETHREAD and _KTHREADs)
- ETHREAD 객체의 가상 주소, pid, tid, Thread와 관련된 모든 tag(SystemThread, AttachedProcess, HookedSSDT), 생성/종료 시간, 상태, 순서, 시작 주소 등을 확인 가능하며 SSDT base 주소와 각 Service Table, Table 안의 Hook 된 함수도 출력해 줍니다.

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

  - 가능한 tags/filters의 리스트 항목을 보고 싶다면, -L 옵션을 사용합니다.

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

  - Default로 모든 Thread에 대한 정보를 제공해 주기 때문에 정렬에 어려움이 있을 것이며, 이 때는 -F Option을 인자에 ", "를 이용하여 여러 개의 Filter를 적용 가능합니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 threads -F AttachedProcess

 

 > callbacks : Rootkit, Anti-virus, Dynamic Analysis, Windows Monitoring Tool 들에 사용됩니다.
  - 중요한 알림 루틴(notification routines)과 커널 콜백(callbacks)의 모음을 출력할 수 있습니다.
 ※ Callbakck 모음
  - PsSetCreateProcessNotifyRoutine(process creation)
  - PsSetCreateThreadNotifyRoutine(thread creation)
  - PsSetImageLoadNotifyRoutine(DLL/image load)
  - IoRegisterFsRegistrationChange(file system registration)
  - KeRegisterBugCheack and KeRegisterBugCheackReasonCallback
  - CmRegisterCallback(registry callbacks on XP)
  - CmRegisterCallbackEx(registry callbacks on Vista and 7)
  - IoRegisterShutdownNotification(shutdown callbacks)
  - DbgSetDebugPrintCallback(debug print callbacks on Vista and 7)
  - DbgkLkmdRegisterCallback(debug callbacks on 7)

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

 

 > driverirp : Driver의 IRP(Major Function) Table을 보기 위해서 사용하는 명령어입니다.
  - 해당 명령어는 driverscan에 속해 있기 때문에 해당 DRIVER_OBJECT 들을 찾을 수 있으며, 이후 함수 Table을 통해 Cycle을 순회하면서 각 함수들의 목적, 주소, 주소의 소유 Module 들을 출력해 줍니다.
  - 해당 명령어는 IRP 함수의 Inline Hooking 탐지를 지원하며 -v 또는 --verbose Option으로 해당 IRP 주소의 명령어들을 Disassemble 하여 제공합니다.
  - 해당 명령어는 특정 정규 표현식을 사용하지 않는 경우 Default로 모든 Driver에 대해 출력해 줍니다

 # python vol.py -f image.vmem --profile=Win7SP1x64 driverirp
 # python vol.py -f image.vmem --profile=Win7SP1x64 driverirp -r vmscsi
 # python vol.py -f image.vmem --profile=Win7SP1x64 driverirp -r vmscsi --verbose

 

 > devicetree : Show device tree
  - 장치(_DRIVER_OBJECT.DeviceObject.NextDevice)를 통해 해당 Driver 또는 Device 들의 관계를 보여주며 첨부된 장치(_DRIVER_OBJECT.DeviceObject.AttachedDevice)를 통해 Attach 된 Device 들을 보여줍니다
  - Driver를 "DRV"로, Device를 "DEV"로 표현하며, Attached Device를 "ATT"로 표현합니다.

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

 

 > psxview : pslist 및 psscan에서 확인한 프로세스 정보를 비교하여 나열함으로써, 은폐된 프로세스를 탐지하는 명령어입니다.
 ※ 비교대상
  - PsActiveProcessHead linked list
  - EPROCESS pool scanning
  - ETHREAD pool scanning(EPROCESS를 참조)
  - PspCidTable
  - Csrss.exe handle table(Vista,7 에서는 불가, 몇몇 XP image에서는 불가)
  - Csrss.exe internal linked list(Vista,7 에서는 불가, 몇몇 XP image에서는 불가)

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

  - 해당 열에 0으로 나타난 것은 Process 가 손실된 것을 나타내며, pslist에서 제외된 것을 통해 수상한 것을 확인할 수 있는데, 각각의 프로세스에서 탐지가 되지 않는다면 칼럼에 “False”라고 표시된다.

 

 > ssdt_ex : Rootkit에 의해 설치된 SSDT hooking에 대한 흔적을 검색해주는 명령어입니다.
  - 자동으로 어떤 SSDT 함수가 Hooking 되었는지 확인해 주며, Hooking kernel driver를 디스크로 추출, IDA Script File 인 IDC File을 Rookit의 함수 Label을 포함하여 생성해 줍니다.
  - idag.exe(Windows), idal(Linux/OS X)가 $PATH에 있으면 IDB 파일을 Kernel driver로부터 생성하여 IDC Script를 실행할 수 있습니다.

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

  - folder_name을 살펴보면 추출된 Kernel Driver(sys 파일), IDC Script(sys.idc 파일), IDA Database(idb 파일)를 확인할 수 있습니다.
  - IDB File을 열어 "Hook" 단어가 앞에 붙은 함수를 유심히 살펴보면 됩니다.

 

 > timers : Installed 된 Kernel times(KTIMER)와 관련된 DPC(Deferred Procedure Calls)를 출력해 주는 명령어입니다.
  - Zero Access, Rustock, Stuxnet 의 경우 DPC 를 이용하여 timer 를 등록합니다다. DPC 주소와 KTIMES 를 통해 악성코드가 다양한 방법으로 Kernel 공간에 숨어 있는 것을 빠르게 찾을 수 있습니다

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

  - Windows XP, 2003, 2008, VISTA 의 경우 times 를 전역 변수에 저장하지만, Windows 7 의 경우 KPCR(Kernel Processor Control Region)에 저장하고 있습니다. 
  - 그렇기 때문에 Windows7 에서 모든 timers 들을 확인 하려면 kpcrscan 을 통해 KPCR 주소들을 --kpcr Option 을 통해 인자로 넣어 주어야 합니다.
  - KPCR 에 따라 다른 timers 의 목록을 볼 수 있으며, 이는 각 Processor 가 자신만의 timers 의 set 을 가지고 있기 때문입니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 kpcrscan
 # python vol.py -f image.vmem --profile=Win7SP1x64 --kpcr=0x00000000

 

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 : 기타 등등

◎ Crash Dumps, Hibernation and Conversion : 크래쉬 덤프, 하이버네이션 정보확인 및 파일변환
 > crashinfo : Crash dump header 정보를 출력해주는 명령어입니다.

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

 

 > hibinfo : Hibernation file 로 부터 정보를 출력해주는 명령어입니다.
  - Hibernation file 로 부터 Control Register 상태, file 생성시간, 상태, Hibernation 직전의 해당 Windows Version 과 같은 정보를 제공해주는 명령어입니다.

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

 

 > imagecopy : 크래시/BSOD 등의 분석불가능한 덤프파일을 분석가능한 덤프파일로 바꿔주는 명령어입니다.
  - Windows XP SP2 가 아니라면 --profile Option 을 통하여 Profile 을 지정해줘야 하며, -O Option 을 통하여 output file 을 지정할 수 있습니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 imagecopy -O Win7SP1x64.raw

 

 > raw2dmp : physical memory 덤프를 crash dump로 변환하는 명령어입니다.
  - WinDbg 커널 디버거에서 메모리를 불러올 때 유용합니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 raw2dmp -O copy.dmp

 

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 : 기타 등등

◎ Registry : 단지 Registry data를 추출하는데 도움을 줍니다.
 > hivescan : Memory Dump로부터 CMHIVEs(Registry hives)의 Physical address를 찾아주는 명령어입니다.

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

 

 > hivelist : Memory Dump 로 부터 레지스터 하이브(Registry hives)의 가상 메모리 주소(Virtual address)와 Disk 상의 절대 경로를 알려주는 명령어입니다.
  - 만약 특정 하이브로부터 값을 표기하기 원한다면, 이 명령어를 실행시켜서 해당 되는 하이브 주소 값을 볼 수 있으며, 이 명령어를 통하여 Windows password를 크랙 할 수 있게 됩니다.

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

 

 > printkey : 특정 Registry key 의 subkeys, values, data, data type를 보여주는 명령어입니다.
  - 기본적으로 printkey 는 모든 hives로 부터 검색을 하여 찾아진 key information을 출력하므로, HKEY_LOCAL_MACHINE\Microsoft\Security Center\Svc key 안을 둘러보고 싶다면 -K Option을 통하여 포함 문자열을 함께 적어 주는 것이 좋습니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 printkey -K "Microsoft\Security Center\Svc"

  - 특정한 하이브를 검색하는데 제한이 있다면, printkey는 하이브의 가상 주소를 통해 확인할 수 있으며, HKEY_LOCAL_MACHINE의 내용을 보고 싶다면 -o Option을 사용하면 됩니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 printkey -o 0xfffff8a000000000

 

 > hivedump : hive로부터 모든 subkey를 list 형태로 보여주는 명령어입니다.
  - 명령어 라인에 -o Option을 통해 원하는 hive의 Virtual address를 지정해 주면 해당 hive에 대한 subkey를 list 형태로 출력 가능합니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 hivedump -o 0xfffff8a000000000

 

 > hashdump : 주로 SAM File을 추출할 때 쓰이는 명령어입니다.(Windows password 크랙)
  -  SYSTEM hive의 Virtual address를 -y Option을 통해 넣어주고 SAM hive의 Virtual address를 -s Option을 넣어줍니다.
  - Memory Dump로부터 registry key를 읽을 수 없는 경우는 "ERROR : volatility.plugins.registry.lsadump: Unable to rad hashes from registry"와 같은 Error를 확인할 수 있습니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 hashdump -y [system의 virtual 주소] -s [sam의 virtual 주소]

  - 만약 SYSTEM의 "CurrentControlset\Control\lsa"와 SAM의 "Domains\Account\"에 올바른 key가 존재하는 것을 확인 가능하다면 volshell을 이용해 "CurrentControlSet"을 받아야 합니다.

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

  - 그 후, printkey 명령어를 사용하여 해당 data와 keys가 존재하는지 확인 가능합니다. 만약 key가 없다면 "The requested key could not be found in the hive(s) searched"라는 Error를 확인할 수 있습니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 printkey -K "ControlSet001\Control\lsa" --no-cache
 # python vol.py -f image.vmem --profile=Win7SP1x64 printkey -K "SAM\Domains\Account" --no-cache

 

 > lsadump : Registry로부터 LSA dump를 수행하는 명령어입니다.
  - Default password, RDP public key, DPAPI credentials 등의 정보를 출력 가능합니다.
  - SYSTEM hive의 Virtual address를 -y Option을 통해 넣어주고 SECURITY hive의 Virtual address를 -s Option을 통해 넣어주면 출력이 가능합니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 lsadump -y 0x00000000 -s 0x00000000

 

 > userassist : 메모리 덤프 파일에서 UserAssist 관련 레지스트리 키 정보 추출하는 명령어입니다.

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

 

 > shellbags : ShellBags 정보를 추출하는 명령어입니다.
  - 특정 사용자가 호스트에서 수행 한 파일 또는 폴더 작업을 확인하는 데 매우 유용한 방법입니다.

 # python vol.py -f image.vmem --profile=Win7SP1x64 shellbags
 # python vol.py -f image.vmem --profile=Win7SP1x64 shellbags --output=body

 

 > shimcache : Application Compatibility Shim Cache 레지스트리 키를 분석하는 명령어입니다.

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

 

 > getservicesids : 컴퓨터의 서비스에 대한 SID를 계산하고 나중에 사용할 수 있도록 Python 사전 형식으로 출력합니다.
  - 서비스 이름은 레지스트리 ( "SYSTEM\CurrentControlSet\Services")에서 가져옵니다. 
  - 출력을 파일에 저장하려면 --output-file 옵션을 사용하면 됩니다.

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

 

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 : 기타 등등

◎ Networking : 네트워크 정보
 > connections : 활성화 상태의 네트워크 연결 정보를 나열합니다. (Windows XP, Windows 2003 Server 만 사용 가능)
  - 네트워크의 pslist와 비슷합니다. 오프셋은 기본적으로 _TCPT_OBJECT 가상 주소로 출력되지만 물리적인 주소를 얻고 싶다면 -P 명령어를 추가적으로 사용합니다.

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

 

 > connscan : Pool tag scanning을 통하여 connection 구조체를 찾는 명령어입니다.(Windows XP, Windows 2003 Server 만 사용 가능)
  - 활성화 상태의 네트워크 연결 정보와 함께 이미 종료된 네트워크 연결 정보도 나열합니다. 그러나 몇몇 Field에서 부분적으로 덮어쓰기 된 것과 같은 오탐(False Positive)이 존재합니다.
  - psscan과 유사하며 풀 태그 스캐닝을 사용하여 _TCPT_OBJECT 구조체를 찾기 위해 사용됩니다. 이 명령어는 이미 종료되어버린 연결들로부터 아티팩트를 찾아낼 수 있고 게다가 활성화된 것들도 찾아낼 수 있습니다. 부분적으로 덮여 쓰인 필드를 발견할 수 있지만 전체적으로 신뢰할 수 있는 정보입니다. 따라서 오탐이 발견될 수 있지만 많은 정보를 찾을 수 있다는 장점이 있습니다.

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

 

 > sockets : TCP, UDP, RAW 등의 protocol에서 listening Socket 들을 찾아내는 명령어입니다. (Windows XP, Windows 2003 Server 만 사용 가능)
  - 기본적으로 출력은 _ADDRESS_OBJECT 가상 주소를 포함하고 있으며, -P switch를 이용하여 물리적 주소를 확인 가능합니다.

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

 

 > sockscan : Pool tag scanning을 통하여 _ADDRESS_OBJECT 구조체를 찾는 명령어입니다. (Windows XP, Windows 2003 Server 만 사용 가능)
  - 이전의 socket으로부터 존재했던 데이터와 아티펙트들을 추출할 수 있습니다.

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

 

 > netscan : Pool tag scanning을 통하여 활성화 상태의 네트워크 연결 정보를 보여줍니다. (Windows Vista, 7, Windows 2008 Server만 사용 가능)
  - TCP endpoints, TCP listeners, UDP endpoints, and UDP listeners를 찾아줍니다.
  - IPv4와 IPv6을 구별하며 Local과 Remote IP(가능하다면), Local 과 Remote 포트(가능하다면), 소켓이 bind 되거나 연결이 수립된 시간, 그리고 현재 상태(TCP 연결만 지원)를 보여줍니다.

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

 

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 : 기타 등등

◎ Kernel Memory and Objects : 커널 메모리와 오브젝트 분석
 > modules : System에 load된 kernel driver들을 보여주는 명령어입니다.
  - PSLoadedModuleList가 가리키는 LDR_DATA_TABLE_ENTRY를 통해 doubly-linked 형태로 동작하며 hidden/unlinked kernel driver는 출력해 주지 않습니다.
  - 기본적으로 Virtual address 로 출력하며, Physical address 를 보고 싶다면 -P Option 을 추가하면 됩니다.

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

 

 > modscan : Kernel module 을 Physical address 로 보여주는 명령어입니다.
  -  pool 태그로 물리적 메모리 스캐닝을 함으로써 LDR_DATA_TABLE_ENTRY 구조들을 찾을 수 있습니다.
  -  이전에 load 되었던 driver, Rootkit 에 의해 hidden/unlinked 된 Driver 도 출력해 줍니다.

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

 

 > moddump : Kernel driver 를 File 로 dump 해 주는 명령어입니다.
  - 정규 표현 식과, Physical Offset 을 이용한 Filter 를 지원해 줍니다.
  - 모든 driver 들을 dump 하고 싶다면 아무런 Filter 를 적용하지 않으면 됩니다.
  - 명령어 라인에 -D 또는 --dump-dir=DIR 로 출력 디렉토리를 제공합니다.
  - dlldump 와 비슷하게, PE 헤더의 중요한 부분이 메모리 상주가 아니라면 드라이버의 재구축 또는 추출은 아마 실패 할 것입니다.(2.1버전)

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

 

 > ssdt : Native 와 GUI SSDT 의 함수들을 list 시켜주는 명령어입니다.
  - index, function name, SSDT 에서 각각의 entry 를 소유하고 있는 driver owner 를 출력해 줍니다.
  - Windows 는 4 개의 SSDT 를 가지고 있으나 NT module 의 Native Function, win32k.sys module 의 GUI function 만을 사용하고 있습니다.

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

 

 > driverscan : Memory 의 DRIVER_OBJECT 를 pool 태그 스캐닝하는 명령어입니다.
  - 모든 kernel module 이 DRIVER_OBJECT 와 관련된 것은 아닙니다.
  - DRIVER_OBJECT : 드라이버를 나타내는 데이터 구조체입니다. DEVICE_OBJECT를 포함하고 있으며, 하나의 드라이버가 동일한 장치 여러 개를 관리 할 수 있습니다.
  - DEVICE_OBJECT : 드라이버를 통해서 관리되는 장치를 표현하는 구조체입니다.

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

 

 > filescan : pool 태그 스캐닝을 사용하여 물리적 메모리에서 FILE_OBJECT를 스캐닝하는 명령어입니다.
  - Rootkit 이 디스크에 File 을 hiding 하였거나, 실제 System 의 open handle 을 hooking 하였더라도 open File 을 찾을 수 있습니다.

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

 

 > mutantscan : Memory 에서 KMUTANT 객체를 pool 태그 스캐닝을 사용해 스캐닝하는 명령어입니다.
  - 모든 오브젝트들을 보여주지만 mutexexs 로 명명된 것만 볼 수 있도록 -s 또는 --silent 를 사용할 수 있습니다.
  - CID column 은 Process ID 와 Thread ID 를 보여줍니다.
  - Volatility 는 mutexes 들이 random 한 이름을 가지기 때문에 의심 가는 mutexes 를 판단하는 것이 어렵다는 것을 알고, sqlite3 database 를 통해 해당 Memory dump 에 이미 DB 에 존재하는 이름이 있으면 강조해주는 기능을 가지고 있습니다.

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

 

 > symlinkscan : Symbolic link 객체들을 pool 태그 스캐닝을 사용해 스캐닝하는 명령어입니다.

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

 

 > thrdscan : Memory 의 ETHREAD 객체를 pool 태그 스캐닝을 사용해 스캐닝하는 명령어입니다.
  - ETHREAD 는 부모 process 를 식별할 수 있는 정보를 가지고 있기 때문에 이는 hidden Process 를 찾는데 도움을 주기도 합니다.

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

 

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 : 기타 등등

+ Recent posts