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, 基础设施安全, 安全学习资源, 无后门, 漏洞挖掘, 网络信息收集, 网络安全, 逆向工具, 隐私保护