Wireshark 抓包分析安全事件实战 - 安全技术
Wireshark 抓包分析安全事件实战 - 安全技术

Wireshark 抓包分析安全事件实战:从流量中揪出攻击者

引言

安全事件响应中,最头疼的问题往往不是攻击本身,而是“证据在哪里”。当系统被入侵、数据被窃取或服务异常时,日志可能被篡改、进程可能被清除,但网络流量是攻击者无法完全抹去的痕迹。Wireshark 作为业界最强大的网络协议分析工具,能让我们直接“看到”数据包中的每一个字节,还原攻击链的完整画面。

Wireshark 抓包分析安全事件实战 - 安全技术

本文将从真实安全事件出发,手把手演示如何使用 Wireshark 分析恶意软件通信、检测数据外泄、识别端口扫描和暴力破解行为。所有操作均基于实际抓包文件,你可以跟随步骤复现分析过程。

环境准备

在开始之前,确保你已安装 Wireshark 3.x 以上版本,并准备以下抓包文件(可使用 tcpdump 自行捕获或下载公开样本):

  • 恶意软件通信样本:malware_communication.pcap
  • 暴力破解 SSH 样本:ssh_bruteforce.pcap
  • DNS 隧道样本:dns_tunnel.pcap

安装命令(Ubuntu/Debian):

sudo apt update && sudo apt install wireshark tshark

实战一:从恶意软件通信中提取 C2 地址

场景描述

某企业内网一台 Windows 服务器出现异常出站连接,安全团队怀疑已感染后门程序。通过镜像交换机端口捕获了 30 分钟的流量。

步骤 1:筛选可疑流量

打开 malware_communication.pcap,首先查看整体流量统计:

Statistics → Protocol Hierarchy

观察 HTTP、HTTPS、DNS 和 ICMP 的占比。如果发现大量非标准端口或异常协议,立即标记。

步骤 2:定位异常 DNS 查询

恶意软件常使用 DNS 隧道或频繁查询特定域名进行通信。使用显示过滤器:

dns.qry.name contains "."

