使用 Wireshark 进行自我网络安全审计

前往 https://ravelloh.com/posts/self-network-security-audit-with-wireshark 查看以获得最佳体验。

前言

在某些公用网络环境中，你可能会面临网络安全泄露的风险。本文使用Wireshark来分析你的设备是否存在被监听的风险。

这里以移动设备为例，实际上其余设备均可用此方法分析。你需要有无线网卡的计算机以用于为其他设备提供网络连接。

准备工作

你需要：

一台计算机(带有无线网卡)

Wireshark

其余需要分析的设备

分析

筛选目标设备

首先，将你需要分析的设备连接至你的电脑热点

在你的设备上检查其分配到的IP地址

在你的计算机中，使用cmd输入ipconfig以查看所有网卡的信息

找到其中有你所需分析设备的网卡。

在Wireshark中选择此网卡监听。

例如，我的设备IP为192.168.137.199，通过ipconfig发现其被无线局域网适配器 本地连接* 2管理，那么就应该在Wireshark中选择本地连接* 2。

检查DNS是否加密

通常情况下，你的DNS未经加密，由明文直接使用udp协议传输，这会带来巨大的安全隐患。你可以在Wireshark中，筛选并查看这些未经加密的流量。

使用你的设备访问一定数量的资源后，在你的Wireshark中以以下格式筛选：

ip.addr == [目标设备IP] && udp.port == 53

如发现类似上图的数据，说明你的DNS未经加密，可能存在泄露隐私的风险。你可以使用DoT/DoH来加密。例如，在Quantumult X的DNS配置中这样设置：

[dns]
prefer-doh3
doh-server = https://223.5.5.5/dns-query, https://223.6.6.6/dns-query,https://1.12.12.12/dns-query,https://8.8.8.8/dns-query,https://208.67.222.222/dns-query,https://208.67.220.220/dns-query,https://208.67.222.123/dns-query
no-system

检查SNI泄露

SNI（Server Name Indication，服务器名称指示）是TLS（传输层安全协议）扩展的一部分。它的作用是在TLS握手时，客户端告诉服务器它想访问的具体域名。

很遗憾，即使DNS加密，在未使用代理的情况下，你所访问的资源域名仍可被监测。

你可以在Wireshark中以以下方式筛选所有Client Hello包，查看其泄露情况。

ip.addr == [目标设备IP] && tls.handshake.type == 1 && tcp

如上图所示，如果你发现了任何你不想让其他人看到的域名，说明你的代理分流工作未到位，设置此域名走代理即可。

MITM

常用的网络监听应该就是以上两种方式，不过也不排除有些极端环境可能会MITM，虽然99%是用不上的。

MITM的特点是需要伪造证书，没什么很好的检查方式，不过你也可以通过查看Server端发过来的证书的Issuer来确认正式是否由知名CA签署。

ip.dst == [目标设备IP] && tls.handshake.certificates