Volatility - CheatSheet

Support HackTricks

​​RootedCONスペイン で最も重要なサイバーセキュリティイベントであり、ヨーロッパ で最も重要なイベントの一つです。技術的知識の促進を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家が集まる熱い交流の場です。

もし、いくつかのVolatilityプラグインを並行して起動する速くてクレイジーなものが必要であれば、次のリンクを使用できます: https://github.com/carlospolop/autoVolatility

python autoVolatility.py -f MEMFILE -d OUT_DIRECTORY -e /home/user/tools/volatility/vol.py # It will use the most important plugins (could use a lot of space depending on the size of the memory)

インストール

volatility3

git clone https://github.com/volatilityfoundation/volatility3.git
cd volatility3
python3 setup.py install
python3 vol.py —h

volatility2

Download the executable from https://www.volatilityfoundation.org/26

Volatility コマンド

公式ドキュメントは Volatility コマンドリファレンス でアクセスできます。

“list” プラグインと “scan” プラグインについての注意

Volatility には、プラグインに対する2つの主要なアプローチがあり、時にはその名前に反映されています。“list” プラグインは、プロセス(メモリ内の _EPROCESS 構造のリンクリストを見つけて歩く)や OS ハンドル(ハンドルテーブルを見つけてリストし、見つかったポインタを解参照するなど)の情報を取得するために、Windows カーネル構造をナビゲートしようとします。これらは、例えばプロセスをリストするように要求された場合、Windows API のように振る舞います。

そのため、“list” プラグインは非常に速いですが、マルウェアによる操作に対して Windows API と同様に脆弱です。例えば、マルウェアが DKOM を使用してプロセスを _EPROCESS リンクリストから切り離すと、タスクマネージャーにも pslist にも表示されません。

一方、“scan” プラグインは、特定の構造として解参照されたときに意味を持つ可能性のあるものをメモリから彫り出すアプローチを取ります。例えば psscan はメモリを読み取り、そこから _EPROCESS オブジェクトを作成しようとします(これは、関心のある構造の存在を示す4バイトの文字列を検索するプールタグスキャンを使用します)。利点は、終了したプロセスを掘り起こすことができ、マルウェアが _EPROCESS リンクリストを改ざんしても、プラグインはメモリ内に残っている構造を見つけることができることです(プロセスが実行されるためには、まだ存在する必要があります)。欠点は、“scan” プラグインは “list” プラグインよりも少し遅く、時には偽陽性を生じることがある(終了してから長い時間が経過し、他の操作によってその構造の一部が上書きされたプロセス)ことです。

出典: http://tomchop.me/2016/11/21/tutorial-volatility-plugins-malware-analysis/

OS プロファイル

Volatility3

readme 内で説明されているように、サポートしたい OS のシンボルテーブルvolatility3/volatility/symbols 内に置く必要があります。 さまざまなオペレーティングシステムのシンボルテーブルパックは ダウンロード 可能です:

Volatility2

外部プロファイル

サポートされているプロファイルのリストを取得するには、次のようにします:

./volatility_2.6_lin64_standalone --info | grep "Profile"

もしダウンロードした新しいプロファイル(例えば、Linux用のもの)を使用したい場合は、次のフォルダー構造をどこかに作成する必要があります: plugins/overlays/linux そして、そのフォルダーの中にプロファイルを含むzipファイルを置きます。次に、次のコマンドを使用してプロファイルの番号を取得します:

./vol --plugins=/home/kali/Desktop/ctfs/final/plugins --info
Volatility Foundation Volatility Framework 2.6


Profiles
--------
LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 - A Profile for Linux CentOS7_3.10.0-123.el7.x86_64_profile x64
VistaSP0x64                                   - A Profile for Windows Vista SP0 x64
VistaSP0x86                                   - A Profile for Windows Vista SP0 x86

あなたはLinuxとMacのプロファイルをダウンロードできます https://github.com/volatilityfoundation/profiles

前の部分では、プロファイルがLinuxCentOS7_3_10_0-123_el7_x86_64_profilex64と呼ばれているのが見え、これを使用して次のようなコマンドを実行できます:

./vol -f file.dmp --plugins=. --profile=LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 linux_netscan

プロファイルの発見

volatility imageinfo -f file.dmp
volatility kdbgscan -f file.dmp

