LoginSignup
0
0

More than 1 year has passed since last update.

【TryHackMe】Room:Volatilityを解くにあたり困ったこと

Last updated at Posted at 2023-02-06

volatilityはどこにある?

Volatility
無料のメモリーフォレンジックツールでありインシデント対応で利用されるVolatilityについて学ぶRoomである。
image.png

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でメモリーイメージファイルをダウンロードする。
image.png

HackTricksのチートシートを参考にバイナリをインストールする。
Installation
スクリーンショットにあるようにvolatility3とvolatility2がある。本来はvolatility2は非推奨のようなので入れたくないがこの問題では先に進めないので入れてみる。
image.png

Method1はバイナリをダウンロードする方法。下のスクリーンショットのファイルをダウンロードすると、
image.png

volatility_2.6_lin64_standaloneが展開される。
image.png
これを使ってメモリーイメージの情報を調べてみる。

└─$ ./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はビルドしてインストールする方法。
image.png
この方法ではバイナリファイルはできなかったので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

onfvpBlogのチートシートのコマンドを実行する。
image.png

└─$ 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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0