jenkinsmichpa/coconut_crab

GitHub: jenkinsmichpa/coconut_crab

基于 Rust 的勒索软件攻击模拟平台,用于安全教育和事件响应培训。

Stars: 1 | Forks: 1

# Coconut Crab ![Coconut Crab Logo](coconut_crab_client/assets/img/favicon.ico "Coconut Crab Logo") # 描述 ## 概述 这是一个使用 Rust 构建的客户端 (coconut_crab_client) / 服务器 (coconut_crab_server) 应用程序,用于模拟勒索软件攻击。 **本软件仅限用于教育目的,不得用于造成损害。** 包含以下附加应用程序: - **coconut_crab_base_drop** - 一个基本的投放器,带有自包含的 Web 客户端,用于下载并执行 coconut_crab_client - **group_docx_tool** - 用于创建和验证先前为组创建的 DOCX 文件真实性的工具 - **group_docx_drop** - 附带的 bash 脚本,用于将 DOCX 文件复制到其关联组的 DC 共享中 **(未经测试)** - **coconut_crab_blue_drop** - 封装 [AutoBlue](https://github.com/3ndG4me/AutoBlue-MS17-010/blob/master/zzz_exploit.py) 的工具,利用 MS-17-010 漏洞下载并执行 coconut_crab_client **(未经测试)** ### 通信 以下 HTTPS 请求按顺序发送: 1. **Download(下载)** - 客户端下载非对称公钥 2. **Registration(注册)** - 客户端上传 ID 和主机名 3. **Symmetric Key Upload(对称密钥上传)** - 客户端上传经过非对称加密的对称密钥 4. **Symmetric Key Recovery(对称密钥恢复)** - 客户端因过早结束请求对称密钥(如果未完成且在可接受的时间段内) 5. **Completion Announcement(完成通知)** - 客户端通知已完成加密过程 6. **Symmetric Key Download(对称密钥下载)** - 客户端提供解密代码并下载对称密钥 ### 加密管道 客户端执行以下步骤来加密文件: 1. 遍历文件系统 2. 分析文件以避开蜜罐(可选) 3. 创建新的加密文件 4. 覆盖并删除现有的明文文件 ### 客户端 GUI ![Coconut Crab Client GUI](coconut_crab_client_gui.png "Coconut Crab Client GUI") ## 功能特性 - 除非能访问到服务器,否则不会运行(以对抗沙箱) - 分析模式:列出文件而不加密 - 可配置的受害者 GUI,接受代码进行解密 - 可配置的传输中 TLS 加密 - 可配置且易于修改以存在缺陷或生成用于检测的工件 - 可配置的允许和阻止列表 - 文件系统路径 - 文件扩展名 - 可配置的加密延迟时间和抖动 - 可配置的蜜罐 avoidance(规避) - 分析 PDF 和 Office / Zip 文件 - 避开隐藏目录和文件 - 识别关键字 - 识别非默认 URL - 识别损坏的图像 - 通过注册表项实现可配置的持久化 - 实现具有(可能过于)详细输出的日志 crate - 客户端输出在 debug 模式下自动显示,在 release 模式下隐藏 - 不太可疑的输出可执行文件 - Windows PE 文件,包含图标和属性 - 所有必要的证书 / 资产都嵌入在 EXE 文件中 - 包括由服务器提供的客户端 EXE - 所有持久化应用程序信息都存储在 CSV 中,以便于查看和修改 - 可配置的桌面壁纸设置 - 享受使用 Rust 编写的好处,包括 - AV(杀毒软件)对它的效果不佳 - 速度 - 编译后的可执行文件 - 客户端的多线程管道 - 服务器的异步设计 - 内存安全 / 无垃圾回收 - 跨平台(-ish) - 实现标准 / 经过审查的加密 crate(RSA 和 ChaCha20) ## 注意事项 由于这是一个用于教育而非实际使用的应用程序,设计中采取了一些捷径,包括以下内容: - 使用内置的 secret 进行请求验证,并且每个客户端共享该 secret - 作为缓解措施,该 secret 使用 litcrypt 进行了混淆 - 发送到服务器的每个请求都结合 secret 进行了 SHA265 哈希处理以进行验证 - 服务器容易受到 DoS 攻击,因为它没有实现速率限制 - 服务器不具备抗重放攻击能力 - 默认情况下,应用程序配置为使用公开已知的 RSA 密钥对进行加密 - 这些可以在编译前更改 - 默认情况下,应用程序配置为不验证 HTTPS 证书,以允许使用自签名证书 - 可以通过配置启用验证 - 客户端必须先从服务器请求公钥才能开始(以便为学生创建工件) - 默认情况下,公钥会写入受害者的硬盘。这可以通过配置禁用。 **我不是软件工程师,这也是我第一次接触 Rust。小心数据丢失!** # 用法 ## 配置 ### 客户端配置 客户端配置变量位于 `coconut_crab_client/src/main.rs` 的顶部 变量 | 摘要 --- | --- server_port | 远程 Web 服务器端口(必须与服务器匹配) server_fqdn | 远程 Web 服务器主机名或服务器的 IP 地址 allowlist_paths | 要目标的路径 blocklist_paths | 要避开的路径(可选) allowlist_extensions | 要目标的文件扩展名(可选) blocklist_extensions | 要避开的文件扩展名(可选) encrypted_extension | 应用于加密文件的文件扩展名 save_public_key_to_disk | 客户端是否应将公共加密密钥保存到磁盘 set_wallpaper | 客户端是否应将桌面壁纸设置为应用程序图标 https | 客户端是否应使用 HTTP 或带有 TLS 的 HTTPS verify_server | 客户端是否应验证 HTTPS 证书 analyze_mode | 是否应记录文件而不是加密 persist | 是否应创建注册表启动项 avoid_hidden | 客户端是否应避开隐藏目录和文件 avoid_urls | 客户端是否应避开 Office 文件中非原生出现的 URL avoid_keywords | 客户端是否应避开与蜜罐文件关联的关键字 avoid_broken_images | 客户端是否应避开无法正确渲染的图像 analyze_office_zip | 客户端是否应分析 office 和 zip 文件中的蜜罐 analyze_pdf | 客户端是否应分析 pdf 文件中的蜜罐 random_order | 客户端是否应随机化文件加密顺序 wait_time | 文件加密之间等待的时间(设置为 0 表示无延迟) jitter_time | 应用于 wait_time 的时间差异 preshared_secret | 用于验证 Web 请求的代码(必须与服务器匹配) GUI 文本可以在 `coconut_crab_client/ui/main.slint` 中配置 应用程序图标放置在 `coconut_crab_client/assets/img/favicon.ico` EXE 属性可以在 `coconut_crab_client/Cargo.toml` 的 `[package.metadata.winres]` 下配置 持久化客户端变量可以在可执行文件生成的 `status.csv` 中找到 ### 服务器配置 客户端配置变量位于 `coconut_crab_server/src/main.us` 的顶部 变量 | 摘要 --- | --- PORT | Web 服务器端口(必须与客户端匹配) RECOVERY_WINDOW | 客户端丢失对称密钥时可恢复的时间段 PRESHARED_SECRET | 用于验证 Web 请求的代码(必须与客户端匹配) BYPASS_CODE | 用于解锁任何客户端解密的代码 解密代码可以在可执行文件生成的 `victims.csv` 文件中找到 ## 编译 ### 配置 HTTPS 证书 HTTPS 证书放置在以下路径中: - `coconut_crab_lib/assets/cert/ca-cert.pem` - `coconut_crab_lib/assets/cert/cert.pem` - `coconut_crab_lib/assets/cert/key.pem` HTTPS 证书生成示例: ``` openssl req -x509 -newkey rsa:4096 -keyout ca-key.pem -out ca-cert.pem -sha256 -days 3650 -nodes -config ./ca-cert.cnf openssl req -newkey rsa:4096 -nodes -keyout key.pem -out server.csr -config ./cert.cnf openssl x509 -req -in server.csr -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -days 3650 -sha256 -extfile cert.ext ``` - 有关示例配置和扩展文件,请参阅 `coconut_crab_lib/assets/cert/ca-cert.cnf`、`coconut_crab_lib/assets/cert/cert.ext` 和 `coconut_crab_lib/assets/cert/cert.ext` ### 配置加密证书 加密证书放置在以下路径中: - `coconut_crab_server/assets/public/asym-pub-key.pem` - `coconut_crab_server/assets/private/asym-priv-key.pem` 加密证书生成示例: ``` openssl genrsa -out private.pem 2048 openssl rsa -in private.pem -pubout -out public.pem openssl rsa -in private.pem -out private_pkcs1.pem -traditional openssl rsa -pubin -in public.pem -RSAPublicKey_out -out public_pkcs1.pem -traditional ``` ### 准备 Windows 以进行编译 1. 下载并安装 [rustup](https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe) 2. 下载并安装 [cmake](https://cmake.org/download/) ### 准备 Linux 以进行编译 ``` apt update apt install build-essential pkg-config libssl-dev mingw-w64 curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh source $HOME/.cargo/env rustup target add x86_64-pc-windows-gnu ``` ### 在 Windows 上编译客户端以用于 Windows ``` cargo build --release --bin coconut_crab_client ``` 编译后的可执行文件将输出到 `target/release/coconut_crab_client.exe` ### 在 Windows 上编译服务器以用于 Windows 将编译后的客户端可执行文件复制到 `coconut_crab_server/assets/public/coconut_crab_client.exe` ``` cargo build --release --bin coconut_crab_server ``` 编译后的可执行文件将输出到 `target/release/coconut_crab_server.exe` ### 在 Linux 上编译客户端以用于 Windows ``` cargo build --release --target x86_64-pc-windows-gnu --bin coconut_crab_client ``` 编译后的可执行文件将输出到 `target/x86_64-pc-windows-gnu/release/coconut_crab_client.exe` ### 在 Linux 上编译服务器以用于 Linux 将编译后的客户端可执行文件复制到 `coconut_crab_server/assets/public/coconut_crab_client.exe` ``` cargo build --release --bin coconut_crab_server ``` 编译后的可执行文件将输出到 `target/release/coconut_crab_server` # 支持 如果您在使用本应用程序时遇到任何问题,请随时联系 [Michael Jenkins](https://jenkinsmichpa.com)。 # 作者与致谢 本项目由 [Michael Jenkins](https://jenkinsmichpa.com) 在 [Samuel Ho](mailto:ho176@purdue.edu) 的帮助下开发,用于普渡大学 CNIT 47000 - 事件响应管理课程的教学。 # 许可证 本项目采用 MIT 许可证授权。
标签:DAST, DNS 反向解析, dropper, HTTPS通信, IP 地址批量处理, PE 加载器, Rust, 下载器, 云配置检测, 勒索软件, 可视化界面, 子域名变形, 安全教育, 客户端/服务器, 对称加密, 底层编程, 恶意软件分析, 文件加密, 模拟攻击, 永恒之蓝, 沙箱规避, 网络攻击模拟, 网络流量审计, 网络防御训练, 自动化审计, 通知系统, 非对称加密