捕获 WLAN 流量

通过捕获 Wi-Fi 数据包,您可以在捕获到设备上运行的软件之前被遮盖的详细信息和交互,从而捕获某些类型的 bug 的重要工具。

涉及的主要步骤如下:

  1. 找准频道去嗅探。
  2. 把握流量。
  3. 分享 WLAN 密码的捕获和哈希值。

1. 确定合适的频道和宽度

WLAN 网络运行环境:

  • 表示通道,通常用数字表示。1-13 表示 2.4GHz 信道,36-200 表示 5GHz 信道
  • 特定宽度(20 Mhz、40 Mhz、80 Mhz、160MHz)

网络中的每个接入点(例如路由器、网状节点)通常具有唯一的 2.4GHz 信道和 5GHz 信道,您需要确定设备连接的是哪一个。有以下几个选项:

使用路由器的控制面板

如果您使用的是 Nest WiFi,请跳过此选项 - 系统不会公开信息。

大多数路由器都有一个已连接设备的列表以及它们使用的通道和宽度。

  1. 按照此指南查找路由器的 IP 地址。
  2. 在网络浏览器中,转到路由器的地址,例如 http://192.168.1.1
  3. 登录。不知道密码?查找路由器上的标记,或使用路由器密码
  4. 查找名为“客户端”或“已连接的设备”等内容的页面。例如,Netgear 路由器页面可能如下所示,或适用于 Eero 设备

    Netgear 客户端视图

  5. 您可能需要查看设置中的其他地方,将第 4 步中的信息映射到特定通道和带宽。例如,Netgear 路由器:

    Netgear 频道视图

如果您的 Mac 已连接到同一频道,请使用它

按住键盘上的 Option,然后点击 Mac 状态栏中右上角的 WLAN 图标。您应该会看到常规 Wi-Fi 菜单,其中包含一些更多选项和信息。请查看不可用的菜单项,并找出提及“频道”的菜单项:

`Channel 60 (DFS, 5GHz, 40MHz)`

Mac WLAN

找不到频道和宽度

如果其他方法都行不通,您可以尝试以下方法:

  1. 列出您的 AP 正在使用的所有信道(通常每个 AP 或网状网点有 2 个信道)。

    a. 建议:在 Android 手机上,您可以使用 WifimanAruba 实用程序等应用。

    a. 在 Mac 上,您可以使用 /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport-s 列出选项。

  2. 按照以下说明,对每个频道执行一小段(即使 15 秒也足够)捕获

  3. 安装 Wireshark(如需帮助,请参阅安装 Wireshark)。

  4. 使用 Wireshark 打开每个捕获,应用 wlan.addr == YOUR_DEVICE'S_MAC 的显示过滤器,看看是否显示了任何数据包。

2. 开始拍摄

重要提示:捕获四次握手

如果开启了 WLAN 的安全性,您需要知道加密密钥才能解密捕获的数据包。加密密钥派生自设备连接到网络时进行的四次握手,且对于设备和 AP 之间的每个连接都是唯一的。

因此,您必须捕获四次握手以解密 Wi-Fi 载荷。如果在开始捕获时设备已连接到网络,请在嗅探开始后断开连接并重新连接设备(或重新启动设备)。

在 Mac 上拍摄

按住键盘上的 Option 键,点击 WLAN 图标,然后选择“打开无线诊断...”:

Mac WLAN 捕获

在“无线诊断”菜单栏中,依次选择窗口 > Sniffer

Mac WLAN 嗅探器

将通道和宽度设置为您之前检索的值(屏幕截图示例为 Channel 60 和 Width 40 MHz):

Mac WLAN 信道和宽度

Start 并输入密码。现在,尝试重现问题。 确保您从连接捕获四次握手,如捕获四次握手中所述。

完成后,按 Stop。可以在包含所有流量的 /var/tmp 中找到新的 *.pcap 文件。示例文件名为:(null)_ch100_2018-11-06_10.52.01.pcap

在 Linux 上截取

  1. 关闭 WLAN。这可以通过以下两种方式实现:

    • 使用 GUI(推荐)
    • 使用网络管理器 CLI 指示其停止管理 Wi-Fi 接口:sudo nmcli dev set <wlan-ifname> managed on
    • 如果使用其他网络管理器,请进行相应调整。
  2. 保存此脚本。将 <wlan-ifname> 替换为您的 Wi-Fi 接口的名称。本文档假定脚本名称为 setup-wifi-capture

    #!/usr/bin/env bash
    sudo ifconfig <wlan-ifname>  down
    sudo rfkill unblock wifi
    sudo iwconfig <wlan-ifname>  mode monitor
    sudo ifconfig <wlan-ifname>  up
    sudo iw dev <wlan-ifname> set channel $@
    
  3. 执行上述脚本并传入信道和最高带宽以进行嗅探,例如信道 153 和 80MHz:

    ./setup-wifi-capture chan 153 80 MHz
    
  4. 打开 Wireshark,现在您应该能够在 wlan 接口上捕获数据包。

3. 分享截图

  1. 使用 WPA PSK(原始密钥)生成器生成密码的哈希值。这样,您就可以在不知道明文密码的情况下解密捕获的内容。

  2. 您还需要共享生成的 PSK,以便其他人可以解密捕获的 PSK。

附录

安装 Wireshark

您可以在 Linux 上使用 apt install Wireshark 安装 Wireshark,也可以从 Wireshark 网站在线下载 Wireshark。

设置 Wireshark 以解密流量

对于共享捕获文件而言,此操作不是必需的;只有当您想要在 Wireshark 中自行检查解密流量时,才需要执行此操作。

通过 Wi-Fi 上的 WPA2 安全性,WPA2-PSK 不会直接用于流量加密和解密。它用于四次握手,您需要捕获该四次握手以解密数据包。但是,如果您尝试捕获的只是连接到 Wi-Fi 的问题或连接中断(可以从 Wi-Fi 管理帧中收集),则不需要捕获四向握手。无论哪种情况,捕捉它并没有什么坏处。

打开 Wireshark 并打开“Preferences”页面(Wireshark 菜单 > Preferences 或 **Cmd + , **)。

  1. 在“协议”类别中找到“IEEE 802.11”部分,并确保选中“启用解密”:

    Mac Wireshark 偏好设置

  2. 点击解密密钥标签旁边的修改按钮。

  3. 点击左下角的“+”按钮,然后选择“wpa-pwd”选项。

    Mac Wireshark WPA 和密码

  4. 点击新创建的行的键列(位于 wpa-pwd 字符串的右侧),以 <password>:<ssid> 格式输入您的 WPA2 PSK 和 SSID。例如,如果您的网络名称为 MyHomeNetwork,WPA2 PSK 为 myp4ssword,请输入 myp4ssword:MyHomeNetwork

    Mac Wireshark SSID

  5. 点击“确定”进行确认

如需了解详情,请参阅 Wireshark 的官方指南(含屏幕截图)中的 How to Decrypt 802.11(如何解密 802.11)。

如果使用 tshark,请传递以下参数:

tshark -o wlan.enable_decryption:TRUE -o 'uat:80211_keys:"wpa-pwd","<psk>:<ssid>"'

着色 Wireshark 802.11 数据

Metageek.com 上提供了一个便捷的 802.11 颜色配置文件:Wireshark 配置文件