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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
メモリ分析を自動化し、異なるスキャンレベルで複数のVolatility3プラグインを並行して実行するツールが必要な場合は、autoVolatility3を使用できます:: https://github.com/H3xKatana/autoVolatility3/
# 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
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 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 内に置く必要があります。
さまざまなオペレーティングシステム用のシンボルテーブルパックは ダウンロード 可能です:
- https://downloads.volatilityfoundation.org/volatility3/symbols/windows.zip
- https://downloads.volatilityfoundation.org/volatility3/symbols/mac.zip
- https://downloads.volatilityfoundation.org/volatility3/symbols/linux.zip
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
プラグイン banners.Banners
は、vol3 でダンプ内の 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/
プロセス
プロセスのリスト
疑わしいプロセス(名前で)や予期しない子プロセス(例えば、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 keysと呼ばれるレジストリの機能を使用して、実行したプログラムを追跡します。これらのキーは、各プログラムが実行された回数と最後に実行された時刻を記録します。
./vol.py -f file.dmp windows.registry.userassist.UserAssist
サービス
./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
マスターブートレコード (MBR) は、ストレージメディアの論理パーティションを管理する上で重要な役割を果たします。これらのパーティションは異なる ファイルシステム で構成されています。MBRはパーティションのレイアウト情報を保持するだけでなく、ブートローダーとして機能する実行可能コードも含まれています。このブートローダーは、OSのセカンドステージのロードプロセスを直接開始するか(セカンドステージブートローダー を参照)、各パーティションの ボリュームブートレコード (VBR) と連携して動作します。詳細については、MBRのWikipediaページ を参照してください。
参考文献
- https://andreafortuna.org/2017/06/25/volatility-my-own-cheatsheet-part-1-image-identification/
- https://scudette.blogspot.com/2012/11/finding-kernel-debugger-block.html
- https://or10nlabs.tech/cgi-sys/suspendedpage.cgi
- https://www.aldeid.com/wiki/Windows-userassist-keys * https://learn.microsoft.com/en-us/windows/win32/fileio/master-file-table
- https://answers.microsoft.com/en-us/windows/forum/all/uefi-based-pc-protective-mbr-what-is-it/0fc7b558-d8d4-4a7d-bae2-395455bb19aa
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。