SANS SIFTのVolatilityの更新 | reverse-eg-mal-memoのブログ

reverse-eg-mal-memoのブログ

サイバーセキュリティに関して、あれこれとメモするという、チラシの裏的存在。
medium(英語):https://sachiel-archangel.medium.com/

アメリカの実践的なセキュリティの教育をしているSANSが、フォレンジックに使うツールをまとめたLinuxイメージを公開しています。

 

SANS DFIR SIFT Workstation

https://digital-forensics.sans.org/community/downloads

 

実際に使いこなすには、FOR500、FOR508あたりを受講しないと難しいですが。

https://digital-forensics.sans.org/training


Volatility Frameworkはオープンソースのメモリフォレンジックツールで、公式が以下で公開してます。

https://www.volatilityfoundation.org

 

今回は、SIFTにインストールされているのVolatility Frameworkを使ってメモリイメージを解析しようとしたところ、問題が起きたのでその解決方法をメモしておきます。

 

 

メモリの解析でエラー

 

メモリイメージはダンプツールで取得しています。

今回は、Magnet社が無償で配布しているMagnetRAMCapture.exeを使わせていただきました。

(ただし、ダウンロードは無償ですが、ユーザ登録が必要です。)

 

早速、メモリイメージの概要を分析します。

 

vol.py -f (イメージファイル名) imageinfo

 

 

 

ここで、ツールで解析を進めるにあたって最も欲しいのはProfile情報です。

メモリイメージは、OSの種類やバージョンによってレイアウトが変わるため、正しいプロファイルを指定しないと正しく解析できません。

Suggested Profile(s)に出ているのが推測されたプロファイルとなります。

実際には、OSからメモリダンプをする際にバージョンを控えておいたほうがいいでしょう。

 

問題はここから。

今回用いた、マルウェア解析用のWindowsのバージョン(バージョン1709、ビルド16299.492)と合わないのです。

試しに、一番近そうなプロファイルでpslistを実行してプロセスリストを表示してみます。

 

vol.py -f (イメージファイル名) --profile=Win10x64_10586 pslist

 

 

 

うーん、なんかそれっぽいリストはでたものの、ところどころ「?」や関係ない文字が混じっています。

少し上手く解析できておらず、関係ないデータを読んでしまっている模様。

さらに、hashdumpを実行するとエラー。レジストリは上手く読めないようです。

 

vol.py -f (イメージファイル名) --profile=Win10x64_10586 hashdump

 

 

 

やはり、バージョンの違いでパーサーが推測するメモリのレイアウトが合わない模様。

特にWindows10になってからは、大きなバージョンアップの度にメモリのレイアウトが変わっているようです。

 

--infoで対応しているプロファイルリストを表示させてみると、やはりダンプしたメモリイメージに対応したプロファイルがない模様。

 

 

 

 

Pluginの更新で解決

 

そこで、Volatilityに新たなソースがないか調べてみました。

ソースはGithubで公開されています。

https://github.com/volatilityfoundation/volatility

 

 

「Clone or download」でzipファイルを任意のディレクトリにダウンロードし、解凍します。

 

unzip volatility-master.zip

 

このファイルの中のうち、「plugins」を更新してやれば上手くいくはず

SANS SIFTには既にvolatilityがインストールされています。

pluginsへのパスは以下のとおり

 

/usr/lib/python2.7/dist-packages/volatility/plugins

 

 

(2020年6月21日追記)

2020年6月時点でダウンロードしたSANS SIFTでは、以下のディレクトリに変更になっていました。

/usr/local/lib/python2.7/dist-packages/volatility/plugins

 

dist-packageの下に、volatility/pluginsがあるかどうかで判断してください。

 

(2020年6月21追記 その2)

以下の方法の場合、plugin/communityの下にある機能(autorunsなど)が使えなくなります。

必要に応じて、plugin_oldのcommunityディレクトリのデータをコピーしてください。

ただし、この手順でpluginを変えるほどの変更がある場合、communityの古いコードでは上手く動かないことがあります。その場合は、作成者のコードをgithub等で入手して適用してください。

 

 

このプラグインを更新してみます。

一応、古いプラグインはリネームして残しておきます。

(※注意:例は volatility-master.zip を /home/sansforensics/vol で解凍していた場合)

cd /usr/lib/python2.7/dist-packages/volatility/plugins
sudo mv plugins plugins_old
sudo cp -rp /home/sansforensics/vol/volatility-master/volatility/plugins .

 

--infoでプロファイルを確認したところ、Windows10のプロファイルが増えています

 

 

 

今度は上手くバージョンが合うかもしれない、ということで、新しいプラグインでもう一度imageinfoしてみます。

 

vol.py -f (イメージファイル名) imageinfo

 

 

 

Win10x64_15063でインスタンス化されている、というようなメッセージがでているので、これをプロファイルに使用してみます。

(一応、バージョンは調べてなかった想定)

プロファイルに Win10x64_15063 を指定して、再度pslistを実行します。

 

vol.py -f (イメージファイル名) --profile=Win10x64_15063 pslist

 

 

 

今度は pslist も結果が正しく表示されました。

さらに、hashdumpを実行してレジストリが読めるかを確認します。

 

vol.py -f (イメージファイル名) --profile=Win10x64_10586 hashdump

 

 

ハッシュ値がちゃんと表示されました。

メモリダンプしたのはマルウェア検証用のVMですが、一応ハッシュ値は隠しておきます。

今回のハッシュ値の検証用に作ったユーザは、VMを戻すと消えるので例として残しておきます。

 

今回は、Windowsのパスワードハッシュに関してちょっと確認・検証してみたくて、その準備中に躓いてしまい、その解決法が分かったのでメモしておきました。

Volatilityはマメに更新されているので、手動でのアップデートもちょくちょくやることになるかなと思います。

割と、pluginの更新でいけちゃうことや、pluginのパスを忘れてしまうので。

このメモの元になったNTLMハッシュ関連については、検証が終わってネタになりそうならまたメモしておきます。