擷取 WLAN 流量

擷取 Wi-Fi 封包可讓您查看詳細資料和互動,這些資料和互動在傳送至裝置上執行的軟體前會經過遮蓋,因此擷取封包是某些類型錯誤的重要工具。

主要步驟如下:

  1. 找出要監聽的正確頻道。
  2. 擷取流量。
  3. 分享擷取內容和 WLAN 密碼的雜湊值。

1. 判斷合適的管道和寬度

WLAN 網路的運作頻率如下:

  • 頻道,通常以數字表示。1 到 13 適用於 2.4 GHz 頻道,36 到 200 適用於 5 GHz 頻道
  • 特定寬度 (20Mhz、40Mhz、80Mhz、160MHz)

網路中的每個存取點 (例如路由器、網狀節點) 通常都有專屬的 2.4 GHz 頻道和 5 GHz 頻道,你需要找出裝置連線的頻道。下列幾個選項供您參考:

使用路由器的控制面板

如果使用 Nest WiFi,請略過這個選項,因為系統不會公開這項資訊。

大多數路由器都會列出連線裝置,以及使用的頻道和頻寬。

  1. 請參閱這份指南,找出路由器的 IP 位址。
  2. 在網路瀏覽器中前往路由器的位址,例如 http://192.168.1.1
  3. 登入即可忘記密碼嗎?查看路由器上的標籤,或使用「路由器密碼」。
  4. 尋找名為「用戶端」或「已連線裝置」的頁面。舉例來說,Netgear 路由器的頁面可能如下所示,或如Eero 裝置所示。

    Netgear 用戶端檢視畫面

  5. 您可能必須在設定中的其他位置,將步驟 4 的資訊對應至特定頻道和頻寬。例如 Netgear 路由器:

    Netgear Channels 檢視畫面

如果 Mac 已連線至相同頻道,請使用 Mac

按住鍵盤上的「Option」鍵,然後按一下 Mac 狀態列右上角的 WLAN 圖示。畫面上應該會顯示一般 WLAN 選單,以及一些額外的選項和資訊。查看無法使用的選單項目,找出提及「頻道」的項目:

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

Mac WLAN

找不到通道和頻寬

如果其他方法無法解決問題,請嘗試:

  1. 列出 AP 使用的所有頻道 (通常每個 AP 或網狀存取點有 2 個頻道)。

    a. 建議:使用 Android 手機時,可以透過 WifimanAruba Utilities 等應用程式進行測試。

    a. 在 Mac 上,你可以使用 /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport-s 列出選項。

  2. 按照下列指示,針對每個頻道進行短時間的擷取 (即使只有 15 秒也足夠)

  3. 安裝 Wireshark (如需協助,請參閱「安裝 Wireshark」)。

  4. 使用 Wireshark 開啟每個擷取畫面,套用 wlan.addr == YOUR_DEVICE'S_MAC 的顯示篩選器,然後查看是否有任何封包顯示。

2. 開始擷取

重要事項:擷取四向交握

如果 Wi-Fi 已啟用安全性,您必須知道加密金鑰,才能解密擷取的封包。加密金鑰衍生自裝置連上網路時發生的四向交握,且每個裝置與 AP 之間的連線都有專屬金鑰。

因此,您必須擷取四向握手,才能解密 Wi-Fi 酬載。如果裝置在開始擷取時已連上網路,請在開始封包側錄後中斷連線並重新連線 (或重新啟動裝置)

在 Mac 上擷取

按住鍵盤上的 Option 鍵,然後按一下 WLAN 圖示,並選取「開啟無線診斷…」:

Mac WLAN 擷取

在「無線診斷」選單列中,依序選取「視窗」>「封包嗅探器」

Mac WLAN Sniffer

將頻道和頻寬設為先前擷取的值 (螢幕截圖範例為頻道 60 和頻寬 40 MHz):

Mac WLAN 頻道和寬度

按下 Start 並輸入密碼。現在請嘗試重現問題。 請務必如「擷取四向交握」一文所述,從連線擷取四向交握。

完成後,請按 Stop 鍵。/var/tmp 中會出現新的 *.pcap 檔案,內含所有流量。檔案名稱範例如下: (null)_ch100_2018-11-06_10.52.01.pcap

在 Linux 上擷取

  1. 關閉 Wi-Fi。您可以採取下列任一做法:

    • 使用 GUI (建議)
    • 使用 Network Manager CLI 停止管理 WLAN 介面: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. 執行上述指令碼,並傳遞要偵測的頻道和最高頻寬,例如頻寬為 80 MHz 的頻道 153:

    ./setup-wifi-capture chan 153 80 MHz
  4. 開啟 Wireshark,現在應該就能在 wlan 介面上擷取封包。

3. 分享擷取畫面

  1. 使用 WPA PSK (原始金鑰) 產生器產生密碼的雜湊值。這樣您就能解密擷取內容,不必知道純文字密碼。

  2. 您也必須分享產生的 PSK,其他使用者才能解密擷取內容。

附錄

安裝 Wireshark

您可以在 Linux 上使用 apt install wireshark 安裝 Wireshark,或從 Wireshark 網站下載。

設定 Wireshark 解密流量

分享擷取檔案時不需要執行這項操作,只有在您想自行在 Wireshark 中檢查解密流量時,才需要這麼做。

使用 Wi-Fi 的 WPA2 安全性時,WPA2-PSK 不會直接用於加密和解密流量。這項金鑰用於四向交握,您必須擷取這項金鑰才能解密封包。不過,如果您只想擷取 Wi-Fi 連線問題或連線中斷問題,這類問題可從 Wi-Fi 管理框架中得知,則不需要擷取 4 向交握。無論如何,擷取這類資訊都不會造成負面影響。

開啟 Wireshark,然後開啟「偏好設定」頁面 (依序點選「Wireshark」選單 >「偏好設定」或按 **Cmd + , **)。

  1. 在「通訊協定」類別中找到「IEEE 802.11」部分,並確認已勾選「啟用解密」:

    Mac Wireshark Prefs

  2. 按一下「解密金鑰」標籤旁的「編輯」按鈕。

  3. 按一下左下角的「+」按鈕,然後選取「wpa-pwd」選項。

    Mac Wireshark WPA 和密碼

  4. 按一下新建立資料列的「key」欄 (緊鄰 wpa-pwd 字串右側), 以 <password>:<ssid> 格式輸入 WPA2 PSK 和 SSID。 舉例來說,如果網路名稱為 MyHomeNetwork,而 WPA2 PSK 為 myp4ssword,請輸入 myp4ssword:MyHomeNetwork

    Mac Wireshark SSID

  5. 按一下「確定」確認

如需更多資訊,請參閱 Wireshark 的官方指南 (附螢幕截圖):如何解密 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 設定檔