原文

Image Identification

imageinfo

For a high level summary of the memory sample you're analyzing, use the imageinfo command. Most often this command is used to identify the operating system, service pack, and hardware architecture (32 or 64 bit), but it also contains other useful information such as the DTB address and time the sample was collected.
inageinfoコマンドで解析するメモリサンプルの概要が分かります。OSの種類、サービスパックの有無、ハードウェアアーキテクチャ(32/64bit)を知るために利用されますが、DTBアドレスといった有用な情報を知ることもできます。

$ python vol.py -f ~/Desktop/win7_trial_64bit.raw imageinfo
Volatile Systems Volatility Framework 2.1_alpha
Determining profile based on KDBG search...

          Suggested Profile(s) : Win7SP0x64, Win7SP1x64, Win2008R2SP0x64, Win2008R2SP1x64
                     AS Layer1 : AMD64PagedMemory (Kernel AS)
                     AS Layer2 : FileAddressSpace (/Users/Michael/Desktop/win7_trial_64bit.raw)
                      PAE type : PAE
                           DTB : 0x187000L
                          KDBG : 0xf80002803070
          Number of Processors : 1
     Image Type (Service Pack) : 0
                KPCR for CPU 0 : 0xfffff80002804d00L
             KUSER_SHARED_DATA : 0xfffff78000000000L
           Image date and time : 2012-02-22 11:29:02 UTC+0000
     Image local date and time : 2012-02-22 03:29:02 -0800
The imageinfo output tells you the suggested profile that you should pass as the parameter to --profile=PROFILE when using other plugins. There may be more than one profile suggestion if profiles are closely related. It also prints the address of the KDBG (short for _KDDEBUGGER_DATA64) structure that will be used by plugins like pslist and modules to find the process and module list heads, respectively. In some cases, especially larger memory samples, there may be multiple KDBG structures. Similarly, if there are multiple processors, you'll see the KPCR address and CPU number for each one.
imageinfoは、パラメータで--profile=PROFILEとして指定するプロファイルを示唆します。関連する複数のプロファイルが示唆される場合もあります。pslistやプロセスとモジュールリストを探索するプラグインで利用されるKDBG構造体のアドレスも表示します。特に大きなメモリサンプルでは、複数のKDBG構造体が示される場合があります。同じように複数のプロセッサを持ったシステムの場合、それぞれにKPCRアドレスとCPU番号が表示されます。
Plugins automatically scan for the KPCR and KDBG values when they need them. However, you can specify the values directly for any plugin by providing --kpcr=ADDRESS or --kdbg=ADDRESS. By supplying the profile and KDBG (or failing that KPCR) to other Volatility commands, you'll get the most accurate and fastest results possible.
プラグインは必要に応じて自動的にKPCRとKDBGの値をスキャンします。--kpcr=ADDRESSと--kgbg=ADDRESSというパラメータで明示的に指定することもできます。プロファイルとKDBGをコマンドに与えることによって、最も正確な結果を高速に得ることができます。
Note: The imageinfo plugin will not work on hibernation files unless the correct profile is given in advance. This is because important structure definitions vary between different operating systems.
ハイバネーションファイルに対しては正しいプロファイルを指定しないとimageinfoは機能しません。これはOS間で重要な構造体の定義が異なるためです。

kdbgscan

As opposed to imageinfo which simply provides profile suggestions, kdbgscan is designed to positively identify the correct profile and the correct KDBG address (if there happen to be multiple). This plugin scans for the KDBGHeader signatures linked to Volatility profiles and applies sanity checks to reduce false positives. The verbosity of the output and number of sanity checks that can be performed depends on whether Volatility can find a DTB, so if you already know the correct profile (or if you have a profile suggestion from imageinfo), then make sure you use it.
単純にプロファイルを示唆するimageinfoとは違い、kdbgscanは正確なプロファイルとKDBGアドレス(複数存在すれば)を識別するようにデザインされています。このプラグインは、プロファイルに対応したKDBGHeaderシグニチャをスキャンし誤検知を低下させるためのチェックを行います。詳細な出力と実行するチェック数はVolatilityがDTBを見つけられるかによります。そのため、すでに正確なプロファイルを知っている場合(またはimageinfoで示唆された場合)、それを利用するべきです。
Here's an example scenario of when this plugin can be useful. You have a memory sample that you believe to be Windows 2003 SP2 x64, but pslist doesn't show any processes. The pslist plugin relies on finding the process list head which is pointed to by KDBG. However, the plugin takes the first KDBG found in the memory sample, which is not always the best one. You may run into this problem if a KDBG with an invalid PsActiveProcessHead pointer is found earlier in a sample (i.e. at a lower physical offset) than the valid KDBG.
このプラグインが有用な例。Windows 2003 SP2 x64のものであると考えているイメージサンプルがあるが、pslistがプロセスを表示しないとする。pslistはKDBGから示されるプロセスリストヘッドを利用しているが、pslistは必ずしもベストではないメモリ内で初めに見つかったKDBGを利用する。不正なPsActiveProcessHeadポインタを持つKDBGが正しいKDBGより先に見つかったために問題が起きたのかどうか確認することができる。
Notice below how kdbgscan picks up two KDBG structures: an invalid one (with 0 processes and 0 modules) is found first at 0xf80001172cb0 and a valid one (with 37 processes and 116 modules) is found next at 0xf80001175cf0. In order to "fix" pslist for this sample, you would simply need to supply the --kdbg=0xf80001175cf0 to the plist plugin.

