Malcom 是一款旨在通过图形化表示网络流量,并与已知恶意软件源进行交叉引用,从而分析系统网络通信的工具。这在分析特定恶意软件种类如何尝试与外界通信时非常有用。
Malcom 可以帮助你:
Malcom 的目标是通过提供来自特定主机或网络的网络流量的人类可读版本,使恶意软件分析和情报收集更快。更快地将网络流量信息转化为可操作的情报。
查看 wiki 获取快速入门指南,其中包含一些漂亮的截图以及关于如何添加你自己的数据源的教程。
如果你需要帮助,或者想参与贡献,欢迎加入邮件列表或尝试在 IRC 上找人(#malcom on freenode.net,虽然很安静但总有人在)。你也可以在 Twitter 上联系我 @tomchop_
这是一个主机 tomchop.me 的示例图:

数据集视图(过滤后仅显示 IP):

mongodb 和 redis-server 正在运行./malcom.py -c malcom.conf(或查看选项:./malcom.py --help)
** 如需示例配置文件,可以将 malcom.conf.example 复制为 malcom.conf
** 默认端口为 8080
** 或者,通过 celery 运行数据源。有关如何操作的详细信息,请参阅数据源部分。Malcom 使用 Python 编写。只要你有必要的库,就应该能在任何平台上运行。我强烈建议使用 Python 虚拟环境(virtualenv),以免弄乱系统库。
以下步骤已在 Ubuntu Server 14.04 LTS 上测试通过:
安装 git、python、libevent 库、mongodb、redis 及其他依赖项:
$ sudo apt-get install build-essential git python-dev libevent-dev mongodb libxml2-dev libxslt-dev zlib1g-dev redis-server libffi-dev libssl-dev python-virtualenv
克隆 Git 仓库:
$ git clone https://github.com/tomchop/malcom.git malcom
创建并激活虚拟环境:
$ cd malcom
$ virtualenv env-malcom
$ source env-malcom/bin/activate
获取并安装 scapy:
$ cd ..
$ wget http://www.secdev.org/projects/scapy/files/scapy-latest.tar.gz
$ tar xvzf scapy-latest.tar.gz
$ cd scapy-2.1.0
$ python setup.py install
仍在虚拟环境中,从 requirements.txt 文件安装必要的 Python 包:
默认情况下,Malcom 会尝试连接本地 mongodb 实例并创建自己的数据库,名为 malcom。如果这对你来说没问题,可以跳过以下步骤。否则,你需要编辑 malcom.conf 文件中的 database 部分。
默认情况下,Malcom 会使用名为 malcom 的数据库。你可以通过编辑 malcom.conf 文件并设置 database 部分中的 name 指令来更改此行为。
[database]
...
name = my_malcom_database
...
默认情况下,Malcom 会尝试连接 localhost,但你的数据库可能位于另一台服务器上。要更改这一点,只需设置 hosts 指令。你可以使用主机名或 IPv4/v6 地址(请记住将 IPv6 地址括在 [ 和 ] 之间,例如 [::1])。
如果你想使用位于 my.mongo.server 主机上的独立数据库,只需设置:
[database]
...
hosts = my.mongo.server
...
你也可以通过在用冒号分隔的服务器名称/地址后指定 mongod 监听的端口:
[database]
...
hosts = localhost:27008
...
如果你使用包含 my.mongo1.server 和 my.mongo2.server 的 ReplicaSet,只需设置:
[database]
...
hosts = my.mongo1.server,my.mongo2.server
...
你可能已将 mongod 实例配置为强制进行身份验证连接。在这种情况下,你必须设置驱动程序用来连接 mongod 实例的用户名。为此,只需在 malcom.conf 文件的 database 部分添加 username 指令。你可能还需要使用 password 指令设置密码。如果用户没有密码,只需忽略(即注释掉)password 指令。
[database]
...
username = my_user
password = change_me
...
如果该用户未关联到 malcom 数据库,而是关联到其他数据库(例如管理用户的 admin 数据库),则需要使用 authentication_database 指令设置该数据库的名称。
[database]
...
authentication_database = some_other_database
...
使用副本集时,你可能需要确保连接到正确的副本集。为此,只需添加 replset 指令,以强制 mongo 驱动程序检查副本集的名称。
[database]
...
replset = my_mongo_replica
...
默认情况下,Malcom 会尝试连接副本集的主节点。你可能需要/希望更改这一点。要更改此行为,只需设置 read_preference 指令。有关更多信息,请参阅 mongo 文档。
[database]
...
read_preference = NEAREST
...
支持的读取偏好有:
启动的最快方法是从公共 Docker 仓库拉取 Docker 镜像。要拉取更旧、更稳定的 Docker 构建版本,请使用 tomchop/malcom 而不是 tomchop/malcom-automatic。
$ sudo docker pull tomchop/malcom-automatic
$ sudo docker run -p 8080:8080 -d --name malcom tomchop/malcom-automatic
连接到 http://<docker_host>:8080/ 即可开始使用。
Malcom 现在支持 TLS 拦截。为此,你需要在 Malcom/networking/tlsproxy/keys 目录中生成一些密钥。有关如何执行此操作的更多信息,请参阅该目录中的 KEYS.md 文件。
请确保你还拥有 IPtables(你应该已经有了)以及使用它进行端口转发的权限(通常需要 root 权限)。你可以使用方便的 forward_port.sh 脚本来完成此操作。例如,要拦截所有发往 443 端口的 TLS 通信,请使用 forward_port.sh 443 9999。然后,你需要告诉 malcom 在端口 9999 上运行拦截代理。
预计此过程将在未来版本中自动化。
Malcom 是在 Ubuntu Server 14.04 LTS 虚拟机上设计和测试的。
如果你习惯进行恶意软件分析,你可能已经在主机操作系统上运行了大量虚拟机。只需在新的虚拟机上安装 Malcom,然后将其他虚拟机的连接路由到 Malcom。使用 enable_routing.sh 脚本激活 Malcom 所在虚拟机上的路由/NAT。你需要在客户操作系统中添加额外的网卡。
只要能够获取第3层网络数据,Malcom 就可以部署在任何地方。虽然不建议在高可用性网络上使用它(它并不是为速度而设计的,请参阅免责声明),但你可以将其放在交换机镜像端口或网关的末端。
要启动一个仅从数据源获取信息的 Malcom 实例,请使用 --feeds 选项运行 Malcom,或修改配置文件。
你的数据库应自动填充。如果你能深入研究代码,添加数据源非常简单(假设你正在生成 Evil 对象)。你可以在 /feeds/zeustracker 找到一个示例数据源。更详细的教程请点击此处。
你也可以使用 celery 来运行数据源。确保已安装 celery,方法是从虚拟环境中运行 $ pip install celery。然后,你可以使用 celery worker -E --config=celeryconfig --loglevel=DEBUG --concurrency=12 启动包含 12 个并发工作者的数据源处理进程。
Malcom 主要从头编写,使用 Python。它使用以下框架运行:
协作 - 我希望该工具的主要发展方向是变得协作。我对此有一些想法,一旦实现数据共享,我认为它将变得 100 倍更有用。
可扩展性 - 我计划包含的另一个功能是更容易扩展该工具。我并不是每个人都有相同的需求,这个工具也是基于我自己的需求而构思的。你现在可以通过添加新的数据源来自定义 Malcom。
一旦协作和扩展功能正常运作,我认为这将对不止一个事件响应者有帮助。:-)
此工具是在我的空闲时间编写的。就像我们日常下载和使用的大量工具一样,我不建议在生产环境中使用它,因为数据稳定性和可靠性是必须的。
它处于开发的早期阶段,意思是“它对我有用”。你可以自由分享、改进它,或请求拉取请求。
Malcom - 恶意软件通信分析器 版权所有 (C) 2013 Thomas Chopitea
本程序是自由软件:你可以根据自由软件基金会发布的 GNU 通用公共许可证(许可证版本 3,或(按你的选择)任何更高版本)重新分发和/或修改它。
本程序的发布是希望它有用,但没有任何保证;甚至没有适销性或特定用途适用性的默示保证。有关更多细节,请参阅 GNU 通用公共许可证。
你应该已收到一份 GNU 通用公共许可证的副本。如果没有,请访问 http://www.gnu.org/licenses/。
请注意,Redis、MongoDB、d3js、Maxmind 和 Bootstrap(以及 Malcom 中包含的其他第三方库)可能拥有自己的与 GPL 兼容的许可证。
$ cd ../malcom
$ pip install -r requirements.txt
为了启用 IP 地理定位功能,需要下载 Maxmind 数据库并将文件解压到 malcom/Malcom/auxiliary/geoIP 目录。你可以从以下链接获取 Maxmind 免费(因此准确度一般)的数据库:http://dev.maxmind.com/geoip/geoip2/geolite2/:
$ cd Malcom/auxiliary/geoIP
$ wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
$ gunzip -d GeoLite2-City.mmdb.gz
$ mv GeoLite2-City.mmdb GeoIP2-City.mmdb
从 malcom 目录使用 ./malcom.py 启动 web 服务器。使用 ./malcom.py --help 查看监听接口和端口。
malcom.conf.example 文件复制为 malcom.conf,然后运行 ./malcom.py -c malcom.conf