#0. はじめに
##pyreboxって何? 何のの役に立つの?
pyreboxは、qemu(Vbox,VMwareみたいなものです)をベースにして作られたリバースエンジニアリングサンドボックスです。pyreboxを使えば、
- 特定の命令、基本ブロック(basic block)の実行
- NICのデータ送受信
- メモリの読み書き
- プロセス作成
- キーボード入力
- etc...
が発生したときにpythonスクリプトを起動して、
- volatility frameworkのライブラリから仮想マシンを解析
- メモリの編集
などができます。
##対象とする読者
- pyreboxを導入したいが英語をバリバリ読むのは嫌な人(バリバリ読める人はこちらを読めばおK)
- qemu使ったことないのでpyrebox導入をどうすればいいのかよくわかんなかった人
あとVirtualBox/VMwareを使った経験があるといいかも(なくてもダイジョブですが、”ホストOS”等の用語は解説しません。)
##注意事項
- ホストOSはdebian系を想定して書きます。それ以外の方は、この記事を流し読みした後、これを見ながら導入するのがいいと思います。
- 2017年12月の情報を基に書いています。最新の情報は、こちらから仕入れてください。
#1. pyreboxのインストール
現時点では、インストーラによるインストールはサポートされてないそうです。なのでまずはgitでもとのリポジトリをクローン(ホームディレクトリ以外にクローンするなら以下は適宜読み替えてください。)
$ cd ~
$ git clone https://github.com/Cisco-Talos/pyrebox/
次に必要なパッケージをインストールしてください。
# apt-get install build-essential zlib1g-dev pkg-config libglib2.0-dev binutils-dev libboost-all-dev autoconf libtool libssl-dev libpixman-1-dev libpython-dev python-pip virtualenv python-capstone
pyreboxディレクトリに移動してpyrebox用のvirtualenvを作成して必要なモジュールなどをインストール
$ cd ~/pyrebox/
$ virtualenv pyrebox_venv
$ source pyrebox_venv/bin/activate
$ pip install -r requirements.txt
以降pyreboxを使うときは忘れずにvirtualenvをactivateしてください。
$ source pyrebox_venv/bin/activate
最後にビルド
$ ./build.sh
これでインストールは完了です。
#2. pyrebox用仮想マシンの起動
すでに述べた通りpyreboxはqemuベースなので、qemuの仮想マシンを扱う要領でpyreboxように仮想マシンを作成、起動します。qemuの詳しい使い方は次回述べることとして、今回は仮想マシンを作ってゲストOSをインストールするところまで行きます。
##仮想ハードディスクの作成
$ cd ~/pyrebox
$ mkdir images
$ ./qemu/qemu-img create -f qcow2 -o compat=0.10 images/centos.qcow2 8G
もともとqemuにもqemu-img
というコマンドがありますが、pyrebox/qemu
下にあるバイナリを使わないといらん面倒に巻き込まれるらしいので気を付けてください。コマンドの軽い解説をしておくと、
-
qemu-img
は仮想ハードディスクを扱うコマンド - createは新規作成意味する
- -f はフォーマット、
qcow2
はqemuで使われる仮想ハードディスクの形式(VMware,Vboxでいう.vmdk, .vdiです)で、compat=0.10
はqcow2のバージョン番号みたいなもの -
images/centos.qcow2
が出来上がる仮想ハードディスクのパス - 8G 仮想ハードディスクの大きさ(使うゲストOSによって変えてください)
という感じです。
##ゲストOSの起動
まずゲストOSのインストールディスクを用意してください。(ここではこちらからダウンロードしてきたcentosのisoを使います)
いよいよ起動....といきたいところですが、その前にpyrebox.confというファイルを作らないといけないので、お好みのエディタで~/pyrebox/
下にpyrebox.conf`というファイルを作って以下を書いてください。
[MODULES]
[VOL]
profile: [ゲストOSに合わせたプロファイル名(補足1参照)]
[MODULES]は起動時に読み込むpyrebox moduleのことで、今は空で大丈夫です。
[VOL]はvolatility framework のプロファイル名らしいので、ここではテキトーにCentosとしています。(追記:ここを適当にするとvolatility がうまく動かないので、補足1を見て適切なのを選んでください。)
ではいよいよ起動です。
$ ./pyrebox-x86_64 -m 4096 -drive file=images/centos.qcow2,index=0,media=disk,format=qcow2,cache=unsafe -monitor stdio -cdrom ../Downloads/CentOS-7-x86_64-Everything-1708.iso -boot d
解説
- i386のOSを起動したいなら
./pyrebox-i386
を代わりに使ってください。 -
-m 4096
はメモリを4096MBに設定するという意味です。必要に応じて変えてください。 -
-monitor stdio
はqemuモニターをstdioに出せという意味で、これの使い方は次回にやります。 -
-cdrom ~
で起動ディスクの選択をしています。
成功すれば以下のような行が現れると思います。
VNC server running on 127.0.0.1:5900
なのでVNCクライアントでつなぎます。vncviewer,remmina などお好みのクライアントを使ってください。
vncveiwer なら、$ vncviewer ‘サーバーのアドレス‘
remmina なら $ remmina
と打てばGUIインターフェイスが出るはずです。
VNCクライアントの詳しい使い方は必要に応じて調べてください。
##ゲストOSのインストールなど
vboxなどと同じ要領でOSをインストールすればOKです。画面に出る指示に従ってインストールしてください。
(2017/12/17追記:インストールが済んで正常に起動できるようになったら、仮想ハードディスクをバックアップしたほうがいいかもしれません。HDDの容量が許すならですが、事故が起こったときにインストールをやり直すのは結構骨なので。)
今回はここまでです。もう少し仮想マシン関連で必要な手順がありますが、次回にします。
お疲れさまでした。
#参考になるであろうURL
pyreboxドキュメント
#次回はこちらー>超入門2
#補足1 volatility framework のプロファイルの設定
#1. ゲストOSがWindowsの場合
pyrebox/volatility
に移動してvol.pyを実行してください。
$ cd pyrebox/volatility/
$ python vol.py --info |less
すると上のほうに次のようなセクションが出るはずです。
profiles
--------
VistaSP0x86 - A profile for Windows Vista SP0 x86
VistaSP0x64 - A profile for WIndows Vista SP0 x64
(以下略)
このVistaSP0x86だのWinXPSP3x86だのの中から使用するゲストOSにあったものをpyrebox.confにコピーアンドペーストすればOKです。
#2. ゲストOSがLinuxなどの場合。
まずプロファイルを入手
$ cd ~
$ git clone:https://github.com/volatilityfoundation/profiles
そこから対応するOSのプロファイルを探す。例えばx86のUbuntuなら、profiles/linux/Ubuntu/x86
にZIPファイルがたくさんあるので、適切なものを選んでそれをpyrebox/volatility/volatility/plugins/overlays/linux
下にコピー
cp ~/profiles/Linux/Ubuntu/x86/Ubuntu12044.zip ~/pyrebox/volatility/volatility/plugins/overlays/linux
次にプロファイル名を調べます。
$ cd ~/pyrebox/volatility/
$ python vol.py --info |less
するとおそらくProfilesの先頭に
Profiles
--------
LinuxUbuntu....(以下略)
みたいなのが現れるはずなので、LinuxCentOS65x86だのLinuxUbuntu14043x64だのから適切なものをpyrebox.confにコピーアンドペーストすればOKです。