malwaredb/malwaredb-rs

GitHub: malwaredb/malwaredb-rs

基于 Rust 的自建恶意软件样本管理系统,支持样本存储、分类、哈希检索、相似性搜索和 YARA 规则匹配。

Stars: 56 | Forks: 7

## 恶意软件 DB [![Test](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/e760713c71213827.svg)](https://github.com/malwaredb/malwaredb-rs/actions/workflows/test.yml)[![Lint](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/c551c5a3be213842.svg)](https://github.com/malwaredb/malwaredb-rs/actions/workflows/lint.yml)[![Cross](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/b86ae2d16f213844.svg)](https://github.com/malwaredb/malwaredb-rs/actions/workflows/release.yml)[![Crates.io Version](https://img.shields.io/crates/v/malwaredb)](https://crates.io/crates/malwaredb)[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/malwaredb/malwaredb-rs/badge)](https://securityscorecards.dev/viewer/?uri=github.com/malwaredb/malwaredb-rs)[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/8234/badge)](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, 可视化界面, 哈希计算, 威胁情报, 开发者工具, 恶意软件, 恶意软件数据库, 恶意软件研究, 数字取证, 文件分析, 文件分类, 样本管理, 测试用例, 白名单, 相似性分析, 知识管理, 网络安全, 网络流量审计, 自动化脚本, 请求拦截, 逆向工具, 通知系统, 隐私保护