Viperを利用したバイナリ解析

概要

今回はバイナリ解析フレームワークのViperについて書いていく

Viperとは

Viper(http://viper.li)とはバイナリ解析フレームワークのこと。
バイナリ解析機能の他に解析したバイナリとその情報を管理する機能を持っている。
主にマルウェアやエクスプロイトの解析を目的に作られており、それらを円滑に行えるよう様々な機能が用意されている。

インストール

環境は以下のとおりである。

$ uname -s -r -p -v
Linux 3.19.0-59-generic #66~14.04.1-Ubuntu SMP Fri May 13 17:27:10 UTC 2016 x86_64

Viperのインストールドキュメントはここ(http://viper-framework.readthedocs.io/en/latest/installation/index.html)にある。
インストールにあたって必要なソフトウェアをあらかじめインストールしておく。

$ sudo apt-get install gcc python-dev python-pip

次にpipを使って必要なものをインストールする。

$ sudo pip install SQLAlchemy PrettyTable python-magic

加えてssdeepとpydeepをインストールする。
ssdeepとはファジーハッシュを利用するためのプログラムである。
ファジーハッシュについては(http://www.ffri.jp/assets/files/monthly_research/MR201403_Consideration_and_evaluation_of_using_fuzzy_hashing_JPN.pdf) (pdf直リンク注意)を参照。
pydeepはpythonからssdeepを利用するためのライブラリである。
ダウンロードリンクは(http://ssdeep.sourceforge.net/#download)
ダウンロードしたディレクトリに移動した後に下記コマンドを入力。

$ tar -zxvf ssdeep-X.XX.tar.gz
$ cd ssdeep-X.XX
$ ./configure && make
$ sudo make install
$ sudo pip install pydeep

次にTorを利用した通信を行うバイナリの解析を行うためにライブラリをインストールする。

$ sudo apt-get install python-socksipy

次にViper本体のインストールに入る。
と言ってもgitからcloneして依存関係を解決するだけである。

$ git clone https://github.com/viper-framework/viper
$ sudo pip install -r requirements.txt

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

使い方

Viperはプロジェクト単位でバイナリを管理することができる。
プロジェクトは下記コマンドで作ることができる。

$ ./viper-cli -p test

まずは適当なファイルを解析対象としてViperに認識させる。

test viper > open -f ./a.out
[*] Session opened on ./a.out
test viper a.out [not stored] > 

これらのファイルはセッションという形で管理されている。

test viper a.out [not stored] > sessions --list
[*] Opened Sessions:
+---+-------+----------------------------------+---------------------+---------+
| # | Name  | MD5                              | Created At          | Current |
+---+-------+----------------------------------+---------------------+---------+
| 1 | a.out | bdf422ad25a052fb661107bd6f7ff77d | 2016-06-03 20:55:30 | Yes     |
+---+-------+----------------------------------+---------------------+---------+

この状態でstoreコマンドを入力するとセッションで開いているファイルをプロジェクトに登録される。
yaraによるスキャンを自動的にしてくれているようだ。
helpコマンドで見た感じ、プロジェクトやセッションの管理と言った動作の命令はコマンドと呼ばれ、解析はモジュールで行っているようだ。
モジュールで解析とは言ってもモジュール名をコマンドのように入力すればいい。
プロジェクトに登録したら各種モジュールで解析していく。
以降はいくつかのモジュールを紹介する。

  • apkモジュール

Androidのアプリケーションを解析するモジュール。
AndroGuard(https://github.com/androguard/androguard/archive/v2.0.tar.gz) をインストールしないと動かないようだ。

ローカル環境のclamavで解析するモジュール。
'pyclamd'をpipでインストールしないと動かないようだ。

  • cuckooモジュール

cuckooサンドボックスと連携するモジュール。

  • elfモジュール

elfファイルを解析するモジュール。
セクション情報やシンボル情報といった要素を調べられる。
エントロピー欄が何を表しているかはわからなかった。

  • r2モジュール

radare2と連携するモジュール。
便利そう。

  • shellcodeモジュール

シェルコードを抜き出すモジュールらしい。
動作未検証

これらの他にもpeファイルやjarファイル、画像ファイルやofficeドキュメントを解析するモジュールがある。
IDA proやradare2といったツールやvirustotalといったサービスと連携するモジュールも用意されており解析の基盤として使えるかもしれない。
あとから自分でモジュールを作って追加できることも強みだろう。

webインターフェース

Viperはwebインターフェースから利用することもできる。
利用するには下記コマンドを入力する。

$ ./viper-web 
Bottle v0.12.9 server starting up (using WSGIRefServer())...
Listening on http://localhost:9090/
Hit Ctrl-C to quit.

アクセスするとこのような画面になっており操作できる。

他にもAPIサーバとして使えるとかフレームワークとして使う方法とかあるが今回はここまで

今度ファイルを解析するときに使ってみたいと思う。