$ python vol.py -f Win2K3SP2x64-6f1bedec.vmem --profile=Win2003SP2x64 kdbgscan
Volatile Systems Volatility Framework 2.1_alpha
**************************************************
Instantiating KDBG using: Kernel AS Win2003SP2x64 (5.2.3791 64bit)
Offset (V)                    : 0xf80001172cb0
Offset (P)                    : 0x1172cb0
KDBG owner tag check          : True
Profile suggestion (KDBGHeader): Win2003SP2x64
Version64                     : 0xf80001172c70 (Major: 15, Minor: 3790)
Service Pack (CmNtCSDVersion) : 0
Build string (NtBuildLab)     : T?
PsActiveProcessHead           : 0xfffff800011947f0 (0 processes)
PsLoadedModuleList            : 0xfffff80001197ac0 (0 modules)
KernelBase                    : 0xfffff80001000000 (Matches MZ: True)
Major (OptionalHeader)        : 5
Minor (OptionalHeader)        : 2

**************************************************
Instantiating KDBG using: Kernel AS Win2003SP2x64 (5.2.3791 64bit)
Offset (V)                    : 0xf80001175cf0
Offset (P)                    : 0x1175cf0
KDBG owner tag check          : True
Profile suggestion (KDBGHeader): Win2003SP2x64
Version64                     : 0xf80001175cb0 (Major: 15, Minor: 3790)
Service Pack (CmNtCSDVersion) : 2
Build string (NtBuildLab)     : 3790.srv03_sp2_rtm.070216-1710
PsActiveProcessHead           : 0xfffff800011977f0 (37 processes)
PsLoadedModuleList            : 0xfffff8000119aae0 (116 modules)
KernelBase                    : 0xfffff80001000000 (Matches MZ: True)
Major (OptionalHeader)        : 5
Minor (OptionalHeader)        : 2
KPCR                          : 0xfffff80001177000 (CPU 0)
For more information on how KDBG structures are identified read Finding Kernel Global Variables in Windows and Identifying Memory Images
KDBG構造体についての詳細は、Finding Kernel Global Variables in WindowsとIdentifying Memory Imagesを参照。

kpcrscan

Use this command to scan for potential KPCR structures by checking for the self-referencing members as described by Finding Object Roots in Vista. On a multi-core system, each processor has its own KPCR. Therefore, you'll see details for each processor, including IDT and GDT address; current, idle, and next threads; CPU number, vendor & speed; and CR3 value.
If the KdVersionBlock is not null, then it may be possible to find the machine's KDBG address via the KPCR. In fact, the backup method of finding KDBG used by plugins such as pslist is to leverage kpcrscan and then call the KPCR.get_kdbg() API function.

Processes and DLLs

pslist

To list the processes of a system, use the pslist command. This walks the doubly-linked list pointed to by PsActiveProcessHead and shows the offset, process name, process ID, the parent process ID, number of threads, number of handles, and date/time when the process started and exited. As of 2.1 it also shows the Session ID and if the process is a Wow64 process (it uses a 32 bit address space on a 64 bit kernel).
pslistコマンドはプロセスを列挙します。PsActiveProcessHeadで示されるダブルリンクリストを辿って、オフセット、プロセス名、プロセスID、親プロセスID、スレッド数、ハンドル数、開始・終了時刻を表示する。2.1から、セッションID、WOW64プロセスかどうかも表示する(64bitシステムで32bitアドレススペースを使用する)。
This plugin does not detect hidden or unlinked processes (but psscan can do that).
このプラグインは隠されたプロセスやリンクされていないプロセスは認識できない。(psscanは可能)
If you see processes with 0 threads, 0 handles, and/or a non-empty exit time, the process may not actually still be active. For more information, see The Missing Active in PsActiveProcessHead. Below, you'll notice regsvr32.exe has terminated even though its still in the "active" list.
スレッド数0、ハンドル数0で終了時刻が表示される(されないことも)場合、アクティブなプロセスではないかもしれない。詳しくはThe Missing Active in PsActiveProcessHeadを参照。以下の例では、regsvr32.exeがアクティブリストにはいるが、すでに終了していることがわかる。
Also note the two processes System and smss.exe will not have a Session ID, because System starts before sessions are established and smss.exe is the session manager itself.
Sysemはセッション確立前に開始し、smss.exeはセッションマネージャそのものであるため、Systemとsmss.exeの2つのプロセスはセッションIDを持っていない。
By default, pslist shows virtual offsets for the EPROCESS but the physical offset can be obtained with the -P switch:
デフォルトでは、pslistはEPROCESSの仮想オフセットを表示するが、-Pスイッチによって物理オフセットを表示する。