imageinfoとkdbgscanの違い

こちらから: imageinfoが単にプロファイルの提案を提供するのに対し、kdbgscanは正しいプロファイルと正しいKDBGアドレス(複数ある場合)を正確に特定するように設計されています。このプラグインは、Volatilityプロファイルに関連するKDBGHeaderシグネチャをスキャンし、偽陽性を減らすためのサニティチェックを適用します。出力の詳細度と実行できるサニティチェックの数は、VolatilityがDTBを見つけられるかどうかに依存するため、正しいプロファイルをすでに知っている場合(またはimageinfoからプロファイルの提案を受けている場合)は、それを使用することを確認してください。

常にkdbgscanが見つけたプロセスの数を確認してください。時々、imageinfoとkdbgscanは複数の適切なプロファイルを見つけることができますが、有効なものだけがいくつかのプロセスに関連していることになります(これは、プロセスを抽出するためには正しいKDBGアドレスが必要だからです)。

# GOOD
PsActiveProcessHead           : 0xfffff800011977f0 (37 processes)
PsLoadedModuleList            : 0xfffff8000119aae0 (116 modules)
# BAD
PsActiveProcessHead           : 0xfffff800011947f0 (0 processes)
PsLoadedModuleList            : 0xfffff80001197ac0 (0 modules)

KDBG

カーネルデバッガーブロック(KDBG)は、VolatilityによってKDBGと呼ばれ、Volatilityやさまざまなデバッガーによって実行されるフォレンジックタスクにとって重要です。KdDebuggerDataBlockとして識別され、タイプは_KDDEBUGGER_DATA64で、PsActiveProcessHeadのような重要な参照を含んでいます。この特定の参照はプロセスリストの先頭を指し、すべてのプロセスのリストを可能にし、徹底的なメモリ分析にとって基本的です。

OS情報

#vol3 has a plugin to give OS information (note that imageinfo from vol2 will give you OS info)
./vol.py -f file.dmp windows.info.Info

The plugin banners.Bannersvol3 でダンプ内の Linux バナーを探すために使用できます

ハッシュ/パスワード

SAM ハッシュ、ドメインキャッシュ資格情報 および lsa シークレット を抽出します。

./vol.py -f file.dmp windows.hashdump.Hashdump #Grab common windows hashes (SAM+SYSTEM)
./vol.py -f file.dmp windows.cachedump.Cachedump #Grab domain cache hashes inside the registry
./vol.py -f file.dmp windows.lsadump.Lsadump #Grab lsa secrets

メモリダンプ

プロセスのメモリダンプは、プロセスの現在の状態のすべて抽出します。procdumpモジュールはコードのみを抽出します。

volatility -f file.dmp --profile=Win7SP1x86 memdump -p 2168 -D conhost/

​​​RootedCONスペイン で最も関連性の高いサイバーセキュリティイベントであり、ヨーロッパ で最も重要なイベントの一つです。技術的知識の促進を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家が集まる熱い交流の場です。

プロセス

プロセスのリスト

疑わしいプロセス(名前で)や予期しないプロセス(例えば、iexplorer.exeの子としてのcmd.exe)を見つけるようにしてください。 隠れたプロセスを特定するために、pslistの結果をpsscanの結果と比較することが興味深いかもしれません。

python3 vol.py -f file.dmp windows.pstree.PsTree # Get processes tree (not hidden)
python3 vol.py -f file.dmp windows.pslist.PsList # Get process list (EPROCESS)
python3 vol.py -f file.dmp windows.psscan.PsScan # Get hidden process list(malware)

ダンププロセス

./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory

コマンドライン

何か疑わしいものが実行されましたか?

python3 vol.py -f file.dmp windows.cmdline.CmdLine #Display process command-line arguments

cmd.exe で実行されたコマンドは conhost.exe (または Windows 7 より前のシステムでは csrss.exe) によって管理されます。これは、攻撃者によって cmd.exe が終了された場合でも、メモリダンプが取得される前にセッションのコマンド履歴を conhost.exe のメモリから回復することが可能であることを意味します。これを行うには、コンソールのモジュール内で異常な活動が検出された場合、関連する conhost.exe プロセスのメモリをダンプする必要があります。その後、このダンプ内で strings を検索することにより、セッションで使用されたコマンドラインを抽出できる可能性があります。

