擷取 WLAN 流量

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

主要步驟如下:

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

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

WLAN 網路運作頻率:

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

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

使用路由器的控制台

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

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

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

    Netgear 用戶端檢視畫面

  5. 你可能需要查看設定的其他部分,才能將步驟 4 的資訊對應至特定頻道和頻寬。以 Netgear 路由器為例:

    Netgear 頻道檢視畫面

使用已連上相同頻道的 Mac

按住鍵盤上的 Option 鍵,然後按一下 Mac 狀態列右上角的 WLAN 圖示。您應該會看到一般的 WLAN 選單,其中包含更多選項和資訊。查看無法使用的選單項目,找出提及「Channel」的項目:

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

Mac WLAN

找不到頻道和寬度

如果其他方法無效,可以嘗試:

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

    a. 建議:如果是 Android 手機,可以使用 Wifiman 或 Aruba 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. 開始擷取

重要事項:擷取 4 向交握

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

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

在 Mac 上擷取

按住鍵盤上的 Option 鍵,然後按一下 WLAN 圖示,接著選取「Open Wireless Diagnostics…」(開啟無線診斷…):

Mac WLAN 擷取

在「Wireless Diagnostics」選單列中,依序選取「Window」>「Sniffer」:

Mac WLAN 探測器

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

Mac WLAN 頻道和寬度

按下 Start 並輸入密碼。接著,請嘗試重現問題。請務必擷取連線的 4 向握手,如「擷取 4 向握手」一節所述。

完成後,按下 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. 執行上述指令碼,並傳入要監聽的頻道和最高頻寬,例如頻寬為 80MHz 的頻道 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,然後開啟「Preferences」頁面 (依序點選「Wireshark」選單 >「Preferences」 ,或按下 **Cmd + , ** 鍵)。

  1. 在「Protocols」類別中找到「IEEE 802.11」部分,並確認已勾選「Enable decryption」:

    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 的官方指南 (附螢幕截圖):如何解密 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 設定檔。