隨著無線技術的普及,Wi-Fi 和 Bluetooth 成為現代生活中不可或缺的連線方式,然而其安全性也面臨嚴峻挑戰。本文首先針對 Wi-Fi 安全,深入解析去認證攻擊和 SSID 欺騙等常見攻擊手法,並提供根據 Scapy 的 Python 程式碼範例,展示如何偵測這些惡意行為。程式碼中,利用封包捕捉和分析技術,識別去認證封包的頻率和來源,以及偽造的 SSID 廣播,有效提升 Wi-Fi 環境的安全性。此外,文章也探討了 KRACK 攻擊的原理和防禦措施,強調及時更新軟體和韌體的重要性。接著,本文深入 Bluetooth 技術領域,從 Classic Bluetooth 到 BLE,闡述其基本架構、協定堆疊和安全機制。涵蓋了 Bluetooth 裝置分類別、連線方式、安全模式以及 LMP、HCI、L2CAP、RFCOMM、BNEP、SDP 和 OBEX 等核心協定的功能和運作方式,並圖解 Classic Bluetooth 的協定架構,方便讀者理解各層級之間的互動關係。最後,文章也簡述了 BLE 的特性和應用,以及與 Classic Bluetooth 的主要差異,並點出 ATT 和 SM 等 BLE 協定的重要性,提供讀者全面的 Bluetooth 安全知識。

Wi-Fi 安全與攻擊防護

在現代網路環境中,Wi-Fi 成為了我們日常生活中不可或缺的一部分。然而,隨著Wi-Fi技術的普及,其安全問題也變得越來越嚴重。本文將探討幾種常見的Wi-Fi攻擊手法,並介紹如何透過程式碼來檢測和防範這些攻擊。

惡意去認證攻擊檢測

去認證(Deauth)攻擊是一種常見的Wi-Fi攻擊手法,攻擊者透過傳送大量的去認證封包,強制客戶端和接取點(AP)之間的連線中斷。為了檢測這種攻擊,我們可以編寫一個程式來監控網路流量,並記錄去認證封包的傳送時間和來源地址。

以下是一段Python程式碼範例,使用Scapy函式庫來檢測去認證攻擊:

from scapy.all import *
import time
import sys
import os

# 設定變數
nr_of_max_deauth = 5
deauth_timespan = 10
max_ssids_per_addr = 10
iwconfig_cmd = "iwconfig"

# 初始化字典
deauths = {}
probe_resp = {}

def handle_packet(pkt):
    if pkt.haslayer(Dot11Deauth):
        # 記錄去認證封包的傳送時間和來源地址
        deauths.setdefault(pkt.addr2, []).append(time.time())

        # 檢查是否達到最大去認證次數且時間間隔小於設定值
        if len(deauths[pkt.addr2]) == nr_of_max_deauth and \
           (deauths[pkt.addr2][-1] - deauths[pkt.addr2][0]) <= deauth_timespan:
            print("偵測到來自 " + pkt.addr2 + " 的去認證洪水攻擊")
            del deauths[pkt.addr2]

    elif pkt.haslayer(Dot11ProbeResp):
        # 記錄探測回應封包的SSID和來源地址
        probe_resp.setdefault(pkt.addr2, set()).add(pkt.info)

        # 檢查是否達到最大SSID數量
        if len(probe_resp[pkt.addr2]) == max_ssids_per_addr:
            print("偵測到來自 " + pkt.addr2 + " 的SSID欺騙")
            for ssid in probe_resp[pkt.addr2]:
                print(ssid)
            print("")
            del probe_resp[pkt.addr2]

# 解析引數
if len(sys.argv) > 1:
    iface = sys.argv[1]

# 設定網路介面為監聽模式
os.system(iwconfig_cmd + " " + iface + " mode monitor")

# 啟動封包捕捉
print("在介面 " + iface + " 上進行封包捕捉")
sniff(iface=iface, prn=handle_packet)

內容解密:

