扫描流量的特征
端口扫描的典型特征是短连接、多端口、单包试探:一次 SYN 后没有后续数据交换,或者对大量端口发出连接请求。分析思路是先按源地址聚合,统计其访问过的目的端口数量、连接成功率与时间分布,从而把扫描源从正常业务中分出来。数据可以来自抓包(PCAP)、会话记录或 NetFlow 类流量统计,选择取决于可获取的原始数据与时间跨度。需要提醒的是,扫描源本身可能是被控的内网主机,定位到源并不等于找到攻击者。
基本信息
| 适用平台 | 具备抓包或流量统计能力的环境(tshark、Zeek、NetFlow 采集器) |
|---|---|
| 典型特征 | SYN 无后续、端口离散且数量大、连接时长极短、固定时间间隔 |
| 常用命令 | tshark 过滤 SYN 包、Zeek 的 conn.log 聚合、流数据按源聚合目的端口数 |
| 关键指标 | 目的端口去重数、连接数、成功率、时间窗口内的频率 |
| 排除项 | 监控健康检查、负载均衡探测、合规扫描器的固定源 |
典型使用场景
- 从边界流量中定位外部扫描源与扫描范围
- 发现内网横向扫描:某台主机对同网段大量地址发起连接
- 评估暴露面:统计被尝试攻击的端口分布
- 判断扫描工具类型:端口顺序与并发度反映工具特征
- 为加固与封禁提供依据:需要封禁的源与需要关闭的端口
聚合与判读
聚合与判读
# 统计每个来源发起的 SYN 数量(无 ACK 的首次握手)
tshark -r scan.pcap -Y 'tcp.flags.syn==1 and tcp.flags.ack==0' -T fields -e ip.src -e tcp.dstport | \
awk '{a[$1]++} END{for(i in a) print a[i], i}' | sort -rn | head
# 统计每个来源访问过的目的端口去重数,数量大即扫描特征
tshark -r scan.pcap -Y 'tcp.flags.syn==1 and tcp.flags.ack==0' -T fields -e ip.src -e tcp.dstport | \
sort -u | awk '{c[$1]++} END{for(i in c) print c[i], i}' | sort -rn | head
# Zeek:从 conn.log 看短连接与端口分布
zeek-cut id.orig_h id.resp_p duration < conn.log | awk '$3<0.1{c[$1]++} END{for(i in c) print c[i], i}' | sort -rn | head
# 内网横向:目的地址为内网的扫描源
zeek-cut id.orig_h id.resp_h < conn.log | grep -E '^10\.' | sort | uniq -c | sort -rn | head扫描类型对照
| 类型 | 流量特征 | 判读要点 |
|---|---|---|
| TCP SYN 扫描 | 大量 SYN 无后续握手 | 最易识别,端口覆盖广 |
| TCP 连接扫描 | 完成三次握手后立即关闭 | 连接数高、时长极短、字节数小 |
| UDP 扫描 | 大量无响应请求 | 关注 DNS、SNMP 等常见端口 |
| 定向探测 | 只针对少量端口 | 容易混入正常业务,需结合频率与来源 |
| 横向扫描 | 内网地址互相探测 | 源主机可能已被控制,优先处置 |
扫描源常是被控内网主机:发现内网主机对外或对内大量探测时,要把它当作受感染主机处置,而不是只封 IP 了事。
抓包点位置会影响可见性:单向丢包或镜像配置不全时只能看到一半流量,统计口径必须在报告中说明。