pstree

To view the process listing in tree form, use the pstree command. This enumerates processes using the same technique as pslist, so it will also not show hidden or unlinked processes. Child process are indicated using indention and periods.
pstreeコマンドは、ツリー形式のプロセスリストを表示する。pslistと同じ仕組でプロセスを列挙するため、隠されたプロセスやリンクが外されたプロセスは表示されない。子プロセスはインデントとピリオドで示される。

psscan

To enumerate processes using pool tag scanning (POOL_HEADER), use the psscan command. This can find processes that previously terminated (inactive) and processes that have been hidden or unlinked by a rootkit. The downside is that rootkits can still hide by overwriting the pool tag values (though not commonly seen in the wild).
psscanコマンドは、プールタグをスキャンすることによりプロセスを列挙する。既に停止したプロセス、rootkitによって隠されたプロセスやリンクを外されたプロセスも見つけ出すことができる。rootkitはプールタグを上書きすることができるのが問題(現実にはあまりない)。
If a process has previously terminated, the Time exited field will show the exit time. If you want to investigate a hidden process (such as displaying its DLLs), then you'll need physical offset of the EPROCESS object, which is shown in the far left column. Almost all process-related plugins take a --OFFSET parameter so that you can work with hidden processes.
プロセスが既に終了している場合、Time exitedフィールドが終了時刻を表す。隠されたプロセスを調査したいなら、左はしのEPROCESSオブジェクトの物理オフセットが必要。隠されたプロセスを調査するために、ほとんどのプロセス関連のプラグインは--OFFSETパラメータを受け入れる。

psdispscan

This plugin is similar to psscan, except it enumerates processes by scanning for DISPATCHER_HEADER instead of pool tags. This gives you an alternate way to carve EPROCESS objects in the event an attacker tried to hide by altering pool tags. This plugin is not well maintained and only supports XP x86. To use it, you must type --plugins=contrib/plugins on command-line.
このプラグインはpsscanと似ているが、プールタグではなくDISPATCHER_HEADERをスキャンすることによってプロセスを列挙することが異なっている。攻撃者がプールタグを変更することによって隠蔽するような場合に、EPROCESSをcarveするためのもう一つのやり方である。このプラグインはあまりメンテナンスされておらず、XP x86のみサポートされている。このプラグインを使用するためには、--plugins=contrib/pluginsというオプションを指定する必要がある。

dlllist


To display a process's loaded DLLs, use the dlllist command. It walks the doubly-linked list of LDR_DATA_TABLE_ENTRY structures which is pointed to by the PEB's InLoadOrderModuleList. DLLs are automatically added to this list when a process calls LoadLibrary (or some derivative such as LdrLoadDll) and they aren't removed until FreeLibrary is called and the reference count reaches zero. The load count column tells you if a DLL was statically loaded (i.e. as a result of being in the exe or another DLL's import table) or dynamically loaded.
dlllistコマンドでプロセスがロードしたDLLを表示することができる。PEBのInLoadOrderModuleListで示されるLDR_DATA_TABLE_ENTRY構造体のダブルリンクリストを辿る。プロセスがLoadLibraryをコールした際に(またはLdrLoadDllなどの派生によって)このリストに追加され、FreeLibraryが呼び出されて参照数が0になるまで削除されない。load count列は静的にロード(exeか別のDLLのインポートテーブルに登録されていることにより)されているか動的にロードされているかを示す。
To display the DLLs for a specific process instead of all processes, use the -p or --pid filter as shown below. Also, in the following output, notice we're analyzing a Wow64 process. Wow64 processes have a limited list of DLLs in the PEB lists, but that doesn't mean they're the only DLLs loaded in the process address space. Thus Volatility will remind you to use the ldrmodules instead for these processes.
To display the DLLs for a process that is hidden or unlinked by a rootkit, first use the psscan to get the physical offset of the EPROCESS object and supply it with --offset=OFFSET. The plugin will "bounce back" and determine the virtual address of the EPROCESS and then acquire an address space in order to access the PEB.

メンバーのみ編集できます