AdaptixC2通信机制与流量解密分析(listener_gophertcp)
字数 3146 2025-10-01 14:05:45

AdaptixC2 Gopher TCP 通信机制与 mTLS 流量解密分析

1. 概述

AdaptixC2 是一个命令与控制(C2)框架,支持多种通信协议。本文重点分析其 Gopher TCP 监听器(listener_gopher_tcp)的通信机制,并详细介绍如何解密其 mTLS(双向 TLS)加密流量。

2. Agent 类型与特性

AdaptixC2 提供多种 Agent 类型,各有不同特性和用途:

Agent 类型 通信协议 主要功能 适用操作系统
Beacon HTTP HTTP/S 文件浏览、进程浏览、SOCKS代理、端口转发 Windows
Beacon SMB SMB 内网横向移动、点对点通信 Windows
Beacon TCP TCP 特定网络环境下的隐蔽通信(异步/心跳模式) Windows
Gopher TCP TCP 文件浏览、进程浏览、截图、SOCKS代理、远程终端、BOF Windows, Linux, macOS

典型攻击链:通过 Gopher 钓鱼批量上线不同操作系统机器,然后使用 Beacon 进行横向移动和长期潜伏。

3. mTLS 双向认证机制

3.1 标准 TLS vs mTLS

特性 标准 TLS (单向认证) mTLS (双向认证)
核心目标 确保通信加密,验证服务器真实性 确保通信加密,相互验证客户端和服务器
认证方向 单向:仅客户端验证服务器 双向:客户端和服务器相互验证
证书需求 服务器需要证书 服务器和客户端都需要证书
工作流程 1. 客户端连接服务器
2. 服务器出示证书
3. 客户端验证证书
4. 建立加密通道
1. 客户端连接服务器
2. 服务器出示证书
3. 客户端验证服务器证书
4. 服务器请求并验证客户端证书
5. 双方验证完成,建立加密通道

3.2 AdaptixC2 的 mTLS 实现

在 AdaptixC2 中:

  • 客户端私钥 (client.key)、客户端证书 (client.cert)、CA 证书 (ca.cert) 会被 Base64 编码后打包到 Agent 配置文件中
  • Agent 使用这些凭证与 C2 服务器建立 mTLS 连接
  • 使用 TLS_AES_128_GCM_SHA256 密码套件 (0x1301),支持前向保密

4. 流量解密分析方法

4.1 所需工具

  1. AdaptixC2 Server 端与 Agent 端(需自备源码)
  2. IDE:用于代码分析和调试
  3. Wireshark:网络流量捕获和分析
  4. mitmproxy:中间人代理工具
  5. Ghidra:二进制逆向分析工具
  6. Proxifier:流量重定向工具(必须使用安装版,非便携版)

4.2 解密流程

步骤 1: 劫持 Agent 流量通过 mitmproxy

  1. 配置 Proxifier

    • 新建 Proxy Server:地址填本机,端口填 mitmproxy 端口,类型选 HTTPS
    • 创建规则让 agent.exe 走该代理
    • 关键:必须勾选"Resolve hostnames through proxy"和"Bypass proxy for local addresses"
  2. 启动 mitmproxy

    • 默认会显示 "TLSv1.3 alert certificate required" 错误
    • 这是正常的,因为 mTLS 要求客户端提供证书

