3. 流量采集与预处理:tcpdump抓包、Wireshark基础、流量特征提取
好,咱们进入实操环节。前面聊了IoT流量长什么样,现在得亲手把它抓下来看看。说实话,搞IoT安全分析,最怕的就是连数据都拿不到,或者拿到的数据是脏的。这一章,我带你走一遍从抓包到提特征的完整流程。
3.1 tcpdump:命令行下的抓包利器
tcpdump,老牌工具了。我在嵌入式设备上调试网络问题时,十次有八次靠它。它轻量、无依赖,哪怕设备只有2MB的Flash,也能跑起来。
3.1.1 基础用法
最简单的抓包命令:
tcpdump -i eth0 -c 100 -w capture.pcap
解释一下:
-i eth0:指定网卡。IoT设备常见的有eth0、wlan0、br-lan(桥接)。-c 100:抓100个包后自动停止。调试时很有用。-w capture.pcap:写入文件,方便后续用Wireshark分析。
嗯,这里要注意:如果不加 -w,tcpdump默认会把包内容打印到终端,流量大时直接刷屏,CPU也扛不住。
3.1.2 过滤表达式
IoT环境里,无关流量太多。你想想看,一个智能家居网关,同时跑着DHCP、DNS、MQTT、CoAP,还有各种广播包。不加过滤,抓出来的文件又大又乱。
我常用的过滤套路:
# 只抓特定主机的流量
tcpdump -i eth0 host 192.168.1.100 -w device.pcap
# 只抓特定端口(比如MQTT的1883)
tcpdump -i eth0 port 1883 -w mqtt.pcap
# 组合过滤:抓某个设备发往云端的MQTT流量
tcpdump -i eth0 src host 192.168.1.100 and dst port 8883 -w mqtt_tls.pcap
tcpdump -D 列出所有网卡,确认数据到底走哪张卡。
3.2 Wireshark基础:从数据到信息
tcpdump抓的是原始数据,Wireshark才是真正让数据说话的工具。我个人习惯,在服务器上用tcpdump抓包,然后拉到本地用Wireshark分析。为什么?因为Wireshark的图形界面和协议解析器,比命令行高效太多了。
3.2.1 打开与初步观察
用Wireshark打开pcap文件后,你会看到三块区域:
- 包列表区: 显示每个包的序号、时间、源/目的地址、协议、长度、摘要信息。
- 协议树区: 选中一个包,这里会分层展示各层协议头部的字段值。
- 原始字节区: 十六进制和ASCII对照显示,用于深挖payload。
刚开始接触Wireshark的同学,容易盯着包列表发呆。我的建议是:先看 Protocol 列,快速了解流量中有哪些协议。如果看到一堆TCP重传、DNS查询失败,说明网络本身就有问题。
3.2.2 显示过滤器
Wireshark的显示过滤器比tcpdump的捕获过滤器更灵活。它不丢包,只是隐藏你不关心的包。
| 场景 | 显示过滤器表达式 |
|---|---|
| 只看MQTT协议 | mqtt |
| 只看某个IP的HTTP流量 | ip.addr == 192.168.1.100 and http |
| 只看TCP端口为443的流量 | tcp.port == 443 |
| 只看长度大于500字节的包 | frame.len > 500 |
| 只看包含特定字符串的包 | frame contains "heartbeat" |
3.3 流量特征提取:从原始数据到可分析指标
抓了包,也看了包,但怎么把这些数据变成能喂给检测模型的特征?这一步是关键。说白了,特征提取就是把非结构化的网络流量,转成结构化的数值或标签。
3.3.1 统计类特征
这类特征最容易提取,也最直观。我通常用Python的 scapy 或 pyshark 库来批量处理pcap文件。
常见的统计特征:
- 包长统计: 平均包长、最大包长、最小包长、包长方差。IoT设备发心跳包通常很小(几十字节),而固件升级时包会很大(1500字节左右)。
- 时间间隔统计: 包到达间隔的均值、标准差。正常的心跳间隔很稳定,DDoS攻击时间隔会骤降。
- 流持续时间: 从第一个包到最后一个包的时间差。正常MQTT连接可能持续数小时,而扫描攻击的流往往只有几毫秒。
- 协议比例: 某段时间内,TCP/UDP/ICMP/MQTT等协议的数量占比。被入侵的设备可能会突然发起大量DNS查询。
3.3.2 时序类特征
IoT流量有明显的周期性。你想想看,一个温度传感器,每30秒上报一次数据,这个周期非常固定。异常发生时,周期会被打破。
我常用的时序特征:
- 包到达时间序列: 记录每个包的到达时间戳,分析其自相关性。
- 流量速率: 每秒/每分钟的包数或字节数。突发流量往往意味着异常。
- 熵值: 源IP、目的IP、端口号的熵值。DDoS攻击时,源IP的熵值会异常高。
3.3.3 载荷特征
有些攻击,只看统计特征看不出来。比如,一个设备被植入恶意软件,它发的MQTT消息内容变了,但包长和间隔都正常。这时候就得看载荷。
载荷特征提取方法:
- 关键词匹配: 检查payload中是否包含"cmd"、"exec"、"/bin/sh"等敏感字符串。
- 字节分布: 计算payload中每个字节值的出现频率。正常JSON数据的字节分布和二进制协议完全不同。
- 协议字段值: 比如MQTT的Topic名称、QoS等级、Message Type。异常设备可能会订阅一个不存在的Topic。
3.4 本章知识体系
下面这张图,把流量采集与预处理的整个流程串起来了。从网卡上的原始电信号,到最终的结构化特征矩阵,每一步都有对应的工具和方法。
从图中可以看到,整个流程是线性的:物理网卡 -> tcpdump捕获 -> pcap文件 -> Wireshark/Python分析 -> 三类特征提取 -> 结构化特征矩阵。每一步都有对应的工具和注意事项。