Cosa Nostra 是一个专注于恶意软件分析的开源软件聚类工具包。它能够为结构相似的二进制恶意软件样本构建系统发育树。该工具最初在 2016 年上海 SyScan360 大会上发布。
自 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" 的 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 一个非常大的聚类中的一小部分:
