⚠️ 免责声明 (Disclaimer)
本系统仅供网络安全教育、红蓝对抗演练及防勒索软件检测能力测试使用。 严禁在未经授权的生产环境中使用本系统。作者及贡献者不对因滥用本工具造成的任何数据丢失或法律后果负责。请务必在隔离的虚拟机或测试网络中运行。
🏗️ 系统架构概览
本系由三个核心组件构成,模拟了完整的勒索软件攻击生命周期:
攻击端 (Agent):
加密程序 (Ransomware Simulator): (需配合使用) 在目标主机运行,加密文件并生成 UUID。
C2 信标 (C2 Worker): 接收被感染主机的“心跳”信号,记录受害者 IP 和指纹。
恢复端 (Recovery):
密钥门户 (Key Portal Worker): 面向受害者的 Web 界面,用于通过 UUID 查询并下载解密密钥。
解密程序 (Decryptor): 运行在受害主机上,利用下载的私钥恢复文件。
🚀 第一部分:服务端部署 (Cloudflare Workers)
本系统后端完全依赖 Cloudflare Workers 和 D1 数据库,无需租赁服务器。
1. 部署 C2 信标 (C2 Beacon)
此 Worker 用于收集受害主机的基本信息(IP, User-Agent)。
在 Cloudflare Dashboard 创建一个新的 Worker (例如命名为
c2-listener).将 C2 Worker 代码粘贴到编辑器中。
部署上线。
记录 URL:
https://c2-listener.your-subdomain.workers.dev(配置到模拟器中使用)。
2. 部署密钥门户 (Key Portal)
此 Worker 提供受害者界面和密钥 API。
准备 D1 数据库:
在 Cloudflare 创建一个 D1 数据库 (例如命名为
ransom-db).进入控制台,执行以下 SQL 初始化表结构:
CREATE TABLE keys ( uuid TEXT PRIMARY KEY, public_key TEXT, private_key TEXT, rid TEXT );创建 Worker:
新建 Worker (例如命名为
recovery-portal).粘贴密钥门户 Worker 代码。
绑定数据库:
在 Worker 的
Settings->Variables->D1 Database Bindings中。变量名设置为:
search(必须与代码一致)。选择刚才创建的
ransom-db。
部署上线。
⚔️ 第二部分:红队演练 (攻击模拟)
前置条件
确保您的 D1 数据库中已存在测试用的密钥对。 在真实演练开发中,勒索模拟器应自动调用 API 将生成的私钥上传至 D1 数据库。在此演示中,您可以手动插入一条数据用于测试:
INSERT INTO keys (uuid, public_key, private_key, rid) VALUES ('test-uuid-1234', '...公钥PEM...', '...私钥PEM...', 'ID-001');运行勒索模拟器 (Ransom Simulator)
(假设您已编译好之前的加密程序)
# Windows
ransom_simulator.exe -dir "C:\Users\Target\Documents"
# Linux/macOS
./ransom_simulator -dir ./test_data现象确认:
目标目录下的文件被添加
.encrypted后缀。生成了勒索信 (Readme.txt),其中包含唯一的 UUID。
C2 Worker 后台应收到信标日志。
🛡️ 第三部分:蓝队/受害者操作 (恢复流程)
当发现文件被加密后,遵循以下标准恢复流程。
1. 编译解密工具
使用 Go 语言环境编译 decryptor.go:
go build -o decryptor decryptor.go2. 获取解密密钥
打开勒索信 (Readme) 找到 UUID。
访问 密钥门户 Worker 的 URL (例如
https://recovery-portal.your-subdomain.workers.dev)。在网页输入框中输入 UUID,点击“查询密钥”。
查询成功后,点击“下载”按钮,保存
private_key_test-uuid-1234.pem到本地。
3. 执行解密
将解密工具和私钥文件放置在受害主机上。
基本用法:
./decryptor -key-file ./private_key_xxxx.pem -dir ./encrypted_folder参数说明:
示例输出:
2023/10/27 10:00:01 Loading RSA private key...
2023/10/27 10:00:01 Private key loaded successfully.
2023/10/27 10:00:01 Scanning directory './data' for encrypted files...
2023/10/27 10:00:02 Decrypted: ./data/secret.doc.encrypted -> ./data/secret.doc
...
2023/10/27 10:00:05 Decryption complete. Processed 50 files in 4.2s.🔧 故障排查 (Troubleshooting)
Q1: 门户网站提示 "D1 数据库绑定 'search' 未正确初始化"
原因: Worker 未正确绑定 D1 数据库。
解决: 检查 Cloudflare Worker 设置中的变量绑定,确保变量名为
search且指向了正确的数据库。
Q2: 解密程序报错 "failed to decrypt AES key"
原因: 下载的私钥与加密文件的公钥不匹配。
解决: 确认输入的 UUID 是否正确;确认测试用的公私钥对是否匹配。
Q3: 解密程序报错 "authentication failed"
原因: 文件内容被篡改或损坏 (AES-GCM 校验失败)。
解决: 文件已损坏,无法通过此密钥恢复。
📂 项目结构
.
├── Simulator/
│ ├── ransom_simulator.go # 加密源码
│ └── ransom_simulator.exe # 编译后的攻击载荷
├── Decryptor/
│ ├── decryptor.go # 解密源码 (本手册核心)
│ └── decryptor.exe # 编译后的恢复工具
├── Cloudflare/
│ ├── c2_worker.js # C2 信标监听代码
│ └── portal_worker.js # 密钥恢复门户代码
└── README.md # 说明文档