开篇
在实际工作中,恶意软件分析人员迟早会面临维护的恶意软件样本库规模不断增长的问题。
与此同时,要维护的数据不仅仅是二进制样本,还包括样本分析之后得出的相关信息,比如从样本中提取的信息、样本与提取的信息之间的关联关系、样本与样本之间的关联关系、样本元数据等等。
MWDB,本篇文章要介绍的一个恶意样本存储库系统,能够使上面所述的样本维护工作变得非常轻松。它专为自动化恶意软件收集和分析系统而设计,提供了恶意软件样本、样本配置和分析工件的集中存储和管理,并具有灵活的对象搜索、共享和第三方系统集成功能。
安装
MWDB支持pip、docker-compose和k8s部署,为了简化安装过程,我们这里使用docker-compose来进行部署。
先将MWDB的github代码库克隆到本地:
git clone https://github.com/CERT-Polska/mwdb-core.git
克隆完成后,进入MWDB项目目录中,使用gen_var.sh脚本来在当前目录下生成初始配置文件mwdb-vars.env和postgres-vars.env:
[mwdb-core]$ ./gen_vars.sh Credentials for initial mwdb account: ----------------------------------------- Admin login: admin Admin password: 9670f6f4cf99551567d12f05b2a8bfdef27b ----------------------------------------- Please be aware that initial account will be only set up on the first run. If you already have a database with at least one user, then this setting will be ignored for security reasons. You can always create an admin account manually by executing a command. See "flask create_admin --help" for reference.
然后执行docker-compose build命令来基于当前的MWDB代码库构建docker镜像:
[mwdb-core]$ docker-compose build [+] Building 203.0s (40/40) FINISHED ...... docker:default => => naming to docker.io/certpl/mwdb:v2.15.1 0.0s ...... => => naming to docker.io/certpl/mwdb-web:v2.15.1
然后docker-compose up -d启动即可。
访问http://${ip},使用生成的mwdb-vars.env中的admin用户的账号密码进行登录即可进行MWDB主页面:

核心功能
MWDB的核心功能可以简单总结为如下几项:

基本概念
MWDB对恶意样本分析与存储过程中涉及到的各类概念进行了简化和抽象,并使用这些概念建立了一个符合实践的样本管理模型。 接下来我们就来一一介绍下这些概念。
对象

从上面的主页面中,可以看到MWDB中最重要的三类对象:
-
File:样本文件; -
Config:从样本中提取的静态配置或从 C&C 服务器获取的动态配置,格式为json; -
Blob:非结构化、人类可读的文本数据;
同时,这三类对象同时具备MWDB中对象的一些共同特性:
-
RBAC访问权限控制; -
添加对象评论; -
各类对象间的关系; -
添加标签和元数据;
File
文件是 MWDB 中的主要对象类型,用于存储各类形式的恶意软件样本和工件,例如二进制文件、内存转储文件、脚本文件、归档文件等等。当然,在实践中还是主要用于存储二进制样本文件。
在主页面上传一个文件后,即会跳转到该文件的详情页,可以看到该文件的一些基本属性:

Config
配置(Config)是 MWDB 中用 JSON 对象表示的结构化数据。
静态配置通常在恶意样本中提取,比如:
-
恶意软件家族 -
C&C 服务器地址 -
DGA 种子 -
用于通信的加密密钥 -
恶意软件版本 -
僵尸网络/活动 ID -
……
静态配置决定了恶意软件样本执行的操作,且可以用来判断不同样本之间的相似性。
另一方面,恶意软件的操作也通过从C&C服务器获取的数据进行外部参数化。这些数据被称为动态配置 ,比如:
-
要执行的命令 -
新的 C&C IP 地址 -
邮件模板 -
……
下面是一个配置上传后的详情页:

