網(wǎng)絡(luò)安全知識:藍牙安全
主要的兩個藍牙無線電版本是:
藍牙基本速率/增強數(shù)據(jù)速率 (BR/EDR),也稱為藍牙經(jīng)典
藍牙低功耗 (BLE),也稱為藍牙智能,是2010年作為藍牙4.0的一部分引入的輕量級子集
Bluetooth Classic 和 BLE 使用不兼容的不同堆棧。但是,它們可以共存于共享同一天線的一臺設(shè)備中,因為它們都使用 2.4 GHz ISM 頻段的相同無線電頻率,并應(yīng)用跳頻擴頻 (FHSS) 機制來避免干擾。事實上,在許多情況下,它們是相輔相成的;這就是為什么現(xiàn)在大多數(shù)設(shè)備都是雙模式的原因。如下圖所示,Bluetooth Classic 單模設(shè)備預(yù)計將在未來消失,而 BLE 單模設(shè)備則因 IoT 行業(yè)的擴張而增長。
值得注意的是,Bluetooth Classic 并不是 BLE 的過時版本;它們是用于不同應(yīng)用的不同技術(shù)。Bluetooth Classic 主要用于需要點對點連續(xù)流傳輸?shù)那闆r,例如無線音頻流傳輸(無線揚聲器、耳機、車載娛樂系統(tǒng))或文件傳輸。另一方面,BLE 專為極低功耗操作而設(shè)計,支持多種通信拓撲,從點對點擴展到廣播和網(wǎng)狀網(wǎng)絡(luò)。BLE 應(yīng)用的示例包括監(jiān)控傳感器、信標和高精度室內(nèi)定位服務(wù)。
這篇文章的重點是 BLE,特別是 4.2 版,該版本將在 2025 年 2 月之前有效。需要注意的是,藍牙規(guī)范的第 5 版引入了一些本文未概述的新功能(例如,擴展廣告,網(wǎng)狀網(wǎng)絡(luò),或測向)。但是,第 5 版設(shè)備在市場上還不是很普遍。
是什么讓它“低能耗”?
要點是 BLE 盡可能讓無線電保持關(guān)閉狀態(tài)。這是通過以下方式實現(xiàn)的:
只有三個廣告頻道,而不是經(jīng)典規(guī)格的16到32個。這減少了待機時間。
非??焖俚倪B接建立(從非連接狀態(tài)到連接狀態(tài))大約需要三毫秒,這意味著使用無線電的時間更少。Bluetooth Classic連接最多可能需要100 毫秒。
低峰值功率,15mA,有助于節(jié)省電池。Bluetooth Classic 峰值功率為 25mA,這也很低,但對于基于紐扣電池的應(yīng)用來說還不夠。
藍牙堆棧:
應(yīng)用層 | 應(yīng)用 | |
主持人 | 通用訪問配置文件 (GAP) | |
通用屬性配置文件 (GATT) | ||
屬性協(xié)議 (ATT) | 保安經(jīng)理 | |
邏輯鏈路控制和適配協(xié)議 (L2CAP) | ||
控制器 | 鏈路層 | 直接測試模式 |
物理層 |
讓我們簡要定義每一層是如何工作的:
應(yīng)用層通常是最重要數(shù)據(jù)所在的位置。在這一層之下,其他人負責傳輸或轉(zhuǎn)換數(shù)據(jù)。
GAP 定義了 BLE 連接的兩個主要方面:
- 可見性:設(shè)備如何相互發(fā)現(xiàn),包括掃描和廣告
- 交互:設(shè)備如何相互交互,包括如何管理連接(角色、模式、安全參數(shù)等)
BLE 中主要有兩種連接模式:Advertising(單向發(fā)送數(shù)據(jù),不建立連接)和Connected(雙向發(fā)送數(shù)據(jù))。
只有在 GAP 完全設(shè)置可見性和交互方面之后,GATT 才會定義設(shè)備如何相互交換信息。為此,GATT 使用 ATT 作為底層協(xié)議來定義服務(wù)器如何向客戶端公開其數(shù)據(jù)以及數(shù)據(jù)的結(jié)構(gòu)。數(shù)據(jù)被構(gòu)造為屬性,可以是多種類型(命令、請求、響應(yīng)、通知、指示或確認)中的一種,并使用 16 位唯一 ID(也稱為“句柄”)存儲在表中入口。因此,屬性的句柄可以從 0x0001 到 0xFFFF。根據(jù)藍牙規(guī)范,保留值為 0x0000 的屬性句柄,不得使用。
如前所述,GATT 定義了如何與屬性(必須發(fā)送的數(shù)據(jù))進行交互,為此,它使用以下概念:
- 服務(wù):一組一個或多個屬性
- 特性:服務(wù)端要暴露給客戶端的一段數(shù)據(jù)
gatttool是一個有用的工具,可以用來處理這些屬性。
BLE 中的安全管理器負責配對、加密和簽名等安全程序。所有連接都從“無安全”模式(不配對)開始,當它們想要以安全的方式交換數(shù)據(jù)時,它們需要配對。配對過程涉及交換臨時密鑰 (TK) 以生成用于加密連接鏈路的短期密鑰 (STK)。整個通信的安全性在很大程度上取決于這種傳統(tǒng)知識是如何交換的。有四種關(guān)聯(lián)模型(針對 BLE 4.2),選擇其中一種取決于設(shè)備的輸入/輸出能力(以明文形式交換的信息)。我們將它們從最不安全到最安全進行了排序:
關(guān)聯(lián)模型 (1-3) 被稱為LE Legacy Pairing ,由于缺乏安全性,應(yīng)該避免使用。
- Just works :此模型適用于沒有顯示屏的設(shè)備,例如耳機或揚聲器(因此,此方法可能最適用于 BLE <4.2 設(shè)備)。TK 設(shè)置為零,因此可以通過輕松計算 STK 進行竊聽和中間人 (MiTM) 攻擊。
- 密碼:此模型適用于通常具有顯示屏的設(shè)備(盡管有一些例外)。一臺設(shè)備顯示一個隨機生成的 6 位數(shù)字 TK,另一臺設(shè)備請求它。如果設(shè)備沒有顯示,用戶需要在兩者中輸入相同的 TK。此方法提供了一些針對竊聽和 MITM 攻擊的保護;但是,由于 TK 很容易被暴力破解,因此整體安全性很差。
- 帶外 (OOB) :此模型適用于具有替代通信技術(shù)(例如 NFC)的設(shè)備,可用于交換加密信息。如果備用通道是安全的,此方法可提供良好的安全保護。在這種情況下,TK 可能不容易被暴力破解,因為不需要人工交互,因此此方法生成的 TK 可能更長(最多 128 位)且更復(fù)雜。
關(guān)聯(lián)模型 (4) 是最安全的,被稱為LE 安全連接(在 BLE 4.2 中引入)。該模型的主要區(qū)別在于,這些關(guān)聯(lián)模型不使用 TK 和 STK,而是使用長期密鑰 (LTK) 來加密連接鏈接,并使用公鑰密碼學(xué)(特別是橢圓曲線 Diffie Hellman 算法)來交換LTK。此改進可防止竊聽攻擊,但不能防止 MitM 攻擊。
數(shù)值比較:該模型提供了最好的安全性,而不會過多地影響用戶體驗。因此,在設(shè)計 BLE 設(shè)備或應(yīng)用程序時推薦使用它。使用此模型時,兩個設(shè)備交換其公共 ECDH 密鑰,并為每個對等方獨立生成一個隨機的 128 位隨機數(shù),以提供針對重放攻擊的保護。然后,交換這些隨機數(shù)(使用 ECDH 密鑰,以避免竊聽攻擊)并使用 確認值生成功能進行檢查. 最后,兩個設(shè)備都使用交換的公鑰和隨機數(shù)獨立計算出一個六位數(shù),并在顯示器上顯示出來。此時,用戶需要檢查它們并確認(用“是”或“否”)兩個數(shù)字匹配。匹配數(shù)字意味著沒有執(zhí)行 MitM 攻擊,因此可以安全地加密連接鏈接。如果數(shù)字不匹配且用戶選擇“否”,則配對過程失敗,從而保護用戶。
總之,上面列出的所有關(guān)聯(lián)模型的主要和困難目標是在沒有建立連接的兩個設(shè)備之間安全地交換密鑰。最大的優(yōu)勢是通常這兩種設(shè)備之間都有一個人。
接下來是邏輯鏈路控制和適配協(xié)議 (L2CAP) 層,負責多路復(fù)用、分段和重組、邏輯連接建立和流量控制。它相當于TCP/IP棧中的IP。
最后,我們有鏈路層,它負責掃描、通告和創(chuàng)建連接,并直接與將位轉(zhuǎn)換為 RF 的物理層交互。這兩層是由藍牙芯片中的硬件實現(xiàn)的。所有其他的都由設(shè)備中的軟件實現(xiàn)。
滲透測試 BLE 連接
安全性如何?BLE只是一種技術(shù);因此,兩個設(shè)備之間的 BLE 安全責任取決于制造商應(yīng)用的實施。
當可以完全控制至少一臺設(shè)備時:
滲透測試 BLE 設(shè)備的最簡單方法是使用主機控制器接口 (HCI)。如前所述,Host層由軟件實現(xiàn),Controller層由硬件實現(xiàn)。藍牙 HCI 指定了它們之間的所有交互,并且可以記錄這些交互。不需要額外的硬件。
記錄 HCI 事件和命令非常容易,尤其是在 Android、Linux 和 OS X 系統(tǒng)上:
- Android:不需要 root 或其他應(yīng)用程序。“開發(fā)者選項”下已經(jīng)有一個名為“啟用藍牙 HCI 監(jiān)聽日志”的選項。啟用此選項后,智能手機將開始將所有通過 HCI 的流量記錄到一個文件中。
- Linux:“btmon”工具用于將 HCI 事件和命令記錄到文件中。
- OS X:XCode 的附加工具,稱為“PacketLogger”,用于記錄此流量。
日志記錄應(yīng)用程序生成 BTsnoop 格式的文件,這些文件不是純文本。但是,它們可以很容易地加載到 Wireshark 中。以下 Wireshark 過濾器可用于分析 BLE 流量:
- btatt:顯示ATT數(shù)據(jù)包,內(nèi)容是應(yīng)用程序發(fā)送和接收的數(shù)據(jù)。
- bthci_cmd.le_long_term_key:顯示 BLE 加密的長期密鑰。在捕獲的流量中找不到這些字節(jié)意味著連接未經(jīng)過 BLE 加密(但可以在應(yīng)用層加密)。
對于經(jīng)典藍牙:
- bthci_cmd.link_key:顯示用于加密藍牙連接的鏈接密鑰。在捕獲的流量中找不到這些字節(jié)意味著連接未經(jīng)過 BLE 加密(但可以在應(yīng)用層加密)。
日志記錄總是比嗅探更容易,應(yīng)盡可能使用。
當無法完全控制任何設(shè)備時:
例如,當想要分析無線游戲控制器與其游戲控制臺之間的 BLE 流量時。通常,在這種情況下我們有三種選擇:
- 將游戲控制器與另一臺您可以完全控制并記錄流量的設(shè)備配對(并非總是可行)。
- 在游戲控制臺中獲得完全控制并記錄流量(并非總是可能)。
- 無需完全控制任何設(shè)備即可嗅探通信。
最后一個選項通常需要額外的硬件,例如 BBC MicroBit、BlueFruit 或 Ubertooth。然而,這些設(shè)備并不可靠,它們會丟失數(shù)據(jù)包,即使連接已被捕獲。
此外,這些設(shè)備中的每一個都只能在一個 BLE 通道上收聽。由于 BLE 頻譜具有三個廣告通道,因此使用一臺設(shè)備捕獲連接的概率為 33.33%。使用兩個設(shè)備,則為 66.66%。使用三臺設(shè)備(每個廣告頻道一臺),概率為 100%。
通常用于嗅探的軟件是BTLE Jack,它自動解決了 BLE 中應(yīng)用的跳頻機制帶來的所有困難。
對于更專業(yè)的任務(wù),Ellisys 公司銷售用于藍牙嗅探的非常好的和可靠的設(shè)備,例如 Bluetooth Explorer 或 Bluetooth Vanguard。但是,價格比 MicroBit 或 BlueFruit 高得多。
總之,對于大多數(shù)筆測試項目,使用主機控制器接口記錄流量就足夠了。如果顧問無法完全控制任何設(shè)備,一個 BBC MicroBit(或類似的嗅探工具)就足夠了。但是,如果設(shè)備丟失數(shù)據(jù)包,他們將需要重復(fù)該過程。
中間人攻擊
當日志記錄或嗅探還不夠并且需要修改流量時,我們通常使用兩種攻擊向量:
- 在完全受控的設(shè)備上掛鉤函數(shù)(例如,使用Frida )。
- 在網(wǎng)絡(luò)級別執(zhí)行中間人 (MitM) 攻擊。
如今,一些供應(yīng)商對他們的應(yīng)用程序代碼進行了嚴重的混淆,使得逆向工程師很難理解。此外,滲透測試幾乎總是有時間限制的,因此當代碼被混淆時,第一個選項通常變得不可行。
然而,僅使用一臺筆記本電腦和兩個 BLE 加密狗,就可以執(zhí)行 MitM 攻擊,而無需對固件或移動應(yīng)用程序進行任何類型的分析。因此,代碼混淆不能防止第二種攻擊向量。
gattacker 和BTLE Juice等工具已經(jīng)處理了所有 BLE 協(xié)議階段和功能,以允許 MitM 和中繼攻擊。這些工具非常靈活,非常適合發(fā)現(xiàn)應(yīng)用程序或 BLE 協(xié)議本身的新缺陷。
例如,攻擊者可以使用工具 gattacker 在配對階段對兩個設(shè)備之間的連接進行中間人攻擊,并修改流量以誘使設(shè)備進入更不安全的關(guān)聯(lián)模型。
結(jié)論
強烈建議開始研究 BLE 和物聯(lián)網(wǎng)設(shè)備。許多物聯(lián)網(wǎng)供應(yīng)商仍在為其設(shè)備應(yīng)用非常薄弱的安全性(如果有的話),這相當于 90 年代計算機的安全性。