tcpdump 验证可疑外联
当 ss 或日志显示一台主机在与陌生地址通信,但进程名看起来正常时,抓一小段流量是最直接的验证方式:能看到实际的协议特征、心跳周期、明文内容或 TLS 的服务器名称。抓包的原则是「小、准、快」——先限定主机与端口、限制包数或时长、把结果直接写到外置介质,然后再离线回读。生产环境最忌讳不加限制地整机抓包,几分钟就能写满磁盘。
基本信息
| 抓取 | tcpdump -i 接口 过滤表达式 -w 文件 |
|---|---|
| 限额 | -c 限制包数、-G/-W 按时间切割、-s 限制快照长度 |
| 过滤 | host、net、port、portrange、tcp/udp、and/or/not 组合 |
| 回读 | -r 读取文件,-nn 不做解析,-A 显示 ASCII 内容 |
| 权限 | 需要 root 或 CAP_NET_RAW |
| 证据要求 | pcap 文件采集后立即计算哈希并归档 |
典型使用场景
- 验证某个可疑连接是否为心跳式回连(周期性、等间隔的短连接)
- 确认通信是否明文,直接从内容里提取地址、路径或命令特征
- 加密流量也能看出线索:TLS 握手里的 SNI 域名往往就是 C2 域名
- 为后续封禁与告警规则提供确凿依据,而不是仅凭连接表推断
- 排查业务侧说不清的流量问题:重传、握手失败、连接被重置
抓取并回读验证
抓取并回读验证
ip -br link # 先确认接口名
sudo tcpdump -i any -nn host 203.0.113.10 -c 50 -w /evidence/evil.pcap # 限定主机与包数
sudo tcpdump -nn -A -r /evidence/evil.pcap 'tcp port 80' | head -n 60 # 回读看明文
sudo tcpdump -nn -r /evidence/evil.pcap | head -n 30 # 只看会话概览
sha256sum /evidence/evil.pcap | tee /evidence/evil.pcap.sha256 # 固定完整性
sudo tcpdump -i any -nn 'host 203.0.113.10 and tcp[tcpflags] & tcp-syn != 0' -c 20 # 只看握手包,判断连接频率过滤表达式读法
| 表达式 | 含义 | 典型用途 |
|---|---|---|
| host 203.0.113.10 | 指定单个地址的双向流量 | 验证与某个 C2 的通信 |
| net 10.0.0.0/8 | 整个网段 | 观察横向扫描与探测 |
| port 4444 | 指定端口 | 定位非常规端口通信 |
| portrange 1-1024 | 端口范围 | 查找对系统服务的探测 |
| tcp[tcpflags] & tcp-syn != 0 | 只看握手包 | 判断连接频率与是否等间隔 |
| not port 22 | 排除指定端口 | 排除自己的会话干扰 |
抓包必须限额:加 -c 限制包数、加 -G 与 -W 按时间切割、加 -s 限制快照长度,并把输出写到证据目录而不是本机根分区。不加限制的抓包在生产环境可能在几分钟内写满磁盘,直接把故障升级成事故。
加密流量不等于没有价值:TLS 里可以看到目标 IP、端口、握手时间与服务器名称,心跳式回连的时间规律同样清晰可见。要判断内容,则需要在隔离环境里做进一步分析,生产机上不做中间人解密。