Volatility - CheatSheet

Reading time: 28 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

メモリ分析を自動化し、異なるスキャンレベルで複数のVolatility3プラグインを並行して実行するツールが必要な場合は、autoVolatility3を使用できます:: https://github.com/H3xKatana/autoVolatility3/

bash
# Full scan (runs all plugins)
python3 autovol3.py -f MEMFILE -o OUT_DIR -s full

# Minimal scan (runs a limited set of plugins)
python3 autovol3.py -f MEMFILE -o OUT_DIR -s minimal

# Normal scan (runs a balanced set of plugins)
python3 autovol3.py -f MEMFILE -o OUT_DIR -s normal

もし速くてクレイジーなものが欲しいなら、いくつかのVolatilityプラグインを並行して起動するために次を使用できます: https://github.com/carlospolop/autoVolatility

bash
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

bash
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 command reference でアクセスできます。

“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

外部プロファイル

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

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

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

bash
./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と呼ばれているのが見え、これを使用して次のようなコマンドを実行できます:

bash
./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アドレスが必要だからです)。

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

KDBG

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

OS情報

bash
#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

プラグイン banners.Banners は、vol3 でダンプ内の Linux バナーを探すために使用できます

ハッシュ/パスワード

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

bash
./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/

プロセス

プロセスのリスト

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

bash
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)

プロセスダンプ

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

コマンドライン

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

bash
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**を検索することにより、セッションで使用されたコマンドラインを抽出できる可能性があります。

環境

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

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

トークンの特権

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

bash
#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を使用しているプロセス)をリストアップすることは興味深いかもしれません。

bash
./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

ハンドル

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

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

DLLs

bash
./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を使用すると、文字列がどのプロセスに属しているかを確認できます。

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

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

bash
./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 keysと呼ばれるレジストリの機能を使用して、実行したプログラムを追跡します。これらのキーは、各プログラムが実行された回数と最後に実行された時刻を記録します。

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

サービス

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

ネットワーク

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

レジストリハイブ

利用可能なハイブを表示

bash
./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

値を取得する

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

ダンプ

bash
#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

ファイルシステム

マウント

bash
#See vol2

スキャン/ダンプ

bash
./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

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

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

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

SSLキー/証明書

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

マルウェア

bash
./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_というファイルが作成されます。

bash
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

外部プラグイン

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

bash
./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

シンボリックリンク

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

Bash

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

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

タイムライン

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

ドライバー

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

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

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

IEの履歴を取得する

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

Notepadのテキストを取得する

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

スクリーンショット

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

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

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

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

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする