malwaredb/malwaredb-rs
GitHub: malwaredb/malwaredb-rs
基于 Rust 的自建恶意软件样本管理系统,支持样本存储、分类、哈希检索、相似性搜索和 YARA 规则匹配。
Stars: 56 | Forks: 7
## 恶意软件 DB
[](https://github.com/malwaredb/malwaredb-rs/actions/workflows/test.yml)[](https://github.com/malwaredb/malwaredb-rs/actions/workflows/lint.yml)[](https://github.com/malwaredb/malwaredb-rs/actions/workflows/release.yml)[](https://crates.io/crates/malwaredb)[](https://securityscorecards.dev/viewer/?uri=github.com/malwaredb/malwaredb-rs)[](https://www.bestpractices.dev/projects/8234)
受 [VXCage](https://github.com/botherder/vxcage) 和 [VirusTotal](https://www.virustotal.com/) 启发,Malware DB 是一个恶意软件知识管理系统,负责处理有关恶意软件/良性软件样本的记录工作:哈希值、来源、相似性、文件类型等。其目的是帮助恶意软件/网络安全研究人员、取证调查人员以及其他需要处理恶意软件或来源不明文件的人员。目前这**非常是一个正在进行中的工作**,且处于**测试质量**阶段。此外,本程序并非旨在防止因存储、处理或允许访问恶意软件样本而产生的各种不良后果;请风险自负。务必遵循最佳实践。不存在任何明示或暗示的保证或担保。
Malware DB 曾在 [Shmoocon](https://www.shmoocon.org) 2025 上展示:[幻灯片](https://github.com/rjzak/malwaredb_shmoocon_2025/releases/download/v1/MalwareDB_Shmoocon_Firetalk.pdf)
### 主要特性:
* 存储恶意、良性或未知的文件样本。
* 按以下方式对样本进行分类:
* 标签,构建您自己的自定义分层分类法。
* 来源,即样本的来源。
* 按组权限,基于用户所属组的成员身份访问文件
* 通过哈希值获取样本
* 基于文件相似性搜索(需要下文提到的 Postgres 插件)或通过 Yara 规则搜索
* 解析文件中可能对机器学习模型有用的特征(未来功能)
* 可在任何现代操作系统上运行
* 允许对磁盘上的文件进行加密,以免服务器引起端点安全或杀毒软件的问题
* 支持使用[默认密钥](https://github.com/CybercentreCanada/cart-rs/blob/7ad548143bb85b64f364804e90cfada6c31cf902/cart_container/src/cipher.rs#L14-L17)的 [CaRT](https://github.com/CybercentreCanada/cart) 格式。
### 系统要求:
* [Postgres](http://postgresql.org/) 数据库服务器,优于 [SQLite](https://sqlite.org)。
* [Rust](https://www.rust-lang.org/) 以从源代码编译。或者从[发布页面](https://github.com/malwaredb/malwaredb-rs/releases/)安装已发布的二进制文件。
* [libmagic](https://www.darwinsys.com/file/),即 `file` 命令。在 Linux 上安装 `libmagic-dev`,或在 macOS 上通过 [Homebrew](https://brew.sh/) 执行 `brew install libmagic`。
* 在 Windows 上:`cargo install cargo-vcpkg; vcpkg install libmagic; vcpkg integrate install`
* 可以使用 `MAGIC` 环境变量来指定 libmagic 数据库的路径。
* Postgres 的相似性哈希扩展:
* [LZJD](https://github.com/malwaredb/LZJD)
* [SSDeep](https://github.com/malwaredb/ssdeep_psql)
* [TLSH](https://github.com/malwaredb/tlsh_pg)
* 或者,使用 [docker](https://github.com/malwaredb/docker),它提供了一个已安装 Postgres 扩展的容器(尽管仍需激活,请参阅 [readme](https://github.com/malwaredb/docker/blob/main/README.md))。
### 安装
有几种安装选项:
* 从[最新版本](https://github.com/malwaredb/malwaredb-rs/releases/latest)安装二进制文件。提供适用于 ARM 和 x86 的 Debian 软件包。提供适用于 Linux、macOS 和 Windows(ARM 和 x86)的二进制文件。如果您需要 32 位二进制文件或用于不同操作系统的二进制文件,则必须从源代码编译。
* 从源代码安装:
* 如果尚未安装,请[安装 Rust](https://rust-lang.org/tools/install/)。
* `git clone https://github.com/malwaredb/malwaredb-rs.git`
* `cd malwaredb-rs`
* `cargo build --release --features=admin,admin-gui,sqlite,vt,yara`
* 通过从 crates.io 构建从源代码安装:
* 如果尚未安装,请[安装 Rust](https://rust-lang.org/tools/install/)。
* `cargo install malwaredb-client`
* `cargo install malwaredb --features=admin,admin-gui,sqlite,vt,yara`(激活所有功能,需要一些外部依赖)
Python 客户端可在 [PyPI](https://pypi.org/project/malwaredb/) 上获取:
* `pip install malwaredb` 以获取 Python 模块
#### 功能特性
服务器功能(均为可选):
* `admin`:命令行管理功能,至少在初始配置服务器时需要。
* `admin-gui`:由 [Slint](https://slint.dev/) 驱动的 GUI,已在 macOS、Linux、Windows 上测试并运行,也许能在其他地方运行?
* `sqlite`:允许使用 [SQLite](https://www.sqlite.org/) 作为数据库后端。这主要用于测试,但对于较小的环境应该没问题。
* `vt`:允许(但仍需启用)Virus Total 功能(缓存所含样本的 AV 数据,如果 VT 之前未见过这些样本,可选择将其提交给 VT)。
* `yara`:启用使用 [YARA](https://virustotal.github.io/yara/) 规则搜索文件的功能。
### 未来规划
* 计划中的功能:
* 作为独立应用程序的 Web 界面
* GUI 应用程序
* 支持 [Confidential Computing](https://en.wikipedia.org/wiki/Confidential_computing)
* 最初针对 Enarx:[网站](https://enarx.dev/),[代码](https://github.com/enarx/enarx)
* 在 [Confidential Computing Consortium](https://confidentialcomputing.io/) 网站了解更多信息。
* 加密样本(如果已存储),以免主机系统上的杀毒软件触发警报或导致意外感染。
* 基于恶意和良性文件的特征训练 ML 模型:
* 特定领域的特征(从特定文件类型解析的特征)
* 类型无关的特征(关于任何字节序列的信息,例如 n-grams、熵、长度等)
* 使用用户输入的标签/标记
* 来自 Virus Total 信息的标签,通过 `ClarAVy` ([代码](https://github.com/NeuromorphicComputationResearchProgram/ClarAVy),[论文](https://arxiv.org/abs/2310.11706)) 或 [AVClass2](https://arxiv.org/abs/2006.10615) 等工具获取。
* 潜在功能:
* 针对 HDFS、S3 等的文件存储后端?
* 缺少什么?联系我们:提交 [issue](https://github.com/malwaredb/malwaredb-rs/issues/new) 或发起 [讨论](https://github.com/orgs/malwaredb/discussions)!
### 入门指南:
0. 从源代码编译,理想情况下使用 `--features=admin,sqlite`。
1. 创建您的配置文件。使用 `sqlite` 功能进行编译以使用 `SQLite`。这更多是为了测试和评估,而不是在真实环境中使用。请参阅存储库根目录中的示例文件。
* 如果存储部分为空(这是可选的),则 Malware DB 将仅存储有关文件的元数据,而不会存储样本。这意味着获取原始文件将不可用。
2. 将配置文件放在 Linux 上的 `/etc/mdb_server/mdb_config.toml`,或 FreeBSD 上的 `/usr/local/etc/mdb_server/mdb_config.toml` 以便自动检测配置文件。否则,请使用 `mdb_server run load /path/to/file` 运行,或使用 `mdb_server run config` 在命令行中指定参数。使用 `--help` 运行以查看详细信息。
#### Postgres
一些用于创建 Postgres 数据库的示例命令可能有用:
```
CREATE USER malwaredb WITH PASSWORD 'PUT_YOUR_STRONG_PASWORD_HERE!';
-- If you expect to have a large collection, consider making a Tablespace on a larger drive.
CREATE TABLESPACE malwaredb LOCATION '/path/to/tablespace';
CREATE DATABASE malwaredb OWNER malwaredb; -- Owner name must match above.
CREATE DATABASE malwaredb OWNER malwaredb TABLESPACE malwaredb; -- Owner name must match above, use this option if you created a Tablespace.
```
然后,加载所需的扩展。请参阅:
* [LZJD](https://github.com/malwaredb/LZJD)
* [SSDeep](https://github.com/malwaredb/ssdeep_psql)
* [TLSH](https://github.com/malwaredb/tlsh_pg)
对于每一个,在连接到数据库后,以 Postgres 管理用户(Linux 上通常是 `postgres`)身份运行各自 readme 中引用的安装命令。它可能看起来像这样:
```
root@localhost:~# su - postgres
postgres@localhost:~$ psql malwaredb
psql (17.6 (Debian 17.6-0+deb13u1))
Type "help" for help.
malwaredb=# CREATE OR REPLACE FUNCTION tlsh_compare(TEXT, TEXT) RETURNS INTEGER AS 'tlsh_psql.so', 'pg_tlsh_compare' LANGUAGE 'c';
CREATE FUNCTION
malwaredb=# exit
postgres@localhost:~$
```
### 管理事项
1. 由于您在上面使用了 `admin` 功能编译,因此可以运行 `mdb_server admin --help` 查看管理选项。管理选项需要 `-c /path/to/config.toml` 以防止意外更改。注意:使用 `admin` 命令直接与数据库交互,因此不需要运行服务器。
2. 列出用户:`mdb_server admin -c /path/to/config.toml list users`。有一个默认的 admin 用户,但未设置密码。所以让我们设置一个。
3. 重置 Admin 的密码:`mdb_server admin -c /path/to/config.toml reset-password --uname admin`。系统会提示您输入密码,并且不会回显。admin 用户目前不做任何特殊操作,但这将会改变。
4. 文件按来源组织,而组有权访问来源。因此,必须添加组和来源并将它们链接起来才能添加文件。
* 创建来源,查看命令行选项:`mdb_server admin -c /path/to/config.toml create source --help`
* 创建组,查看命令行选项:`mdb_server admin -c /path/to/config.toml create group --help`
* 将组添加到来源,查看命令行选项:`mdb_server admin -c /path/to/config.toml add-group-to-source --help`
* 将用户添加到组,查看命令行选项:`mdb_server admin -c /path/to/config.toml add-user-to-group --help`
5. 在 `mdb_server` 运行时使用客户端通过 `mdb_client` 登录:`mdb_client login http://localhost:8080 admin`,将 URL 替换为您在服务器配置文件中选择的实际 IP 和端口。
6. 使用 `mdb_client whoami` 测试客户端是否工作,它应该显示用户信息以及可用的组和来源。
### 加载文件
* 可以使用客户端上传文件:`mdb_client submit-samples -s SOURCE_ID /path/to/files_or_dirs`。路径可以是文件或目录,并且可以指定多个路径。所有项目都将上传到同一个来源(由 ID 指定)。如果文件是 Zip,它将在内存中解压缩,并且每个文件将单独提交,只要它不是已知的文档类型(如 MS Office .docx、.xlsx 等)。
* 也可以使用服务器的 admin 命令上传文件:`mdb_server admin -c /path/to/config.toml -s SOURCE_ID -u USER_ID /path/to/files_or_dirs`。使用服务器 admin 功能时,还必须提供用户 ID。否则,这与客户端的工作方式相同,可以提供目录和文件,它们将与同一个来源关联,并且 Zip 文件将在内存中解压缩并单独提交(如果不是已知的 MS Office 格式)。
### 下载文件
* 使用客户端,可以通过样本的哈希值来检索样本。哈希类型通过长度检测,支持的哈希算法有:MD5、SHA1、SHA256、SHA384 和 SHA512。
* `mdb_client retrieve-sample SPECIFY_HASH_HERE`。每次请求一个哈希值,如果文件存在且用户有权访问该样本链接的组和来源,则会下载该文件。
### 搜索相似文件
* 使用客户端,计算相似性哈希并提交给服务器。样本不会发送到服务器!仅发送哈希值。
* `mdb_client find-similar /path/to/file.bin`。与下载相同的限制适用:用户必须有权访问潜在相似文件链接的组和来源。输出将是相似文件的哈希值,以及通过何种方式(相似性算法)得出的相似结果。
### 其他客户端命令
* `mdb_client server-info` 显示有关服务器的一些统计信息,包括版本号、数据库类型和文件总量。
* `mdb_client server-types` 显示支持的文件类型列表和魔数。
### 目标
一些总体目标和设计:
* Malware DB 应易于使用。
* Malware DB 应成为存储*您的*数据的地方,并使用简单的数据库模式,以便其他应用程序可以直接与数据交互。
* Malware DB 应收集并丰富恶意和良性文件,以便某些特征可用于机器学习模型。
* Malware DB 应提供可重用的组件,即使不直接相关,也可能使其他项目受益。
标签:pdftotext, Rust, Shmoocon, VirusTotal 替代, VXCage, 可视化界面, 哈希计算, 威胁情报, 开发者工具, 恶意软件, 恶意软件数据库, 恶意软件研究, 数字取证, 文件分析, 文件分类, 样本管理, 测试用例, 白名单, 相似性分析, 知识管理, 网络安全, 网络流量审计, 自动化脚本, 请求拦截, 逆向工具, 通知系统, 隐私保护