
Build C3 (MSVC)/badge.svg?branch=master)
Build C3 (Clang)/badge.svg?branch=master)
C3(自定义命令与控制,Custom Command and Control)是一款允许红队快速开发和利用非常规命令与控制信道(C2)的工具。它是一个框架,可扩展其他红队工具,例如通过 ExternalC2 扩展商业产品 Cobalt Strike(CS),该功能在发布时即受支持。它让红队只需关注自己想要实现的 C2,其余部分则依赖 C3 和 CS 工具的稳健性来处理。这种高效性和可靠性使红队能够在关键客户环境中安全运作(确保专业级别的稳定性和安全性);同时允许安全地进行实验,并快速部署定制化的战术、技术和流程(TTP)。从而赋能红队模拟和仿真具备自适应能力的真实世界攻击者。
详细教程请参阅此博文。
贡献指南(如何开发 Channel 的教程)请参阅此页面。
| Channel 名称 | 贡献者 |
|---|
| Mattermost | @mariuszbit |
| Asana | @tvgdb2 |
| GitHub | @sunn_y_k |
| Dropbox | @adm1nPanda |
| Cisco WebEx Teams | @tvgdb2 |
| JIRA | |
| Discord | |
| GoogleDrive | |
| Slack | |
| EWS Tasks | |
| OneDrive 365 Rest File(不可用) | |
| OneDrive 365 Rest Task(不可用) |
| 服务 | 贡献者 |
|---|---|
| MSSQL | @checkymander |
| UNC Share File | |
| LDAP | |
| Printer Jobs |
C3 中最常用的术语:
Relays(中继)- C3 网络中的独立组件。它们通过 Interfaces 进行通信。Relays 有两种类型:Gate Relays(或 Gateways)和 Node Relays。Gateway(网关)- 一种特殊的 Relay,控制一个 C3 网络。C3 网络无法在没有正常运行的 Gateway 的情况下运作。Gateway 是从 Node Relays 回到攻击者基础设施的桥梁。它还负责与第三方 C2 服务器(如 Cobalt Strike 的 Teamserver)进行通信。Gateways 应始终托管在攻击者控制的基础设施中。Node Relay(节点中继)- 在受感染主机上启动的可执行文件。Node Relays 通过 Devices 相互通信,或与 Gateway 通信。Interface(接口)- 对 C3 网络内任何促进数据发送和接收的组件所赋予的高级名称。它们始终连接到某个 Relay,其目的是扩展 Relay 的功能。目前有三种类型的 Interfaces:Channels、Peripherals 和 Connectors。Devices(设备)- Channels 和 Peripherals 的统称。创建此抽象是为了概括可在 Node Relays 上使用的 Interfaces。Channel(信道)- 用于在两个 Relays 之间传输数据的 Interface。Channels 成对工作,不支持一对多传输(参见 Negotiation Channels)。Negotiation Channel(协商信道)- 一种特殊的 Channel,能够与多个 Relays 建立常规 Channel 连接。协商过程完全自动化。Negotiation Channels 仅支持协商协议,不能用于任何其他传输。Gateway Return Channel (GRC)(网关返回信道)- 配置好的 Channel,Relay 将使用它向 Gateway 发回数据。GRC 可以是经由另一个 Relay 的路由。Node Relay 上的第一个 Channel(初始信道)会自动设置为该 Node Relay 的 GRC。C3 Minimal MTU(C3 最小 MTU)- 每个 C3 Channel 必须能够发送的最小数据量。目前 C3 Minimal MTU 等于 64 字节。除非少于 64 字节的块包含完整数据包,否则接收方 Relay 会忽略它,发送方 Relay 会尝试重新发送最后一部分数据。Peripherals(外设)- 第三方命令与控制框架的植入体。Peripherals 通过 Controller 与其原生控制器通信。例如,Cobalt Strike 的 SMB beacon。Connectors(连接器)- 与第三方命令与控制框架的集成。例如,Cobalt Strike Teamserver 通过 externalc2_start 命令暴露的 'External C2' 接口。Binders(绑定器)- Peripherals 和 Connectors 的统称。Device ID(设备 ID)- 一个动态 ID,用于唯一寻址 Relay 上的一个 Device。Agent ID(代理 ID)- 一个动态 ID,用于唯一寻址 Node Relay。由同一可执行文件实例化的 Node Relays 将具有不同的 Agent IDs。Build ID(构建 ID)- 内置于每个 Relay 的静态 ID。重启后保持不变。Route ID(路由 ID)- 由 Agent ID 和 Device ID 组成的一对。用于描述到达 Node Relay 的一条“路径”(Node Relays 可能通过多条 Routes 可达)。Route(路由)- 到达 Node Relay 的“路径”。每个 Relay 保存一张表,记录其所有子 Relays(以及孙级、曾孙级等),以及用于到达该特定 Relay 的 Channel Device IDs(参见 Route ID)。当来自 Gateway 的数据包到达 Node Relay 时,会使用路由表选择合适的 Channel 将数据包发送给接收方。Update Delay Jitter(更新延迟抖动)- Interface 连续更新之间的延迟(对于 Channels,即对 OnReceiveFromChannel 方法的调用间隔)。可以设置为在给定时间范围内随机化。要安装编译 C3 所需的软件包,需要在 Visual Studio 环境中添加以下单个组件。可以通过使用 VS setup.exe(例如 "c:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe"),选择“修改”并添加以下单个组件来实现:
安装这些组件后,启动 Visual Studio 开发者命令提示符并运行 CreateBuild.bat 文件。输出应位于 Builds 目录中。