環境

各実行中プロセスの環境変数を取得します。興味深い値があるかもしれません。

python3 vol.py -f file.dmp windows.envars.Envars [--pid <pid>] #Display process environment variables

トークンの特権

予期しないサービスで特権トークンをチェックします。 特権トークンを使用しているプロセスをリストアップすることは興味深いかもしれません。

#Get enabled privileges of some processes
python3 vol.py -f file.dmp windows.privileges.Privs [--pid <pid>]
#Get all processes with interesting privileges
python3 vol.py -f file.dmp windows.privileges.Privs | grep "SeImpersonatePrivilege\|SeAssignPrimaryPrivilege\|SeTcbPrivilege\|SeBackupPrivilege\|SeRestorePrivilege\|SeCreateTokenPrivilege\|SeLoadDriverPrivilege\|SeTakeOwnershipPrivilege\|SeDebugPrivilege"

SIDs

プロセスが所有する各SSIDを確認します。 特権SIDを使用しているプロセス(およびサービスSIDを使用しているプロセス)をリストアップすることは興味深いかもしれません。

./vol.py -f file.dmp windows.getsids.GetSIDs [--pid <pid>] #Get SIDs of processes
./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services

ハンドル

プロセスがハンドルを持っている(開いている)他のファイル、キー、スレッド、プロセスなどを知るのに役立ちます。

vol.py -f file.dmp windows.handles.Handles [--pid <pid>]

DLLs

./vol.py -f file.dmp windows.dlllist.DllList [--pid <pid>] #List dlls used by each
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory process

プロセスごとの文字列

Volatilityを使用すると、文字列がどのプロセスに属しているかを確認できます。

strings file.dmp > /tmp/strings.txt
./vol.py -f /tmp/file.dmp windows.strings.Strings --strings-file /tmp/strings.txt

プロセス内の文字列を検索するために、yarascanモジュールを使用することもできます:

./vol.py -f file.dmp windows.vadyarascan.VadYaraScan --yara-rules "https://" --pid 3692 3840 3976 3312 3084 2784
./vol.py -f file.dmp yarascan.YaraScan --yara-rules "https://"

UserAssist

Windowsは、UserAssistキーと呼ばれるレジストリの機能を使用して、実行したプログラムを追跡します。これらのキーは、各プログラムが実行された回数と、最後に実行された日時を記録します。

./vol.py -f file.dmp windows.registry.userassist.UserAssist

​​​​RootedCONスペイン で最も関連性の高いサイバーセキュリティイベントであり、ヨーロッパ で最も重要なイベントの一つです。 技術的知識の促進 を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家が集まる熱い交流の場です。

サービス

./vol.py -f file.dmp windows.svcscan.SvcScan #List services
./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services

ネットワーク

./vol.py -f file.dmp windows.netscan.NetScan
#For network info of linux use volatility2

レジストリハイブ

利用可能なハイブを印刷する

./vol.py -f file.dmp windows.registry.hivelist.HiveList #List roots
./vol.py -f file.dmp windows.registry.printkey.PrintKey #List roots and get initial subkeys

値を取得する

./vol.py -f file.dmp windows.registry.printkey.PrintKey --key "Software\Microsoft\Windows NT\CurrentVersion"

ダンプ

#Dump a hive
volatility --profile=Win7SP1x86_23418 hivedump -o 0x9aad6148 -f file.dmp #Offset extracted by hivelist
#Dump all hives
volatility --profile=Win7SP1x86_23418 hivedump -f file.dmp

ファイルシステム

マウント

#See vol2

スキャン/ダンプ

./vol.py -f file.dmp windows.filescan.FileScan #Scan for files inside the dump
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --physaddr <0xAAAAA> #Offset from previous command

マスターファイルテーブル

# I couldn't find any plugin to extract this information in volatility3

NTFSファイルシステムは、マスターファイルテーブル(MFT)として知られる重要なコンポーネントを使用します。このテーブルには、ボリューム上のすべてのファイルに対して少なくとも1つのエントリが含まれており、MFT自体も含まれています。サイズ、タイムスタンプ、権限、実際のデータなど、各ファイルに関する重要な詳細は、MFTエントリ内またはこれらのエントリによって参照されるMFT外の領域にカプセル化されています。詳細については、公式ドキュメントを参照してください。

