【Forensic】Volatility使用方法まとめ【ツールメモ】
前置き
まずは2020年、あけましておめでとうございます。
旧年はセキュリティキャンプに参加したり個人的にも色々あったりなかなか壮絶な年でしたが、今振り返ってみるとなかなか充実していたようにも思えます。今年は就活が控えている(というか真っただ中)ので、まずはそっちを優先しつつ、終わったら色々な勉強会とか趣味のこととかもやっていきたいと思っています。
何はともあれ、今年もよろしくお願いします。
さて、新年のあいさつも早々に、さっそく本題の方に入っていきたいと思います。新年一発目のContrailCTFにちょっとだけ顔を出してみたのですが、Volatility力不足が露呈したので(ほかの力も様々壊滅的でしたが...)ちょっとVolatilityについてまとめてみたいと思います。
Volatilityについて
そもそもVolatilityとは何ぞや?という人もいるかもしれないので簡単にまとめておこうと思います。(どこか間違えてるところとかあったら、最下のtwitterアカウントまで連絡いただけると助かります。)
実際のインシデントにおいて、有益な情報という物は様々な個所から発見されますが、最も有益な情報というのはインシデントに見舞われたマシンのメモリダンプから得られることが多いようです。メモリダンプのサイズは非常に大きく、解析するのは困難なように思えますが、Volatilityを使うことで簡単に調査できるようです。
ちょっと本論からは逸れますが、一般的なCTFのForensic問題に対するアプローチがctf101に書いてあったので抜粋して載せておきます。
- stringsコマンドを対象イメージに対して実行してみる
- 対象イメージがどのOSのものかを評定する
- プロセスをダンプし、疑わしいプロセスを探す
- 注目したプロセスのデータをダンプする
- ダンプしたデータの内で、対象プロセスと関連のあるもののデータを見てみる
English is too much very difficult...
訳がイマイチなので、参考のところの原文を見ておくことをお勧めします
オプションとか
上記の流れに沿う形で、Volatilityのオプションをまとめていきたいと思います。一通りまとめ終わったところで、余力があったら他のオプションについてもまとめていきたいと思います。(執筆時点で1/4の0302...)
対象イメージの評定
volatility_2.6_win64_standalone.exe -f 対象イメージ imageinfo
-fオプションとimageinfoで対象OSやハードウェアアーキテクチャなどの全体把握に役立ちそうな情報が得られます。また、DTB(Directory Table Base)アドレスや、根の理ダンプが取得された時間なども確認することができます。
プロセスのダンプ/データのダンプ
volatility_2.6_win64_standalone.exe -f 対象イメージ --profile=Win7SP1x64 pstree
メモリダンプ時に動いていたプロセスの一覧は、-fオプションと対象イメージの後ろに対象OSとpstree、pslistないしpsscanを追加することで取得できます。ダンプの結果、evel.exeとか明らかに怪しいプロセスが動いてたら、下のコマンドでデータをダンプします。
volatility_2.6_win64_standalone.exe -f 対象イメージ --profile=Win7SP1x64 memdump -p 2228 -D dump
先のpstreeオプションの代わりにmemdump -p PID dir/を指定すると、対象のPIDを持つプロセスのデータをdir/ディレクトリ内にPID.dmpの形で出力します。(ここから先はstringsやらgrepを駆使していくのだろうか?)
レジストリの仮想アドレスの取得
レジストリの仮想アドレスを取得するためには、以下のコマンドを使うようです。
volatility_2.6_win64_standalone.exe -f 対象イメージ --profile=Win7SP1x64 hivelist
大体重要な情報は\SystemRoot\System32\Config\SAMであったり、\REGISTRY\MACHINE\SYSTEMにハッシュ値として保存されてたりして(時間ができたら詳しく書きます)、先のコマンドでこれらのメモリ上でのアドレスが分かるのでこれらのハッシュ値を取り出します。取り出したら煮るなり焼くなり好きにするといいんだと思います。
volatility_2.6_win64_standalone.exe -f 対象イメージ --profile=Win7SP1x64 hashdump -s 0xfffff8a0063fa010 -y 0xfffff8a000024010 > hash.txt
ハッシュ値のダンプはhashdumpを用い、-y直後のアドレスは\REGISTRY\MACHINE\SYSTEMの仮想アドレスを示し、-s直後の仮想アドレスは\SystemRoot\System32\Config\SAMの仮想アドレスを指します。
ContrailCTFのForensic問題で実践してみる
現在時刻0436、頑張ります...
対象イメージの評定
レジストリの仮想アドレスの取得
ハッシュ値の取得
この中のAliceのものをhttps://crackstation.net/ に投げると
i<3orange.
が帰ってきたので、これのMD5ハッシュ値を求め、対象の暗号化されたzipに投げると、無事解凍される。
ctrctf{Y0u_c4n_dump_4nd_cr4ck_hash!}