重点关注:
– 查询间隔极短(<1 秒)的域名
– 包含随机字符串的子域名(如 asdjkla23.malware.com
– 从未见过的顶级域名(如 .xyz.top

步骤 3:追踪 HTTP 通信

恶意软件可能通过 HTTP POST 发送窃取的数据。过滤 HTTP 请求:

http.request

查看 User-Agent 字段,攻击者常伪造为常见浏览器但版本过旧。分析请求体内容:

Follow → HTTP Stream

如果看到 Base64 编码数据或明文凭据,立即提取。

步骤 4:识别非标准端口通信

使用过滤器筛选高编号端口:

tcp.port >= 1024 && tcp.port <= 65535

检查 SYN 包的目的端口。常见 C2 端口包括 4444、8080、8443 等。右键可疑包 → Follow → TCP Stream,查看数据内容。

实战结果

在某次分析中,我们发现内网主机持续向 185.xxx.xxx.xxx:8080 发送包含 Base64 编码数据的 HTTP POST 请求。解码后是系统用户名、进程列表和最近打开的文档路径——典型的侦察行为。

实战二:检测 DNS 隧道数据外泄

场景描述

安全设备告警显示某台服务器 DNS 查询量异常升高,怀疑利用 DNS 协议外泄数据。

步骤 1:统计 DNS 查询频率

使用 Wireshark 的 IO Graph 功能:

Statistics → IO Graph

设置 Y 轴为 Packets/Tick,过滤条件为 dns。正常网络 DNS 查询应呈平稳分布,若出现周期性尖峰则异常。

步骤 2:分析 DNS 查询特征

筛选出所有 DNS 查询:

dns.flags.response == 0

观察查询域名模式。合法域名通常包含有意义的单词,而 DNS 隧道域名呈现:
– 高熵:子域名部分包含大量随机字符(如 3f8a2b1c9d.example.com
– 长度异常:单个子域名超过 30 字节
– 频繁 NXDOMAIN 响应:查询的域名不存在

步骤 3:提取编码数据

找到可疑 DNS 查询包后,提取子域名部分。使用 tshark 命令批量提取:

tshark -r dns_tunnel.pcap -Y "dns.flags.response == 0" -T fields -e dns.qry.name > queries.txt

使用 Python 脚本解码 Base32/Base64 编码的数据:

import base64
with open('queries.txt') as f:
    for line in f:
        domain = line.strip()
        subdomain = domain.split('.')[0]
        try:
            decoded = base64.b64decode(subdomain + '==')
            print(decoded)
        except:
            pass

实战结果

在某次红队演练中,我们发现攻击者通过 DNS 查询将 /etc/passwd 文件分片编码后传输。每个查询包含 32 字节的 Base64 数据,通过 200+ 次查询完成外泄。

实战三:识别 SSH 暴力破解

场景描述

云服务器日志显示大量 SSH 登录失败记录,但不确定攻击源 IP 和攻击模式。

步骤 1:过滤 SSH 流量

使用过滤器:

tcp.port == 22

观察 SYN 包数量。正常 SSH 连接每秒不超过 2 个 SYN,暴力破解通常每秒 10-50 个。

步骤 2:分析连接尝试频率

使用 Conversations 统计:

Statistics → Conversations → TCP

Packets 降序排序。攻击者 IP 会与目标 IP 产生大量短连接(每个连接仅 3-4 个包)。

步骤 3:提取攻击者 IP

使用 tshark 提取所有 SSH 连接的源 IP:

tshark -r ssh_bruteforce.pcap -Y "tcp.port==22 and tcp.flags.syn==1 and tcp.flags.ack==0" -T fields -e ip.src | sort | uniq -c | sort -nr

输出示例:

1542 192.168.1.100
23 10.0.0.5
1 8.8.8.8

源 IP 192.168.1.100 发起 1542 次 SYN 包,明显是暴力破解。

步骤 4:查看攻击时间线

使用 IO Graph 设置时间粒度:

Filter: ip.src==192.168.1.100 and tcp.port==22
Unit: Packets/Tick (1 sec)

如果看到持续 30 分钟以上的攻击波形,说明是自动化工具。

实战四:检测 ARP 欺骗和中间人攻击

场景描述

内网用户反映网页内容被篡改,怀疑存在 ARP 欺骗攻击。

步骤 1:识别异常 ARP 响应

使用过滤器:

arp.opcode == 2

检查 MAC 地址对应关系。正常情况下,一个 IP 对应一个 MAC。如果出现:
– 同一 IP 对应多个 MAC
– 网关 IP 的 MAC 地址不是真实网关 MAC

步骤 2:验证 ARP 欺骗

查看网关 IP 的 ARP 响应:

arp.src.proto_ipv4 == 192.168.1.1

如果看到两个不同 MAC 地址交替响应,说明存在 ARP 欺骗。

步骤 3:追踪被篡改的流量

找到攻击者 MAC 地址后,过滤该 MAC 的流量:

eth.src == aa:bb:cc:dd:ee:ff

查看 HTTP 响应内容,如果发现被插入的恶意 JavaScript 或重定向代码,即可确认攻击。

总结:安全分析最佳实践

抓包注意事项

  1. 存储策略:保留至少 7 天的全流量日志,使用 tcpdump -C 100 -W 10 轮转存储,每个文件 100MB
  2. 时间同步:确保所有设备 NTP 同步,否则时间戳混乱会导致分析困难
  3. 过滤规则:生产环境抓包前使用 tcpdump -n -c 1000 测试流量大小,避免磁盘写满

分析技巧

  • 分层分析法:从物理层(MAC)→ 网络层(IP)→ 传输层(端口)→ 应用层(协议内容)逐层排查
  • 关注异常值:80% 的安全事件隐藏在“非标准”行为中:非工作时间连接、非常用端口、非常用协议
  • 自动化辅助:使用 tshark -T fields 结合 Python 脚本批量分析,提高效率

工具链推荐

  • 流量采集:tcpdump、ngrep
  • 离线分析:Wireshark、NetworkMiner
  • 自动化分析:Moloch、Arkime(开源全流量分析平台)
  • 威胁情报关联:将提取的 IP 和域名与 AlienVault OTX、VirusTotal 交叉验证

最后的建议

网络流量分析是一项需要长期积累的技能。建议从日常网络故障排查开始练习,逐步过渡到安全事件分析。每次分析后建立自己的特征库,记录常见的恶意流量模式(如特定的 TTL 值、TCP 窗口大小、HTTP 头部顺序等)。

记住:攻击者可以隐藏进程、清除日志,但无法抹去网络上的每一个字节。掌握 Wireshark,你就掌握了网络空间中最真实的证据。


附录:常用 Wireshark 显示过滤器速查

目的 过滤器
只看 HTTP 请求 http.request
只看 DNS 查询 dns.flags.response == 0
只看 SYN 包 tcp.flags.syn == 1 and tcp.flags.ack == 0
排除广播流量 not broadcast and not multicast
只看特定 IP 通信 ip.addr == 192.168.1.100
只看非标准端口 tcp.port not in {22,80,443,53}

📚 推荐资源

– 部分链接含推广返佣 –

🪐 加入「渗透实战安全圈」

每天分享渗透测试实战、挖洞技巧、漏洞分析、工具推荐

知识星球

https://t.zsxq.com/40MyD

💻 安全运维 / Linux运维 / 渗透测试 技术支持
业务需求可联系博客作者

By admin

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注