Blob
在 MWDB 中,Blob 表示以非结构化形式存储的各种数据 ,这些数据经过简单格式化以便于人类阅读。此外,还可以存储本来属于Config的数据,但这些数据太大而无法方便地用 JSON 表示 。
Blob主要用于存储以下几种类型的数据:
-
提取的字符串; -
yara规则、分析报告; -
从 C&C 服务器获取的注入到恶意软件中的内容; -
垃圾邮件机器人的邮件模板; -
从 P2P 僵尸网络的 C&C 服务器获取的peers列表; -
其它格式的Config的内容,比如xml格式的Config;

标签
标签(Tag)是用于对对象进行分类的简单字符串,允许在样本库中快速搜索特定标签的样本。

属性
属性是由唯一的键值对组成的集合,可以用于存储外部系统的分析结果或其它任意信息,比如virustotal的分析结果。

关系
MWDB 中的对象之间可以通过父子关系形成有向无环图。这些关系表示恶意软件样本、提取的配置和相关构件之间的逻辑联系。

查询
MWDB的搜索系统提供了一个强大的基于 Lucene 的查询引擎,用于在 MWDB 中查找对象(文件、配置、blob)。它支持字段特定搜索、布尔运算符、范围、通配符和关系遍历的复杂查询。
比如下面的查询为包含标签”arch:x86_64″和”os:windows_10″,以及文件大小大于10MB的所有样本。

插件
MWDB通过插件系统来扩展用户需要自定义的能力,其主要包括前端插件和后端插件,我们这里主要介绍后端插件。
后端插件只是 MWDB 从指定位置导入的 Python 包,下面是MWDB配置文件中关于插件的配置项:
### 插件配置 # 0代表关闭插件系统 (default: 1) # enable_plugins = 0 # 要加载的插件模块名称,多个插件用逗号分隔 # plugins = # 插件模块放置的本地目录 # local_plugins_folder = ./plugins # 是否自动发现配置的本地目录下的所有插件(default: 0) # local_plugins_autodiscover = 1
后端插件可以允许我们增加自定义的功能,其提供的hook系统使用了响应对象生命周期事件的事件驱动架构。
我们可以在插件中定义在不同事件发生时的处理逻辑,比如在样本上传事件发生时,对该样本查询virustotal信息,并将virustotal信息添加到该样本的属性中。
下面是一个基本的插件代码:
import logging
from mwdb.core.plugins import PluginAppContext, PluginHookHandler
from mwdb.model import File
# 插件基本信息
__author__ = "just me"
__version__ = "1.0.0"
__doc__ = "Simple hello world plugin"
logger = logging.getLogger("mwdb.plugin.hello_world")
# 定义事件处理类
class HelloHookHandler(PluginHookHandler):
# 文件上传事件处理方法
def on_created_file(self, file: File):
logger.info("Nice to meet you %s", file.file_name)
# 文件重新上传事件处理方法
def on_reuploaded_file(self, file: File):
logger.info("Hello again %s", file.file_name)
# 插件入口点函数,在该函数内注册事件处理类
def entrypoint(app_context: PluginAppContext):
logger.info("Hello world!")
app_context.register_hook_handler(HelloHookHandler)
# 标识事件处理函数
__plugin_entrypoint__ = entrypoint
总结
MWDB凭借其强大的查询语言、灵活的插件系统以及便捷的API和SDK,成为了样本自动化处理系统的理想后端存储服务。无论是对于研究人员还是开发者来说,MWDB都是一个值得信赖和选择的优秀工具。

转自:https://mp.weixin.qq.com/s/UH-JStWGOK_hjugU9oDkRQ?mpshare=1&scene=1&srcid=1112GSwsUGqaCe6csaVDVsLV&sharer_shareinfo=4fad30d51e94d2c2c92130ad713a3b34&sharer_shareinfo_first=4fad30d51e94d2c2c92130ad713a3b34&color_scheme=light#rd
转载请注明:jinglingshu的博客 » MWDB: 灵活的恶意样本存储系统