网络流量基础:TCP/IP协议栈回顾、HTTP/HTTPS协议基础、DNS协议基础
做网络行为分析,说白了就是跟流量打交道。你连流量长什么样都不清楚,那后面分析C2通信就无从谈起。这一节我带大家快速过一遍TCP/IP协议栈、HTTP/HTTPS和DNS这三个最基础的东西。嗯,都是老生常谈的内容,但我会结合实战中的坑来讲。
TCP/IP协议栈:四层模型与数据封装
我个人习惯把TCP/IP协议栈分成四层来看:应用层、传输层、网络层、网络接口层。每一层各司其职,数据在发送端从上往下层层封装,在接收端从下往上层层解封装。
核心要点:数据封装过程就是每一层给上层数据加上自己的头部信息。应用层数据 → 传输层加TCP/UDP头 → 网络层加IP头 → 网络接口层加帧头和帧尾。
我在分析恶意流量时,经常需要逐层拆包。举个例子,有一次我追踪一个远控木马,它在TCP载荷里藏了加密的C2指令。如果不理解TCP头里的序列号和确认号,你根本不知道哪些包属于同一会话。
这里我画了一张图,帮你把四层模型和数据封装的关系理清楚:
HTTP/HTTPS协议基础
HTTP协议,你每天都在用。但作为安全分析人员,你得看到它背后的东西。HTTP是明文传输的,请求和响应都有固定的格式。
HTTP请求结构
一个典型的HTTP请求包含三部分:请求行、请求头、请求体。我截取一个真实C2通信中的HTTP请求给你们看看:
POST /api/checkin HTTP/1.1
Host: 192.168.1.100:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Content-Type: application/x-www-form-urlencoded
Content-Length: 48
id=beacon_001&key=3a5f8c2d1e4b7a9f0c6d3e8b2a1f4c7d
注意看User-Agent和请求体里的参数。很多C2框架会伪造User-Agent,但伪造得不够彻底。我曾经分析过一个样本,它的User-Agent写的是Chrome,但实际请求频率和正常浏览器完全不一样——每5秒发一次心跳包,这明显不对劲。
HTTPS与TLS握手
HTTPS就是在HTTP外面套了一层TLS加密。你想想看,如果C2通信走HTTPS,那流量内容就全加密了,我们怎么分析?
其实还是有办法的。TLS握手阶段有几个关键信息是明文的:
- Server Name Indication (SNI):客户端告诉服务器它要访问哪个域名,这个字段是明文的
- 证书信息:服务器返回的证书,包括颁发者、有效期、公钥等
- TLS版本和密码套件:双方协商的加密参数
实战技巧:我在追踪一个APT组织时,发现它们的C2服务器使用了自签名证书,而且证书里的Common Name写的是一个随机字符串。正常业务很少这么干,这就是一个很强的检测特征。
DNS协议基础
DNS协议,说白了就是域名到IP地址的翻译服务。但它在C2通信中扮演的角色远不止于此。
DNS查询类型
| 查询类型 | 作用 | C2场景 |
|---|---|---|
| A记录 | 域名 → IPv4地址 | 最常用,C2域名解析到服务器IP |
| AAAA记录 | 域名 → IPv6地址 | 部分C2使用IPv6逃避检测 |
| TXT记录 | 存储文本信息 | 曾见过C2用TXT记录下发加密指令 |
| CNAME记录 | 域名别名 | C2使用CDN或跳板域名时常见 |
DNS协议本身是UDP传输,端口53。但你知道吗?有些C2框架会利用DNS隧道来传输数据。它们把数据编码到DNS查询的域名里,或者藏在TXT记录的响应里。
注意:DNS隧道流量有几个特征:查询频率异常高、域名长度异常长(超过30个字符)、子域名层级多(超过5级)。我遇到过最夸张的一个案例,一个域名有12级子域名,每级都是Base32编码的字符。这种流量在正常网络里几乎不会出现。
协议特征与C2检测的关联
好了,上面讲了三个协议的基础。现在我把它们串起来,说说怎么用这些知识做C2检测。
我个人总结了一个简单的判断框架:
- 看流量行为:C2通信通常有规律的心跳包,比如每60秒一次。正常用户不会这么规律地访问同一个URL。
- 看协议异常:比如HTTP请求头顺序不对、User-Agent和实际操作系统不匹配、TLS证书自签名且有效期异常长。
- 看DNS异常:大量解析失败的域名查询、域名长度异常、查询时间集中在非工作时间。
一句话总结:TCP/IP协议栈是流量的骨架,HTTP/HTTPS是C2最常用的伪装外衣,DNS是C2的备用通道和隐蔽隧道。把这三个协议吃透了,你就能看懂大部分C2通信的底层逻辑。