pyrebox超入門1　～インストール＆ゲストOSの準備編～

#0.　はじめに

##pyreboxって何？　何のの役に立つの？
pyreboxは、qemu（Vbox,VMwareみたいなものです）をベースにして作られたリバースエンジニアリングサンドボックスです。pyreboxを使えば、

* 特定の命令、基本ブロック（basic block）の実行
* NICのデータ送受信
* メモリの読み書き
* プロセス作成
* キーボード入力
* etc...

が発生したときにpythonスクリプトを起動して、

* volatility frameworkのライブラリから仮想マシンを解析
* メモリの編集

などができます。



##対象とする読者
* pyreboxを導入したいが英語をバリバリ読むのは嫌な人（バリバリ読める人は[こちらを読めばおK](https://media.readthedocs.org/pdf/pyrebox/latest/pyrebox.pdf)）
* qemu使ったことないのでpyrebox導入をどうすればいいのかよくわかんなかった人

あとVirtualBox/VMwareを使った経験があるといいかも（なくてもダイジョブですが、”ホストOS”等の用語は解説しません。）

##注意事項
* ホストOSはdebian系を想定して書きます。それ以外の方は、この記事を流し読みした後、[**これ**](https://media.readthedocs.org/pdf/pyrebox/latest/pyrebox.pdf)を見ながら導入するのがいいと思います。
* ２０１７年１２月の情報を基に書いています。最新の情報は、[**こちら**](https://github.com/Cisco-Talos/pyrebox)から仕入れてください。

#１.　pyreboxのインストール
現時点では、インストーラによるインストールはサポートされてないそうです。なのでまずはgitでもとのリポジトリをクローン（ホームディレクトリ以外にクローンするなら以下は適宜読み替えてください。）

```bash
$ cd ~
$ git clone https://github.com/Cisco-Talos/pyrebox/
```
次に必要なパッケージをインストールしてください。

```bash
# 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を作成して必要なモジュールなどをインストール

```bash
$ cd ~/pyrebox/
$ virtualenv pyrebox_venv
$ source pyrebox_venv/bin/activate
$ pip install -r requirements.txt
```

以降pyreboxを使うときは忘れずにvirtualenvをactivateしてください。
`$ source pyrebox_venv/bin/activate`
最後にビルド

```bash
$ ./build.sh
```

これでインストールは完了です。

#2.　pyrebox用仮想マシンの起動
すでに述べた通りpyreboxはqemuベースなので、qemuの仮想マシンを扱う要領でpyreboxように仮想マシンを作成、起動します。qemuの詳しい使い方は次回述べることとして、今回は仮想マシンを作ってゲストOSをインストールするところまで行きます。

##仮想ハードディスクの作成

```bash
$ 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のインストールディスクを用意してください。（ここでは[こちら](http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1708.iso)からダウンロードしてきたcentosのisoを使います）

いよいよ起動....といきたいところですが、その前にpyrebox.confというファイルを作らないといけないので、お好みのエディタで`~/pyrebox/`下にpyrebox.conf`というファイルを作って以下を書いてください。

```~/pyrebox/pyrebox.conf
[MODULES]

[VOL]
profile: [ゲストOSに合わせたプロファイル名（補足１参照）]
```

[MODULES]は起動時に読み込むpyrebox moduleのことで、今は空で大丈夫です。
[VOL]はvolatility framework のプロファイル名らしいので、~~ここではテキトーにCentosとしています。~~（追記：ここを適当にするとvolatility がうまく動かないので、補足１を見て適切なのを選んでください。）

ではいよいよ起動です。

```bash
$ ./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ドキュメント](https://media.readthedocs.org/pdf/pyrebox/latest/pyrebox.pdf)

#次回はこちらー＞[超入門２](https://qiita.com/najayama/items/9817878be28f06796f9d)

#補足１ volatility framework のプロファイルの設定
#1. ゲストOSがWindowsの場合
`pyrebox/volatility`に移動してvol.pyを実行してください。

```bash
$ 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などの場合。
まずプロファイルを入手

```bash
$ 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`

次にプロファイル名を調べます。

```bash
$ cd ~/pyrebox/volatility/
$ python vol.py --info |less
```

するとおそらくProfilesの先頭に

```
Profiles
--------
LinuxUbuntu....(以下略)
```
みたいなのが現れるはずなので、LinuxCentOS65x86だのLinuxUbuntu14043x64だのから適切なものをpyrebox.confにコピーアンドペーストすればOKです。