步骤 2: 从 Agent 提取证书和密钥配置

  1. Ghidra 分析 Agent 二进制文件

    • 使用 GolangAnalyzerExtension 辅助分析
    • 定位到 main.main 函数
    • 回溯找到配置数据存储的全局变量(通常为 DAT_xxxPTR_DAT_xxx
  2. 提取加密配置块

    • 找到存储配置数据的地址(如 DAT_00955620
    • 确认数据长度(如 0x0F81 = 3969 字节)
    • 以 "Byte String (No Spaces)" 格式复制完整数据块
  3. Python 脚本解析配置

    # 读取并解析配置数据的示例代码框架
    with open('data.txt', 'r') as f:
        encrypted_data = bytes.fromhex(f.read().strip())
    
    # 前16字节为Listener Key
    listener_key = encrypted_data[:16]
    # 剩余部分为加密的配置信息
    encrypted_config = encrypted_data[16:]
    
    # 使用AES-GCM解密配置
    # 需要实现解密逻辑,参考AgentDecryptData函数
    
  4. 提取证书文件

    • 从解密后的配置中提取 client.key、client.cert 和 ca.cert
    • 合并为 client_x.pem 文件供 mitmproxy 使用

步骤 3: 配置 mitmproxy 使用提取的证书

  1. 将提取的证书配置给 mitmproxy
  2. 重新运行 Agent,此时 mitmproxy 应能成功拦截和解密流量

4.3 通信协议分析

Agent 上线流程:

  1. Agent 启动后从内存中读取加密配置块(3969 字节)
  2. 读取前16字节作为 Listener Key
  3. 使用 Listener Key 解密剩余部分,获取 C2 地址、端口等配置信息
  4. Agent 准备上线信息(主机名、用户名、IP 地址等)
  5. 生成新的会话密钥 (Session Key)
  6. 将上线信息打包为 INIT_PACK
  7. 使用 Listener Key 和 AES-GCM 加密 INIT_PACK 并发送给服务器
  8. 后续通信使用 Session Key 进行加解密

数据包结构:

上线包采用三层嵌套的 Msgpack 结构:

  1. 外层:加密的配置信息
  2. 中层:Agent 元数据信息
  3. 内层:具体的任务指令和结果

4.4 加密函数分析

  • AgentEncryptData: 加密函数,使用 AES-GCM 算法
  • AgentDecryptData: 解密函数,执行逆操作
  • 加密流程
    1. 获取明文数据
    2. 使用派生的会话密钥作为 AES-128 密钥
    3. 生成唯一随机数 (Nonce)
    4. 将密钥、Nonce 和明文输入 AES-GCM 加密器
    5. 输出密文和认证标签
    6. 打包成 TLS 记录通过 TCP 发送

5. 技术难点与解决方案

难点 1: 证书验证绕过

问题:Agent 内置 CA 证书,会验证服务器证书合法性
解决方案:由于 Agent 配置中 InsecureSkipVerify: true,实际上禁用所有证书验证

难点 2: 函数定位困难

问题:Go 编译时使用 -s(移除符号表)和 -w(移除调试信息)
解决方案:使用 Ghidra 进行静态分析,通过特征码定位关键函数

难点 3: 配置提取复杂

问题:配置数据经过加密和编码处理
解决方案:通过分析二进制文件找到原始配置块,实现解密算法提取原始配置

6. 防护建议

  1. 网络监控:检测异常的 mTLS 连接和证书使用模式
  2. 证书审计:监控异常证书的生成和使用
  3. 行为分析:检测类似 Gopher TCP 的长连接行为
  4. 二进制加固:对关键组件进行混淆和加固,增加分析难度

7. 总结

AdaptixC2 的 Gopher TCP 监听器采用 mTLS 双向认证和自定义加密方案,提供了较强的隐蔽性。通过深入分析其通信机制和加解密流程,可以成功拦截和解密其流量,为检测和防御提供技术支持。关键点包括正确配置流量重定向、从二进制文件中提取加密配置、理解其多层加密协议结构。


本文基于对 AdaptixC2 框架的技术分析,仅用于安全研究和防御目的。

AdaptixC2 Gopher TCP 通信机制与 mTLS 流量解密分析 1. 概述 AdaptixC2 是一个命令与控制(C2)框架,支持多种通信协议。本文重点分析其 Gopher TCP 监听器(listener_ gopher_ tcp)的通信机制,并详细介绍如何解密其 mTLS(双向 TLS)加密流量。 2. Agent 类型与特性 AdaptixC2 提供多种 Agent 类型,各有不同特性和用途: | Agent 类型 | 通信协议 | 主要功能 | 适用操作系统 | |------------|----------|----------|-------------| | Beacon HTTP | HTTP/S | 文件浏览、进程浏览、SOCKS代理、端口转发 | Windows | | Beacon SMB | SMB | 内网横向移动、点对点通信 | Windows | | Beacon TCP | TCP | 特定网络环境下的隐蔽通信(异步/心跳模式) | Windows | | Gopher TCP | TCP | 文件浏览、进程浏览、截图、SOCKS代理、远程终端、BOF | Windows, Linux, macOS | 典型攻击链 :通过 Gopher 钓鱼批量上线不同操作系统机器,然后使用 Beacon 进行横向移动和长期潜伏。 3. mTLS 双向认证机制 3.1 标准 TLS vs mTLS | 特性 | 标准 TLS (单向认证) | mTLS (双向认证) | |------|-------------------|----------------| | 核心目标 | 确保通信加密,验证服务器真实性 | 确保通信加密,相互验证客户端和服务器 | | 认证方向 | 单向:仅客户端验证服务器 | 双向:客户端和服务器相互验证 | | 证书需求 | 服务器需要证书 | 服务器和客户端都需要证书 | | 工作流程 | 1. 客户端连接服务器 2. 服务器出示证书 3. 客户端验证证书 4. 建立加密通道 | 1. 客户端连接服务器 2. 服务器出示证书 3. 客户端验证服务器证书 4. 服务器请求并验证客户端证书 5. 双方验证完成,建立加密通道 | 3.2 AdaptixC2 的 mTLS 实现 在 AdaptixC2 中: 客户端私钥 (client.key)、客户端证书 (client.cert)、CA 证书 (ca.cert) 会被 Base64 编码后打包到 Agent 配置文件中 Agent 使用这些凭证与 C2 服务器建立 mTLS 连接 使用 TLS_ AES_ 128_ GCM_ SHA256 密码套件 (0x1301),支持前向保密 4. 流量解密分析方法 4.1 所需工具 AdaptixC2 Server 端与 Agent 端 (需自备源码) IDE :用于代码分析和调试 Wireshark :网络流量捕获和分析 mitmproxy :中间人代理工具 Ghidra :二进制逆向分析工具 Proxifier :流量重定向工具(必须使用安装版,非便携版) 4.2 解密流程 步骤 1: 劫持 Agent 流量通过 mitmproxy 配置 Proxifier : 新建 Proxy Server:地址填本机,端口填 mitmproxy 端口,类型选 HTTPS 创建规则让 agent.exe 走该代理 关键 :必须勾选"Resolve hostnames through proxy"和"Bypass proxy for local addresses" 启动 mitmproxy : 默认会显示 "TLSv1.3 alert certificate required" 错误 这是正常的,因为 mTLS 要求客户端提供证书 步骤 2: 从 Agent 提取证书和密钥配置 Ghidra 分析 Agent 二进制文件 : 使用 GolangAnalyzerExtension 辅助分析 定位到 main.main 函数 回溯找到配置数据存储的全局变量(通常为 DAT_xxx 或 PTR_DAT_xxx ) 提取加密配置块 : 找到存储配置数据的地址(如 DAT_00955620 ) 确认数据长度(如 0x0F81 = 3969 字节) 以 "Byte String (No Spaces)" 格式复制完整数据块 Python 脚本解析配置 : 提取证书文件 : 从解密后的配置中提取 client.key、client.cert 和 ca.cert 合并为 client_ x.pem 文件供 mitmproxy 使用 步骤 3: 配置 mitmproxy 使用提取的证书 将提取的证书配置给 mitmproxy 重新运行 Agent,此时 mitmproxy 应能成功拦截和解密流量 4.3 通信协议分析 Agent 上线流程: Agent 启动后从内存中读取加密配置块(3969 字节) 读取前16字节作为 Listener Key 使用 Listener Key 解密剩余部分,获取 C2 地址、端口等配置信息 Agent 准备上线信息(主机名、用户名、IP 地址等) 生成新的会话密钥 (Session Key) 将上线信息打包为 INIT_ PACK 使用 Listener Key 和 AES-GCM 加密 INIT_ PACK 并发送给服务器 后续通信使用 Session Key 进行加解密 数据包结构: 上线包采用三层嵌套的 Msgpack 结构: 外层:加密的配置信息 中层:Agent 元数据信息 内层:具体的任务指令和结果 4.4 加密函数分析 AgentEncryptData : 加密函数,使用 AES-GCM 算法 AgentDecryptData : 解密函数,执行逆操作 加密流程 : 获取明文数据 使用派生的会话密钥作为 AES-128 密钥 生成唯一随机数 (Nonce) 将密钥、Nonce 和明文输入 AES-GCM 加密器 输出密文和认证标签 打包成 TLS 记录通过 TCP 发送 5. 技术难点与解决方案 难点 1: 证书验证绕过 问题 :Agent 内置 CA 证书,会验证服务器证书合法性 解决方案 :由于 Agent 配置中 InsecureSkipVerify: true ,实际上禁用所有证书验证 难点 2: 函数定位困难 问题 :Go 编译时使用 -s (移除符号表)和 -w (移除调试信息) 解决方案 :使用 Ghidra 进行静态分析,通过特征码定位关键函数 难点 3: 配置提取复杂 问题 :配置数据经过加密和编码处理 解决方案 :通过分析二进制文件找到原始配置块,实现解密算法提取原始配置 6. 防护建议 网络监控 :检测异常的 mTLS 连接和证书使用模式 证书审计 :监控异常证书的生成和使用 行为分析 :检测类似 Gopher TCP 的长连接行为 二进制加固 :对关键组件进行混淆和加固,增加分析难度 7. 总结 AdaptixC2 的 Gopher TCP 监听器采用 mTLS 双向认证和自定义加密方案,提供了较强的隐蔽性。通过深入分析其通信机制和加解密流程,可以成功拦截和解密其流量,为检测和防御提供技术支持。关键点包括正确配置流量重定向、从二进制文件中提取加密配置、理解其多层加密协议结构。 本文基于对 AdaptixC2 框架的技术分析,仅用于安全研究和防御目的。