這段程式碼主要用於檢測Wi-Fi網路中的去認證洪水攻擊和SSID欺騙攻擊。以下是詳細解說:

  1. 變數設定:設定最大去認證次數、時間間隔及最大SSID數量。
  2. 字典初始化deauths用於記錄去認證封包的傳送時間和來源地址;probe_resp用於記錄探測回應封包的SSID和來源地址。
  3. 處理封包函式handle_packet函式用於處理捕捉到的每個封包。當捕捉到去認證封包時,記錄其傳送時間和來源地址;當捕捉到探測回應封包時,記錄其SSID和來源地址。
  4. 檢查條件:當去認證封包數量達到設定值且時間間隔小於設定值時,判斷為去認證洪水攻擊;當SSID數量達到設定值時,判斷為SSID欺騙。
  5. 引數解析:從命令列引數中取得網路介面名稱。
  6. 設定監聽模式:使用iwconfig命令將網路介面設定為監聽模式。
  7. 啟動封包捕捉:使用Scapy函式庫的sniff函式啟動封包捕捉,並將捕捉到的每個封包傳遞給handle_packet函式處理。

KRACK 攻擊與防範

KRACK(Key Reinstallation Attack)是一種利用WPA/WPA2加密協定中的漏洞進行攻擊的手法。攻擊者透過重播操控過的封包,強制客戶端重新安裝加金鑰匙,從而破解加密流量。以下是KRACK攻擊的簡要介紹及防範措施:

KRACK 攻擊原理

KRACK攻擊利用了WPA/WPA2四向握手協定中的漏洞。攻擊者透過重播第三個握手封包,強制客戶端重新安裝組播鑰匙(GTK),從而破解加密流量。

防範措施

  1. 更新客戶端軟體:確保所有Wi-Fi客戶端軟體已更新至最新版本,以修補已知漏洞。
  2. 更新接取點韌體:更新接取點韌體以支援安全的快速BSS轉移功能。
  3. 禁止快速BSS轉移:除非必要,否則停用快速BSS轟移功能。
  4. 加密強度提升:使用更強的加密方法(如WPA3)來提升網路安全性。

其他常見Wi-Fi攻擊工具

除了KRACK攻擊外,還有其他一些常見的Wi-Fi攻擊工具:

  • KrØØk 攻擊:利用Broadcom和Cypress Wi-Fi晶片中的漏洞安裝全零鑰匙。
  • WiFuzz:一個802.11協定模糊測試工具,使用Scapy傳送操控過的封包進行測試。
  • Pyrit:一個WPA/WPA2暴力破解工具,利用多核CPU和GPU加速破解過程。
  • Wifiphisher:一個中間人攻擊工具,實作惡意雙胞胎、KARMA和已知信標等多種攻擊手法。
小段落標題: WiFi 安全與攻擊防護

Bluetooth 技術概述

Bluetooth 是一種無線語音與資料傳輸技術,廣泛應用於手機、PDA、USB 機、鍵盤、滑鼠、耳機、印表機、汽車電話裝置、導航系統以及現代廣告海報和雨傘等裝置中。與紅外線技術不同,Bluetooth 不需要直接視線接觸即可連線裝置。在良好的硬體條件下,Bluetooth 甚至能夠穿透牆壁執行,因此可以與 WiFi 相媲美,因為它們都在 2.4 GHz 頻率上進行無線電傳輸。

裝置分類別

Bluetooth 裝置根據其傳輸範圍分為三個類別:

  • 類別 3 裝置:傳輸範圍僅限於 1 米。
  • 類別 2 裝置:傳輸範圍可達 10 米。
  • 類別 1 裝置:傳輸範圍可達 100 米。

安全性設計

Bluetooth 在設計上非常注重安全性。連線可以加密和驗證,且 Bluetooth 地址由裝置韌體設定,而不是作業系統核心,這使得地址偽裝變得更加困難,但並非完全不可能。裝置可以設定為不可發現模式,從而不會出現在掃描結果中。然而,由於協定堆疊非常複雜,過去在所有常見的 Bluetooth 傳輸實作(如 Android、iOS、Windows 和 Linux)中都出現了各種漏洞。

