volatilityはどこにある?
Volatility
無料のメモリーフォレンジックツールでありインシデント対応で利用されるVolatilityについて学ぶRoomである。
Task1の本文でKali利用の場合はapt-get install volatility
でインストールできるとあるが以下のエラーとなりインストールできない。(下はaptだがapt-getでも同様にできなかった)
└─$ sudo apt install volatility
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
E: パッケージ volatility が見つかりません
└─$ volatility -h
volatility: コマンドが見つかりません
環境は以下のとおり。
└─$ lsb_release -a
No LSB modules are available.
Distributor ID: Kali
Description: Kali GNU/Linux Rolling
Release: 2022.4
Codename: kali-rolling
└─$ python
Python 2.7.18 (default, Aug 1 2022, 06:23:55)
[GCC 12.1.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
└─$ python3
Python 3.10.9 (main, Dec 7 2022, 13:47:07) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
このRoomを解くだけなら上のStart AttackBoxボタンをクリックして用意された環境でやればいいのだが自マシンで解けるようにする方法を考える。
ネットで紹介されているいくつかの方法で試してみたがvolatilityをインストールすることはできなかった。
その中で見つけたのが下の2つのチートシート。
HackTricks: Volatility - CheatSheet
onfvpBlog: Volatility CheatSheet
これらを参考にこのRoomを解いてみる。
Volatilityでメモリーイメージを調査する
Download Task Filesでメモリーイメージファイルをダウンロードする。
HackTricksのチートシートを参考にバイナリをインストールする。
Installation
スクリーンショットにあるようにvolatility3とvolatility2がある。本来はvolatility2は非推奨のようなので入れたくないがこの問題では先に進めないので入れてみる。
Method1はバイナリをダウンロードする方法。下のスクリーンショットのファイルをダウンロードすると、
volatility_2.6_lin64_standaloneが展開される。
これを使ってメモリーイメージの情報を調べてみる。
└─$ ./volatility_2.6_lin64_standalone -f ../cridex.vmem imageinfo
Volatility Foundation Volatility Framework 2.6
INFO : volatility.debug : Determining profile based on KDBG search...
Suggested Profile(s) : WinXPSP2x86, WinXPSP3x86 (Instantiated with WinXPSP2x86)
AS Layer1 : IA32PagedMemoryPae (Kernel AS)
AS Layer2 : FileAddressSpace (/home/***/TryHackMe/Volatility/cridex.vmem)
PAE type : PAE
DTB : 0x2fe000L
KDBG : 0x80545ae0L
Number of Processors : 1
Image Type (Service Pack) : 3
KPCR for CPU 0 : 0xffdff000L
KUSER_SHARED_DATA : 0xffdf0000L
Image date and time : 2012-07-22 02:45:08 UTC+0000
Image local date and time : 2012-07-21 22:45:08 -0400
これで良さそうだけど問題にあるvolatility -f MEMORY_FILE.raw imageinfo
とは違うのでバイナリファイル名をvolatility_2.6_lin64_standaloneからvolatilityに変更して使うと今後紛らわしくなくていい。
別の方法
Method2はビルドしてインストールする方法。
この方法ではバイナリファイルはできなかったのでvol.pyを使って問題を解く。
└─$ ls
AUTHORS.txt LEGAL.txt Makefile build pyinstaller setup.py volatility
CHANGELOG.txt LICENSE.txt PKG-INFO contrib pyinstaller.spec tools volatility.egg-info
CREDITS.txt MANIFEST.in README.txt dist resources vol.py
└─$ python vol.py -f ../cridex.vmem imageinfo
Volatility Foundation Volatility Framework 2.6.1
INFO : volatility.debug : Determining profile based on KDBG search...
Suggested Profile(s) : WinXPSP2x86, WinXPSP3x86 (Instantiated with WinXPSP2x86)
AS Layer1 : IA32PagedMemoryPae (Kernel AS)
AS Layer2 : FileAddressSpace (/home/***/TryHackMe/Volatility/cridex.vmem)
PAE type : PAE
DTB : 0x2fe000L
KDBG : 0x80545ae0L
Number of Processors : 1
Image Type (Service Pack) : 3
KPCR for CPU 0 : 0xffdff000L
KUSER_SHARED_DATA : 0xffdf0000L
Image date and time : 2012-07-22 02:45:08 UTC+0000
Image local date and time : 2012-07-21 22:45:08 -0400
これで良さそうだけどこれも問題にあるvolatility -f MEMORY_FILE.raw imageinfo
の"volatility"部分を頭の中で"python vol.py"にマッピングしてコマンドを発行することを忘れずに。
Method2の問題点
この方法で解いていったときにapihooksでエラーになってしまった。
エラーの原因は*** Failed to import volatility.plugins.malware.apihooks (NameError: name 'distorm3' is not defined)
とあるように'distorm3'がないためだった。
└─$ pip install distorm3
でインストールするだけなのだが自マシンではpipはpython3にしているのでpython3の環境に入ってしまいNGだったので└─$ pip2 install distorm3
でインストールすることに注意。ただしpython2-devがない場合WheelのビルドでPython.hがないエラーになってしまうのでこれも入れておく。
└─$ sudo apt install python2-dev
└─$ pip2 install wheel
└─$ pip2 install distorm3
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Collecting distorm3
Using cached distorm3-3.5.2.tar.gz (138 kB)
Building wheels for collected packages: distorm3
Building wheel for distorm3 (setup.py) ... done
Created wheel for distorm3: filename=distorm3-3.5.2-cp27-cp27mu-linux_x86_64.whl size=104343 sha256=02a7def7ed6e23e672fbdcb01c40a57b55d1420721a9604bfdc1ffd43f4852ce
Stored in directory: /home/***/.cache/pip/wheels/83/31/73/653b4e3e3bbb8db3495ba943e3192fbd9f8f3015fae69886dd
Successfully built distorm3
Installing collected packages: distorm3
Successfully installed distorm3-3.5.2
これでapihooksが使えるようになる。
└─$ python vol.py -f ../cridex.vmem apihooks
結論
通常使用ならMethod1のバイナリーをダウンロードして使用する方法が手軽なのでおすすめ。
機能を拡張して利用していくならMethod2のvol.pyを使用する方法やvolatility3のコマンドを使用するのがよいと思われる。
おまけ
ちなみにVolatilityは年末のAdventでも取り上げられていたのでご参考までに。
Task 16 [Day 11] Memory Forensics Not all gifts are nice