SSLキー/証明書

#vol3 allows to search for certificates inside the registry
./vol.py -f file.dmp windows.registry.certificates.Certificates

マルウェア

./vol.py -f file.dmp windows.malfind.Malfind [--dump] #Find hidden and injected code, [dump each suspicious section]
#Malfind will search for suspicious structures related to malware
./vol.py -f file.dmp windows.driverirp.DriverIrp #Driver IRP hook detection
./vol.py -f file.dmp windows.ssdt.SSDT #Check system call address from unexpected addresses

./vol.py -f file.dmp linux.check_afinfo.Check_afinfo #Verifies the operation function pointers of network protocols
./vol.py -f file.dmp linux.check_creds.Check_creds #Checks if any processes are sharing credential structures
./vol.py -f file.dmp linux.check_idt.Check_idt #Checks if the IDT has been altered
./vol.py -f file.dmp linux.check_syscall.Check_syscall #Check system call table for hooks
./vol.py -f file.dmp linux.check_modules.Check_modules #Compares module list to sysfs info, if available
./vol.py -f file.dmp linux.tty_check.tty_check #Checks tty devices for hooks

Yaraを使ったスキャン

このスクリプトを使用して、githubからすべてのyaraマルウェアルールをダウンロードしてマージします: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9 rules ディレクトリを作成し、実行します。これにより、すべてのマルウェア用のyaraルールを含む malware_rules.yar というファイルが作成されます。

wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
mkdir rules
python malware_yara_rules.py
#Only Windows
./vol.py -f file.dmp windows.vadyarascan.VadYaraScan --yara-file /tmp/malware_rules.yar
#All
./vol.py -f file.dmp yarascan.YaraScan --yara-file /tmp/malware_rules.yar

MISC

外部プラグイン

外部プラグインを使用したい場合は、プラグインに関連するフォルダが最初のパラメータとして使用されていることを確認してください。

./vol.py --plugin-dirs "/tmp/plugins/" [...]

Autoruns

https://github.com/tomchop/volatility-autoruns からダウンロードしてください。

volatility --plugins=volatility-autoruns/ --profile=WinXPSP2x86 -f file.dmp autoruns

Mutexes

./vol.py -f file.dmp windows.mutantscan.MutantScan

シンボリックリンク

./vol.py -f file.dmp windows.symlinkscan.SymlinkScan

Bash

メモリからbashの履歴を読み取ることが可能です。 _.bash_history_ファイルをダンプすることもできますが、無効になっている場合は、このvolatilityモジュールを使用できることを喜ぶでしょう。

./vol.py -f file.dmp linux.bash.Bash

タイムライン

./vol.py -f file.dmp timeLiner.TimeLiner

ドライバー

./vol.py -f file.dmp windows.driverscan.DriverScan

クリップボードを取得する

#Just vol2
volatility --profile=Win7SP1x86_23418 clipboard -f file.dmp

IEの履歴を取得する

#Just vol2
volatility --profile=Win7SP1x86_23418 iehistory -f file.dmp

Notepadのテキストを取得する

#Just vol2
volatility --profile=Win7SP1x86_23418 notepad -f file.dmp

スクリーンショット

#Just vol2
volatility --profile=Win7SP1x86_23418 screenshot -f file.dmp

マスターブートレコード (MBR)

volatility --profile=Win7SP1x86_23418 mbrparser -f file.dmp

The マスターブートレコード (MBR) は、異なる ファイルシステム で構成されたストレージメディアの論理パーティションを管理する上で重要な役割を果たします。これは、パーティションのレイアウト情報を保持するだけでなく、ブートローダーとして機能する実行可能コードも含まれています。このブートローダーは、OSのセカンドステージのロードプロセスを直接開始するか(セカンドステージブートローダーを参照)、各パーティションの ボリュームブートレコード (VBR) と連携して動作します。詳細については、MBRのWikipediaページ を参照してください。

参考文献

RootedCON は、スペインで最も関連性の高いサイバーセキュリティイベントであり、ヨーロッパで最も重要なイベントの一つです。技術知識の促進を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家が集まる熱い交流の場です。

HackTricksをサポートする

Last updated