
Cosa Nostraは、マルウェア解析に焦点を当てたオープンソースのソフトウェアクラスタリングツールキットです。構造的に類似したバイナリマルウェアサンプルの系統樹を作成できます。SyScan360上海(2016)で初めて公開されました。
私は基本的に2016年から、たまたま友人であるたった一人のユーザーのためにメンテナンスしています...まあ。
Cosa Nostraを使用するには、Python 3.Xのバージョンと、コード解析を実行するための以下のツールのいずれかが必要です。
前述のツールのいずれかをインストールしたら、以下の例のように、適切なバッチツールを使用してマルウェアサンプルを解析する必要があります。
$ cd $COSA_NOSTRA_DIR
$ /path/to/ida64 -B -A -S/full/path/to/ida_batch.py example.exe
または
$ cd $COSA_NOSTRA_DIR
$ python r2_batch.py example.exe
マルウェアデータセットを解析する最も簡単な方法は、次の例のようなコマンドを実行することです。
$ find /your/malware/dataset/path -type f -exec python r2_batch.py {} ';'
次の例のように、「GNU Parallel」ツールを使用して並列実行することもできます。
$ find /your/malware/dataset/path -type f | parallel -j 8 ida64 -B -A -S/path/to/ida_batch.py {}
上記の例では、合計8つのpyew_batchプロセスが並列に起動されます。
マルウェアサンプルの解析後、解析が成功した場合、各サンプルのコールグラフデータはデフォルトで「db.sqlite」という名前の1つのSQLiteデータベースに保存されます。データベース名、パス、データベースシステムなどは、ファイル$COSA_NOSTRA_DIR/を編集することで設定できます。以下の例を参照してください。
$ cat config.cfg
########################################################################
# Configuration for SQLite3
########################################################################
[database]
dbn=sqlite
# Database name
db=db.sqlite
たとえば、MySQLデータベースシステムを使用したい場合は、config.cfgに以下の設定セクションを適切な値で追加することで設定できます。
########################################################################
# Example configuration for MySQL
########################################################################
[database]
dbn=mysql
# Database hostname or IP address
host=localhost
# Database name
db=db_name
# Database username
user=username
# Database password
pw=password
このステップは最も時間がかかります。データセット内のすべてのマルウェアサンプルを解析し、コールグラフシグネチャ、対応する素数などが計算されてデータベースに保存されると、次のステップはクラスタを見つけることです。そのためのツールは「cn_clusterer.py」です。これは同じデータベース設定ファイル($COSA_NOSTRA_DIR/config.cfg)を使用して、解析されたサンプルのコールグラフシグネチャを抽出します。以下のように実行するだけで簡単です。
$ cd $COSA_NOSTRA_DIR
$ ./cn_clusterer.py
(...)
Calculating difference matrix for 2357, iteration 5540280 out of 7507600 (4858784 matches, 600144 cache misses)
Calculating difference matrix for 2354, iteration 5543020 out of 7507600 (4861293 matches, 600373 cache misses)
Calculating difference matrix for 471, iteration 5545760 out of 7507600 (4863903 matches, 600373 cache misses)
(...)
Making tree for group with 59 sample(s), iteration 0 out of 256
Making tree for group with 393 sample(s), iteration 1 out of 256
Making tree for group with 1347 sample(s), iteration 2 out of 256
(...)
[Wed Nov 2 13:37:12 2016 2830:140561185462080] Creating unnamed cluster...
[Wed Nov 2 13:37:12 2016 2830:140561185462080] Creating cluster with name u'Win.Trojan.Skylock-4'...
[Wed Nov 2 13:37:12 2016 2830:140561185462080] Creating cluster with name u'Win.Downloader.133181-1'...
[Wed Nov 2 13:37:12 2016 2830:140561185462080] Creating cluster with name u'Win.Trojan.Agent-1213378'...
[Wed Nov 2 13:37:13 2016 2830:140561185462080] Done processing phylogenetic trees!
[Wed Nov 2 13:37:13 2016 2830:140561185462080] Done
プロセスが完了すると、解析されたマルウェアサンプルをグループ化したクラスタが指定されたデータベースに作成されます。
最後のステップは、web.pyベースのWebアプリケーションを起動してログインすることです。
$ cd $COSA_NOSTRA_DIR
$ python cosa_nostra.py [optional port to listen to]
http://0.0.0.0:YOURPORT/
次に、ブラウザを開き、cosa_nostra.pyが表示するアドレスに移動します。ユーザー名とパスワードを要求するログインフォームが表示されます。デフォルトでは「admin/cosanostra」です。これはファイル$COSA_NOSTRA_DIR/config.pyで変更できます。
$ cat config.py
#!/usr/bin/env python
#-----------------------------------------------------------------------
# Configuration for Cosa Nostra
#-----------------------------------------------------------------------
DEBUG=False
CN_USER="admin"
# SHA1 hash of the password "cosanostra", change to the SHA1 hash of
# whatever password you prefer.
CN_PASS="048920dedfe36c112d74dc8108abb4db5185a918"
(...)
ログインすると、左側のパネルから次のオプションのいずれかを選択できます。
「Clusters」ビューでは、異なるクラスタを選択して、発見されたマルウェアファミリの階層グラフを表示できます。
Cosa Nostraで表示されるクラスタのリスト:

Trojan.Backspace-1(ClamAVによる命名)の小さなクラスタ:

MiniDukesの小さなクラスタ:

Kazy/Bifrosesのクラスタ:

FannyWormsの非常に大きなクラスタの一部:
