乐于分享
好东西不私藏

BEAR-C2 源码审计:仅监听器无 implant 的验证性 C2 框架

BEAR-C2 源码审计:仅监听器无 implant 的验证性 C2 框架

仓库地址:https://github.com/S3N4T0R-0X0/BEAR-C2

本文是对开源「APT 对抗模拟框架」BEAR-C2(v2.0)的源码级审计与可用性评估,阅读对象为蓝队/检测工程师。审计对象是单个 26,728 行、1.5MB 的 Python 文件,全部结论来自静态阅读源码,未运行任何组件。一句话结论先放在前面:这个项目把 C2 的服务端(监听器、会话管理、GUI)做得像模像样,但整个仓库没有提供任何植入体(implant)——C2 的两端只做了一端,能接收回连、下发命令的一端有了,部署到目标机器上实际干活的另一端没有,想真正用起来得自己写。下文给出逐块证据、加密实现的硬伤、可用性评分,以及蓝队可以怎么利用它。


目录

  • 1. 它宣传了什么
  • 2. 源码里实际有什么
  • 3. 加密实现是重灾区
  • 4. C2 可用性评估
  • 5. 蓝队怎么用与怎么防
  • 6. 结语
  • 参考资源

1. 它宣传了什么

BEAR-C2 在 GitHub 上的 README 相当唬人:APT29、Mustang Panda、Labyrinth Chollima 的组织旗帜插了一整面墙,功能表里罗列了:

  • 多协议监听:DoH / HTTPS / HTTP / QUIC / Reverse TCP
  • 每个监听器独立加密:AES / XOR / RC4 / DES / ChaCha20 / RSA
  • 外传 profile:Google Drive / OneDrive / Dropbox
  • 集成 Telegram、Discord C2 信道;DGA 域生成;JA3S 指纹定制;Malleable C2 profile
  • 「Stagers & Loaders:自动化的 stager 与 loader 技术」

一个 C2 框架该有的词几乎全出现了。问题是,这些词背后有多少代码?

2. 源码里实际有什么

整个项目就是一个 BEAR-C2.py(26,728 行),外加一个装研究样本的 Stagers-Loaders/ 目录。主文件的骨架:

行号区间
内容
47–8162
C2Interface
——8,100 行的 GUI 上帝类(customtkinter 桌面界面)
8162–9606
Telegram / Discord / Teams 三个云信道的服务端桥(telethon、discord.py、MS Graph)
10187–10395
六个加密类的实现
10460–文件尾
35 个服务器类:5 种协议 ×(明文 + 6 种加密)各一个类

三个第一眼就能确认的事实。

事实一:35 个服务器类是复制粘贴出来的。 Reverse TCP + AES 是一个类,Reverse TCP + XOR 是另一个类……每个类 300–650 行,构造器 30 多个参数原样重复 35 遍。修一个 bug 理论上要同步改 34 处。正常工程是一个协议类加一个可插拔的加密层,这是「把加密算法当架构」的典型反模式。

事实二:整个仓库里没有植入体生成器。 全文搜不到 agent 模板,没有 payload 编译或生成逻辑。35 个协议监听器,没有一个配套的 implant。README 说的「Stagers & Loaders」实际是一个静态样本册(HTML smuggling、ClickFix、DLL loader 等 28 个研究片段),没有任何一个能连上这些监听器。操作者在 GUI 里拿到密钥和认证 UUID 之后,要自己从零实现植入体:TCP 组帧、指定算法的加解密、首包发送加密 UUID 认证、执行服务端下发的 shell 命令并回传结果。

事实三:唯一的「两端齐全」是三个 IM 云信道。 Telegram/Discord/Teams 模式在服务端内嵌了 bot 客户端,Stagers-Loaders/Evil Agents Samples/ 里确实有配套的 C++ 植入体样例(winhttp 手写 JSON,无第三方依赖)。这是全仓库唯一开箱即用的组合——但它们走聊天平台信道,跟那 35 个 TCP/HTTP/QUIC/DoH 监听器完全不配套。

3. 加密实现是重灾区

这是对蓝队最有价值的部分:它的加密实现有硬伤,而这些硬伤本身就是检测机会

RC4:密钥流复用。RC4.crypt()(BEAR-C2.py:10239)每次调用都重新跑 KSA、从流的起点生成 keystream——同一个密钥下,每一条报文都用同一段密钥流加密。这是密码学教科书的 many-time-pad:抓到多条密文两两异或,密钥流直接消掉。C2 信道这么实现,等于没加密。

XOR:单字节密钥。xor_encrypt_decrypt()(BEAR-C2.py:10395)的实现是逐字节 b ^ key,key 是一个整数——256 种组合,暴力枚举不到一毫秒。

其余算法也不设防。 AES-CBC、DES-CBC、ChaCha20 全部没有完整性校验(无 MAC/AEAD),密文可被主动篡改;DES 的 56 位有效密钥出现在 2026 年的代码里。密钥和认证 UUID 展示在 GUI 里供操作者抄录——静态预共享、无轮换、无前向保密。

协议形态停留在上个时代。 会话建立后的「任务」就是一条加密传输的明文 shell 命令字符串,EP 前缀表示「按 PowerShell 执行」。没有结构化任务协议、没有任务队列、没有元数据——本质是加密的反向 shell。

4. C2 可用性评估

用途
评分
一句话
实战 C2
★★☆☆☆
服务端能跑、会话能管,但植入体自研 + 协议原始 + 加密有错,用起来等于自建半个框架
对抗模拟演示/教学
★★★★☆
GUI 完成度高,一键 mimikatz/枚举脚本、IM 云信道样例,「合法云服务承载 C2」的演示很直观
蓝队流量模拟器
★★★★☆
35 种协议×加密组合 + DoH/DGA/malleable profile,是现成的加密 C2 流量发生器

公平地说,它也有真材实料的地方。DoH 信道的参数面(shadow/pivot A 记录、spoofed TXT、DGA 域轮换、TXT 尺寸控制、能导入 Cobalt Strike 的 malleable profile)明显对标过 CS 的 DNS beacon;QUIC + 三个 IM 云信道的组合在开源项目里独一档。另外可以确认服务端没有后门:全文 4 处 eval(/exec( 全部在混淆器输出的载荷模板字符串里,服务端自身不执行动态代码,subprocess 仅用于 lsof -i :端口 的占用检查。

5. 蓝队怎么用与怎么防

用它:在隔离环境起监听器,验证 NIDS 对加密信道的覆盖——特别是「4 字节长度前缀 + 高熵密文」的 TCP 指纹、RFC 8484 样式的自建 DoH 端点、以及 XOR/RC4 通道的密码分析式检测(多条密文两两异或后熵塌缩)。

防它,按优先级:

  1. 网络层:终端访问非公共解析器的 DoH 端点(?dns= base64url 查询);Discord Gateway wss 长连接出现在无 IM 业务的主机上;QUIC 会话证书链异常(自签、CN 与声称品牌不符)。
  2. 主机层(一键脚本,最高价值):运行时拉取 raw.githubusercontent.com/ASP4RUX/Invoke-AMSI 的 Invoke-Mimi.ps1;FromBase64String + Invoke-Expression 组合;ms-settings 注册表 UAC bypass 痕迹;单进程 Get-Service 批量匹配 27 个 AV 厂商名的「枚举风暴」。
  3. 外传:Dropbox Dropbox-API-Arg 请求头 + 分块上传;三大云盘 API token 落盘。

6. 结语

BEAR-C2 是一个很好的观察样本:信道广度的堆料替代不了工程深度。它把「支持多少种协议×加密」当作卖点,但一个没有植入体的 C2、一套复用密钥流的 RC4、一份复制 35 遍的构造器,说明它的实际定位更接近「带 APT 皮肤的教学演示 + 流量发生器」,而不是可实战的框架。

对蓝队而言这反而是好事:这类框架产出的流量,恰恰是检验检测规则覆盖率最便宜的弹药。

声明:本文仅用于防御安全研究与检测工程,所有分析基于公开仓库的静态源码审计,未运行任何攻击组件。


参考资源

BEAR-C2 仓库:https://github.com/S3N4T0R-0X0/BEAR-C2

Invoke-AMSI(一键 mimikatz 脚本运行时拉取的模块):https://github.com/ASP4RUX/Invoke-AMSI

作者 APT 仿真合集(README 互链来源):https://github.com/S3N4T0R-0X0/APT-Attack-Simulation

aioquic(QUIC 监听器所用库):https://github.com/aiortc/aioquic