主要應用

隨著無線裝置的普及,Bluetooth 技術已經被應用到各種奇特的地方,例如房屋、車函式庫或汽車門的鑰匙。

Bluetooth 傳輸協定概述

以下內容主要針對 Bluetooth Classic 傳輸協定進行介紹。關於 Bluetooth Low Energy (BLE) 的內容將在後續章節中詳細說明。

基本結構

Bluetooth 基本結構由無線電介面組成,操作在 2.4 GHz ISM 頻段(2400–2483.5 MHz),訊號強度在 1 mW–100 mW 之間,傳輸範圍為 1–100 m。透過正確的天線設定,傳輸範圍可以擴充套件至一英里。基頻帶被分為 79 個頻道,並且每秒切換頻率達到 1600 次。這種頻率跳躍技術提高了抗幹擾能力並使得攔截變得更加困難。

資料傳輸方式

  • SCO(同步連線定向):建立同步連線定向點對點連線,主要用於語音傳輸。
  • ACL(非同步連線無定向):實作同步或非同步連線無定向點對點連線,主要用於資料傳輸。

SCO 和 ACL 都是在 Bluetooth 裝置韌體中實作的。連線的發起者稱為主裝置(Master),終端稱為從裝置(Slave)。這些裝置組成的網路稱為 piconet,最多可以有 255 個參與者。主裝置可以向所有從裝置傳送資料,但從裝置只能向主裝置傳送資料。

鏈路管理協定(LMP)

