Wi-Fi 網路普及的同時,安全風險也日益凸顯,從過時的 WEP 到最新的 WPA3,加密協定不斷演進,以應對層出不窮的攻擊手段。本文除了介紹 Wi-Fi 的特性、安全隱憂以及各種加密協定外,更著重於實務操作,提供 Python 程式碼範例,示範如何運用 Python 進行 Wi-Fi 掃描和嗅探,以及如何捕捉 WEP 和 WPA/WPA2 的握手封包,藉此協助讀者深入理解無線網路的運作機制和潛在風險。透過實際操作,讀者能更有效地掌握網路安全防禦技巧,進而保護自身網路安全。
Wi-Fi 安全:無線網路的挑戰與防禦
Wi-Fi 的便利性使其無處不在,但也帶來了安全挑戰。許多使用者往往忽略了 Wi-Fi 安全的重要性,導致網路暴露於風險之中。在過去的資安事件處理經驗中,發現許多網路攻擊都是利用 Wi-Fi 的漏洞發起的。
無線網路的特性與安全隱憂
Wi-Fi 使用無線電波傳輸資料,這使得資訊更容易被攔截。瞭解 Wi-Fi 的特性與安全隱憂對於保護無線網路至關重要。
Wi-Fi 頻率與通道
Wi-Fi 使用 2.4 GHz、3.6 GHz 和 5 GHz 等頻段,每個頻段又劃分為多個通道。瞭解這些頻率和通道的特性,有助於選擇最佳的設定,降低幹擾並提升網路效能。
Wi-Fi 模式與介面模式
Wi-Fi 有 Ad-Hoc 和基礎架構兩種模式,網路卡則可設定為 Master、Repeater 和 Monitor 模式。不同的模式適用於不同的應用程式場景,選擇正確的模式對於網路安全和效能至關重要。
flowchart TD A[Wi-Fi 模式] --> B[Ad-Hoc] A --> C[基礎架構] D[Wi-Fi 介面模式] --> E[Master] D --> F[Repeater] D --> G[Monitor]
圖表翻譯:
此圖示展示了 Wi-Fi 的不同模式和介面模式。左側分支展示了 Wi-Fi 的兩種主要模式:Ad-Hoc 和基礎架構。右側分支展示了 Wi-Fi 網路卡的三種介面模式:Master、Repeater 和 Monitor。這些模式和介面模式的選擇對於網路組態和安全至關重要。
加密協定:從 WEP 到 WPA3
WEP 加密協定已過時且安全性不足,WPA 和 WPA2 提供了更高的安全性,而 WPA3 則是目前最新的加密協定,安全性更上一層樓。強烈建議使用 WPA2 或 WPA3 加密協定來保護 Wi-Fi 網路。在為客戶進行安全評估時,發現許多使用 WEP 的網路都存在嚴重的安全漏洞。
Python 網路分析:掃描與嗅探
Python 提供了強大的網路分析工具,可以幫助我們瞭解網路流量,找出潛在的安全風險。
Wi-Fi 掃描:探索無線網路
Wi-Fi 掃描可以幫助我們發現附近的 Wi-Fi 網路,並收集相關資訊,例如 SSID、BSSID、訊號強度和通道。
Python Wi-Fi 掃描實作
以下是一個使用 pythonwifi
函式庫進行 Wi-Fi 掃描的 Python 程式碼範例:
from pythonwifi.iwlibs import Wireless
# 定義頻率到通道的對應表格
frequency_channel_map = {
2412: 1, 2417: 2, 2422: 3, 2427: 4, 2432: 5,
2437: 6, 2442: 7, 2447: 8, 2452: 9, 2457: 10,
2462: 11, 2467: 12, 2472: 13, 2484: 14
}
wifi = Wireless('wlan0') # 使用你的無線網路卡介面名稱
results = wifi.scan()
for ap in results:
print(f"SSID: {ap.essid}")
print(f"BSSID: {ap.bssid}")
print(f"訊號強度: {ap.quality.signallevel}")
frequency = ap.frequency.getFrequency()
channel = frequency_channel_map.get(frequency, "未知")
print(f"頻率: {frequency}, 通道: {channel}")
print("-" * 20)
程式碼解密:
此程式碼定義了一個 Wi-Fi 掃描器,使用 pythonwifi
函式庫來掃描附近的 Wi-Fi 網路。首先,建立一個 Wireless
物件,指定要使用的無線網路卡介面。接著,呼叫 scan()
方法進行掃描,並將結果儲存在 results
變數中。最後,迴圈遍歷掃描結果,印出每個 AP 的 SSID、BSSID、訊號強度、頻率和通道。
Wi-Fi 嗅探:深入分析網路流量
Wi-Fi 嗅探可以捕捉和分析 Wi-Fi 網路流量,幫助我們瞭解網路通訊的細節。
Python Wi-Fi 嗅探實作
以下是一個使用 scapy
函式庫進行 Wi-Fi 嗅探的 Python 程式碼範例:
from scapy.all import *
def packet_handler(packet):
if packet.haslayer(Dot11):
print(packet.summary())
def wifi_sniff(interface):
sniff(iface=interface, prn=packet_handler)
wifi_sniff("wlan0")
程式碼解密:
此程式碼定義了一個 Wi-Fi 嗅探器,使用 scapy
函式庫來捕捉和分析網路封包。packet_handler
函式用於處理捕捉到的封包,如果封包包含 Dot11
層,則印出封包摘要。wifi_sniff
函式則在指定的介面上監聽 Wi-Fi 封包。
Wi-Fi 安全防禦策略
建議採取以下措施來提升 Wi-Fi 網路安全性:
- 使用 WPA2 或 WPA3 加密
- 設定強密碼
- 啟用防火牆
- 定期更新韌體
透過瞭解 Wi-Fi 安全的相關知識,並善用 Python 網路分析工具,我們可以更好地保護我們的無線網路,避免遭受網路攻擊。
WEP 破解:利用弱點入侵無線網路
WEP (Wired Equivalent Privacy) 已被證明是不安全的加密協定。其主要弱點在於其使用靜態的加密金鑰和較短的 IV (Initialization Vector),使得攻擊者可以相對容易地破解 WEP 密碼。
利用 Python 擷取 WEP 資料包
以下 Python 程式碼片段示範如何使用 Scapy 擷取 WEP 資料包:
import os
import scapy.all as scapy
iface = "wlan0"
nr_of_wep_packets = 40000
packets = []
def handle_packet(packet):
if packet.haslayer(Dot11WEP):
packets.append(packet)
print(f"擷取到 WEP 資料包:{packet.summary()}")
if len(packets) == nr_of_wep_packets:
wrpcap("wep_packets.pcap", packets)
sys.exit(0)
os.system(f"iwconfig {iface} mode monitor")
print(f"在介面 {iface} 上開始嗅探")
scapy.sniff(iface=iface, prn=handle_packet)
圖表翻譯:
此圖示展示了 WEP 破解的流程。首先,將無線網路卡設定為監聽模式,然後使用 scapy
函式庫來捕捉 WEP 資料包。當捕捉到的資料包數量達到設定的門檻值時,將這些資料包儲存到檔案中。
flowchart LR A[開始嗅探] --> B[設定為監聽模式] B --> C[捕捉 WEP 資料包] C --> D[儲存資料包到檔案]
WPA/WPA2 破解:更具挑戰性的攻擊
相較於 WEP,WPA 和 WPA2 使用更強大的加密演算法,例如 TKIP 和 AES,因此安全性更高。然而,它們並非無懈可擊。攻擊者可以嘗試捕捉握手過程中的封包,然後使用字典攻擊或其他方法來破解密碼。
WPA/WPA2 四次握手過程
WPA/WPA2 的四次握手過程是客戶端和無線基地臺建立安全連線的關鍵步驟。這個過程涉及四個步驟,用於驗證客戶端身分並建立加密金鑰。
sequenceDiagram participant Client as "客戶端" participant AP as "無線基地臺" Note over Client,AP: WPA/WPA2 四次握手 AP->>Client: Message 1 (ANonce) Client->>AP: Message 2 (SNonce, MIC) AP->>Client: Message 3 (GTK, MIC) Client->>AP: Message 4 (MIC)
圖表翻譯:
此圖示展示了 WPA/WPA2 的四次握手過程。無線基地臺首先傳送包含 ANonce 的訊息給客戶端。客戶端回應包含 SNonce 和 MIC 的訊息。基地臺接著傳送包含 GTK 和 MIC 的訊息給客戶端,最後客戶端回應包含 MIC 的訊息以確認連線。
Python 程式碼:收集 WPA/WPA2 四次握手資料包
from scapy.all import *
iface = "mon0"
wpa_handshake = []
def handle_packet(packet):
if packet.haslayer(EAPOL) and packet.type == 2:
wpa_handshake.append(packet)
print(packet.summary())
if len(wpa_handshake) >= 4:
wrpcap("wpa_handshake.pcap", wpa_handshake)
return True
os.system(f"iwconfig {iface} mode monitor")
print(f"在介面 {iface} 上開始嗅探")
sniff(iface=iface, prn=handle_packet, store=False)
程式碼解密:
此程式碼定義了一個用於捕捉 WPA/WPA2 四次握手資料包的函式。使用 scapy
設定網路卡為監聽模式,並開始嗅探 EAPOL 資料包。當捕捉到至少四個握手資料包時,將它們儲存到 wpa_handshake.pcap
檔案中。