网络流量基础:TCP/IP协议栈回顾、五元组概念、流量采集方法
各位好,我是老周。做威胁狩猎这些年,我最大的体会就是——流量里藏着一切真相。僵尸主机再怎么隐藏,它总得跟C2服务器通信吧?总得发心跳包吧?这些痕迹,全在流量里。
这一章,咱们把基础打牢。别嫌枯燥,我见过太多人拿着PCAP文件两眼一抹黑,就是因为底层的TCP/IP没吃透。咱们从协议栈开始,一步步讲到怎么把流量抓到手里。
TCP/IP协议栈:数据包的一生
你想想看,你在浏览器里敲了个网址,回车。这背后发生了什么?
数据从你的应用层出发,一路向下,每经过一层就被包上一层“信封”。到了对端,再一层层拆开。这就是封装与解封装。
核心记忆点:每一层只关心自己的事。应用层不管路由,网络层不管端口。这种分层设计,让网络变得灵活——但也给攻击者留下了藏身空间。
我习惯把这四层记成一句话:“应用传数据,传输管连接,网络找路径,链路送比特”。
| 层级 | 核心协议 | 在威胁狩猎中的价值 |
|---|---|---|
| 应用层 | HTTP, DNS, SMTP, FTP | 分析恶意域名、C2通信内容、数据外泄 |
| 传输层 | TCP, UDP | 检测异常端口、非标准Flag组合、心跳间隔 |
| 网络层 | IP, ICMP | 追踪源/目的IP、检测扫描行为、异常ICMP隧道 |
| 链路层 | Ethernet, ARP | 识别MAC地址欺骗、ARP投毒 |
嗯,这里要注意:僵尸网络最喜欢在应用层和传输层搞小动作。比如DNS隧道,就是把数据藏在DNS查询里。你光看IP层,啥也看不出来。
五元组:网络世界的“身份证”
说白了,五元组就是唯一标识一条网络连接的五个字段。我经常跟团队说:你只要能说清楚五元组,就能说清楚任何一条流量。
哪五个?
- 源IP —— 谁发的?
- 目的IP —— 发给谁?
- 源端口 —— 从哪个门出来?
- 目的端口 —— 进哪个门?
- 传输层协议 —— TCP还是UDP?
实战小技巧:我在做威胁狩猎时,经常用五元组做“流量归并”。把相同五元组的包归到一起,就能还原出一条完整的会话。僵尸主机的C2通信,往往在五元组上有固定模式——比如固定的目的端口、固定的协议类型。
举个例子。你看到一条告警:内网主机10.10.1.100:49152 → 外网45.33.32.156:443,协议TCP。五元组一展开,你就知道:这是一台内网机器在访问一个外网HTTPS服务器。如果这个外网IP是已知的恶意IP,那这条流量就有问题了。
我曾经遇到过一个案例:某台服务器每隔5分钟就向外发一个SYN包,目的端口是8888,但从不完成三次握手。五元组一分析,发现源端口每次都变,但目的IP和端口固定。这就是典型的心跳探测行为——后来确认是挖矿木马在等C2指令。
流量采集方法:NetFlow、sFlow、PCAP
好,理论讲完了。问题来了:流量怎么拿到手?
目前主流的有三种方法。我按自己的使用经验,给你排个序:PCAP最全但最重,NetFlow最轻但信息有限,sFlow介于中间。
PCAP:全量数据,一个不落
PCAP就是把网线上跑的所有比特都录下来。你想想看,这得有多大?一个千兆口,满速跑一小时,大概能产生400GB的数据。
但好处也明显:你能看到应用层载荷。比如HTTP请求里的URL、POST数据、甚至恶意文件本身。
# 用tcpdump抓取80端口的流量,保存为PCAP文件
tcpdump -i eth0 -w capture.pcap port 80
# 用tshark读取PCAP,按五元组统计会话
tshark -r capture.pcap -q -z conv,tcp
注意:PCAP不能长期全量存。我见过有人把全量PCAP存了三个月,结果磁盘爆了,生产系统挂了。建议:全量抓短时间(比如1小时),长期存元数据(NetFlow)。
NetFlow:会话级摘要,轻量高效
NetFlow是Cisco发明的。它不记录每个包,而是记录每条流的元数据。一条流就是一组五元组相同的连续包。
一条NetFlow记录大概包含:
- 五元组(源/目的IP、端口、协议)
- 起始时间、结束时间
- 包数量、字节数
- TCP Flag汇总
我个人的习惯是:用NetFlow做长期基线。比如你发现某台主机平时每天产生100条流,今天突然变成10000条——那肯定有问题。
sFlow:基于采样的统计
sFlow跟NetFlow最大的区别是:它采样。比如每1024个包采一个,然后按比例推算整体情况。
好处是性能开销极低,适合超高速网络(比如10Gbps以上)。坏处是——你可能会漏掉关键包。比如攻击者只发了3个探测包,采样率1:1024,很可能一个都没采到。
| 特性 | PCAP | NetFlow | sFlow |
|---|---|---|---|
| 数据粒度 | 全量包 | 流摘要 | 采样包 |
| 存储开销 | 极大 | 小 | 极小 |
| 是否可见载荷 | 是 | 否 | 部分(采样到的包) |
| 适用场景 | 取证分析、深度检测 | 流量监控、基线建立 | 高速网络、性能敏感环境 |
| 典型工具 | tcpdump, Wireshark | nfdump, SiLK | sFlow-RT, InMon |
知识体系总览
下面这张图,把本章的核心逻辑串起来了。从TCP/IP协议栈出发,到五元组作为连接标识,再到三种采集方法如何获取数据——这就是你后续做威胁狩猎的数据基础。
选型建议:我该用哪个?
这个问题,我几乎每次培训都会被问到。我的回答是:看你的场景。
- 做应急响应、取证分析 → 必须用PCAP。没有载荷数据,你根本没法确认是不是真的被入侵了。
- 做日常监控、异常检测 → NetFlow就够了。我团队现在每天处理数十亿条NetFlow记录,用来建基线、发现异常,效果很好。
- 监控10Gbps以上的核心网络 → 上sFlow。PCAP扛不住,NetFlow在高速环境下也有性能瓶颈。
我的经验:很多团队一开始就上PCAP,结果存储爆了、分析工具跑不动。我建议先跑NetFlow跑一个月,把基线建好。等真出了安全事件,再针对性地抓PCAP做深度分析。这样既省钱,又高效。