LMP 與乙太網相似,實作了長度為 48 bit 的 Bluetooth 源和目的地址。這些地址由三部分組成:NAP(非顯著地址部分)、UAP(上部地址部分)和 LAP(下部地址部分)。NAP 用於頻率跳躍同步幀,UAP 用於籌集各種 Bluetooth 演算法,LAP 用於唯一識別裝置並傳輸每個幀中。與 MAC 地址類別似,前三個 byte 是供應商特定的並可以在 OU-list 中找到(http://standards-oui.ieee.org/oui.txt)。LMP 負責鏈路設定、驗證、加密以及配對過程(協商長期鑰匙以匯出會話鑰匙)。

LMP 有四種不同的安全模式:

  1. 無加密和無驗證
  2. 個別流量加密,廣播流量不加密且無驗證
  3. 全部流量加密和驗證
  4. 全部流量加密和驗證並使用安全簡單配對(SSP),引入於 Bluetooth 2.1

主機控制介面(HCI)

HCI 是作業系統中實作的最低層次介面。它用於向韌體中的鏈路管理器傳送 L2CAP 包、讀取硬體功能並更改其組態等功能。通訊是根據包和連線導向的。

邏輯鏈路控制與適配協定(L2CAP)

L2CAP 與 IP 像是相似的高層協定其主要功能是資料分段、群組管理及實作更高層次協定例如 RFCOMM 、 SDP 或 BNEP 。

無線電頻序協定 (RFCOMM)

RFCOMM 模擬序列線路並提供了多個應用程式通道。它不僅用於存取序列裝置如行動電話中的調變解調器還依賴RFCOMM的高層協定例如 OBEX 。總共有30個通道。

無線藍牙網路封裝協定(BNEP)

BNEP 用於封裝 IPv4 、 IPv6 或 IPX 包 , 主要任務是透過在Linux上實作pand來隧道TCP/IP 。 BNEP 建立在L2CAP之上 。

###服務發現協定(SDP)

SDP 用於查詢遠端裝置上的服務 。 SDP不一定列出所有可用服務因此它們必須被註冊以被列出 。 SDP 建立在L2CAP之上 。

物件交換協定 (OBEX)

OBEX 的全名是 OBject EXchange , 作為物件傳輸協定 的一部分 , OBEX 提供了即時點對點資料傳輸的功能 , 比如傳送vCards 。 OBEX-Ftp 作為 FTP 一樣使用傳輸整個目錄結構 。 OBEX 建立在 RFCOMM 上 。

Bluetooth Low Energy (BLE)

自版本 4.0 開始,另一種傳輸協定稱為Bluetooth Low Energy (BLE),歷史上也稱為Bluetooth Smart。最初設計用於物聯網(IoT)裝置以便透過較低的電池容量來間歇性地交換資料傳輸比如健身追蹤器、醫療裝置和感測器等。現代智慧手機及筆記型電腦上的藍牙晶片均包含BLE技術。蘋果使用此技術在MacBook與iPhone之間交換資料(iBeacon),還有使用BLE作為門鎖或人機介面裝置(HID)如滑鼠或鍵盤進行通訊。

除了較低傳輸功率外BLT Low Energy與經典藍牙主要區別在於協定堆疊不相容即使底層協定名字相同但是有四種新協定或組態檔案:

  • ATT (屬性協定) :類別似於藍牙的SNMP . 它定義客戶端/伺服器連線以讀取或寫入透過UUID標識的值該值長度可以為16,32或128位並遵循該ID定義的許可權 。
  • SM (安全管理協定) :用於生成臨時或永久加密和簽名金鑰並將它們在客戶端與伺服器之間交換 。
graph TD
    A[主機控制介面(HCI)] --> B[鏈路管理協定(LMP)]
    B --> C[邏輯鏈路控制與適配協定(L2CAP)]
    C --> D[無線電頻序協定(RFCOMM)]
    C --> E[藍牙網路封包協定(BNEP)]
    C --> F[服務發現協定(SDP)]
    D --> G[物件交換協定(OBEX)]
次段落標題:此圖示

上方圖示展示了經典藍牙傳輸協定架構中的各個主要組成部分及其關係:

  • HCI 是最底層的介面層。
  • LMP 負責鏈路管理。
  • L2CAP 作為核心協定負責分段處理以及群組管理等工作。
  • RFCOMM 建立在此基礎之上,負責模擬序列線路等工作。
  • BNEP 用於封裝IPv4, IPv6 或 IPX 包。
  • SDP 用於查詢遠端裝置上的服務 。
  • OBEX 作為物件傳輸協定的實作提供即時點對點資料傳輸功能。

內容解密:

HCI (主機控制介面)

HCI 是藍牙硬體與軟體之間的通訊介面層,主要用來向藍牙硬體傳送命令及控制資料流方向;比如根據 HCI 的指令藍牙模組會啟動掃描功能,看看周圍有哪些藍牙裝置可以配對。

LMP (鏈路管理協定)

LMP 是負責維護藍牙通訊過程中的鏈路狀態,包括建立連線、身份驗證以及資料加密等工作;當我們第一次將手機與藍牙耳機配對時,LMP 負責進行身份驗證,確保我們正在連線的是正確的耳機.

L2CAP (邏輯鏈路控制與適配協定)

L2CAP 作為核心資料傳輸層,L2CAP 負責將來自高層應用程式的資料進行分割及重組,以適應藍牙通訊中的特殊需求;此外,它也支援多重資料流同時傳輸,讓我們可以同時進行音樂播放及打電話.

RFCOMM (無線電頻序協定)

RFCOMM 提供了一個虛擬串列埠來模擬傳統串列通訊,這樣高層應用程式可以透過標準串列API來與藍牙裝置進行通訊;例如手機內建的蓋亞測位系統就利用了RFCOMM去與GPS模組進行連線.

BNEP (藍牙網路封包協定)

BNEP 提供了一種將IP資料包封裝到藍牙通訊中的方法;這樣我們就可以使用蓋亞測位系統來連網,而不需要額外購買Wi-Fi模組.

SDP (服務發現協定)

SDP 提供了一種查詢遠端藍牙裝置所提供之服務資訊的一種方法;我們可能需要知曉耳機是否支援A2DP音樂播放時會使用SDP來查詢這項資訊.

OBEX (物件交換協定)

OBEX 提供了一種即時點對點資料傳輸之方式;當我們將手機中的聯絡人資料傳送到另一部手機時,所使用即是OBEX.