安恒海特實驗室對此研究如下文:https://www.anquanke.com/post/id/206624
藍牙(BR/EDR)是用于數十億設備的無線通信的普遍技術。藍牙標準包括傳統認證過程和安全認證過程,從而允許設備使用長期密鑰來相互認證。在配對和安全連接建立期間將使用這些過程,以防止冒充攻擊。在本文中證明了藍牙規范包含一些漏洞,這些漏洞使得可以在建立安全連接期間執行冒充攻擊。此類漏洞包括缺乏強制性的相互身份驗證,過于寬松的角色切換以及身份驗證過程降級。
攻擊符合藍牙標準,因此對于任何符合標準的藍牙設備均有效,無論藍牙版本、安全模式(例如安全連接)、設備制造商和實施細節如何。攻擊是隱性的,因為藍牙標準不需要通知終端用戶有關身份驗證過程的結果或缺少相互身份驗證。為了確認BIAS攻擊是否可行,成功地對來自主要硬件和軟件供應商的31個藍牙設備(28個獨特的藍牙芯片)進行了攻擊,并實施了所有主要的藍牙版本,包括蘋果、高通、英特爾、賽普拉斯、博通、三星和CSR。
0x01 Introduction
藍牙是用于低功率無線網絡的普遍技術。藍牙提供了藍牙BR/EDR和藍牙低功耗(BLE)無線堆棧。在本文中,重點介紹藍牙BR/EDR,并將其稱為藍牙。藍牙已在數十億種設備中部署,例如手機,IoT設備,筆記本電腦,汽車,醫療設備和工業設備。藍牙受藍牙特殊利益組織(SIG)的監管,該組織維護并審查了藍牙標準。該標準定義的安全機制中的單個漏洞會轉化為數十億個可利用的設備。
藍牙標準規定了一種安全架構,該架構在鏈路層中提供機密和完整性。首先要配對的兩個從未見過的藍牙設備要建立安全連接。配對時,設備同意并驗證長期密鑰。然后,此密鑰用于派生用于后續安全連接的會話密鑰。期望兩個藍牙設備配對一次并安全地連接多次。在安全連接建立期間,設備必須驗證其在配對時建立的長期密鑰的擁有。
在最近的一篇論文中研究人員表明,即使受害者已經配對,藍牙安全連接的建立也容易受到中間人攻擊。但是,在該工作中,攻擊假定存在要闖入的合法安全連接。攻擊者無法針對隔離的藍牙設備,因為攻擊者無法在安全連接建立過程中證明受害者的長期密鑰已被擁有。
在本文中演示了藍牙標準包含的漏洞,攻擊者可以利用該漏洞冒充設備并與受害者建立安全連接,而無需擁有被冒充的設備和受害者共享的長期密鑰。攻擊針對安全連接建立的身份驗證階段。特別是攻擊了用于舊版安全連接(LSC)的舊式身份驗證過程和用于安全連接(SC)的安全身份驗證過程。當受害者和被冒充的設備配對時,攻擊者不必在場,也不需要觀察它們之間的任何先前通信。
將展示如何利用已識別的漏洞在傳統身份驗證過程和安全身份驗證過程上進行主-從冒充攻擊。即使受害者使用藍牙最強的安全模式(例如SSP和安全連接),攻擊也能起作用。攻擊針對標準的藍牙身份驗證程序,因此可有效攻擊任何符合標準的藍牙設備。
0x02 Background
A.藍牙BR/EDR
藍牙基本速率擴展數據速率(BR/EDR),在本節中稱為藍牙,是一種用于低功耗和短距離通信的無線技術,它是無線個人區域網(PAN)的事實上的標準。物理層的藍牙使用具有跳頻擴展頻譜的2.4 GHz ISM頻段。兩個連接的藍牙設備以固定的時間間隔在79個通道之間跳轉,每個通道的帶寬為1MHz。藍牙允許使用自適應跳頻來減輕對范圍內無線設備的干擾。藍牙網絡由一個主設備組成,該主設備可以協調和同步最多七個從設備。在建立異步無連接(ACL)物理鏈路之后,即在基帶尋呼之后,兩個設備可以隨時切換主-從(master/slave)角色。
藍牙規范可免費獲得,由藍牙SIG維護。該規范將藍牙協議棧分為主機和控制器兩個主要組件,并指定了它們的標準接口,即主機控制器接口(HCI)。該標準還指定了一種HCI協議,主機使用該協議將命令發送到控制器,控制器將事件發送到主機。主機由設備主操作系統實現,而控制器由設備藍牙芯片的固件實現。該標準未提供主機和控制器的參考實現,并且藍牙供應商通常使用其專有實現。
藍牙標準定義了使用舊版安全連接過程或安全連接過程在鏈路層保護藍牙連接的機制。兩個藍牙設備使用配對來達成長期密鑰。最安全和廣泛使用的配對機制是安全簡單配對(SSP),它使用橢圓曲線Diffie Hellman(ECDH)進行密鑰協商。如果配對設備支持安全連接,則在P-256曲線上執行SSP,否則在P-192曲線上執行。配對后,并根據使用的安全性程序,設備從ECDH共享機密中計算出長期密鑰,并且它們會相互認證該密鑰。配對是通過空中執行的,它使用鏈接管理器協議(LMP)。
一旦兩個配對的設備共享一個長期密鑰,則它們可以建立多個安全連接。每個安全連接使用不同的會話密鑰,該會話密鑰是根據長期密鑰和其他公共參數計算得出的。藍牙安全連接建立既未加密也不受到完整性保護,兩個設備使用它來交換功能,驗證長期密鑰,計算會話密鑰并激活安全連接。如果連接設備支持安全連接,則安全連接建立將使用安全身份驗證過程,并且使用AES CCM對連接進行加密和完整性保護。否則,對于舊版安全連接,安全連接建立將使用舊式身份驗證過程,并且將使用E0流密碼對連接進行加密。安全的連接建立是通過空中進行的,它使用LMP協議。
0x03 System and Attack Model
A.系統模型
考慮了兩個受害設備Alice和Bob,它們使用安全的藍牙鏈接進行通信(請參見下圖)。請注意,在攻擊時不要求兩個受害者都在場,僅假設存在兩個合法設備并在過去進行通信。假設Alice和Bob已經共享了一個長期密鑰,稱為鏈接密鑰。通過完成藍牙的“安全簡單配對”(使用舊版安全連接或安全連接)并使用強關聯模型(例如密碼輸入),可以達成共識。
在不失一般性的前提下,假設Bob是藍牙主設備,Alice是藍牙從設備。 Bob希望使用上述現有密鑰與Alice建立安全連接,Alice也愿意使用此密鑰接受鮑勃的連接。冒充攻擊發生在安全連接建立期間,即當Alice和Bob交換其功能、驗證長期密鑰、計算會話密鑰并激活加密時。根據Alice和Bob的功能,可以使用Legacy Secure Connections或Secure Connections建立安全連接。在這兩種情況下,都假定使用的所有安全原語(例如AES和Hmac)都是完全安全的。盡管不是必須的,但Alice和Bob可以使用長期密鑰建立以前的安全連接。
B.攻擊者模型
攻擊者的目標是與Alice(或Bob)建立安全的藍牙連接,冒充是Bob(或Alice)。攻擊者(Charlie)沒有擁有Alice和Bob共享的長期密鑰,并且當他們安全配對時,他沒有觀察到他們。Charlie能夠竊聽、解碼和處理未加密的數據包,并干擾藍牙頻譜。Charlie知道有關Alice和Bob的公共信息,例如其藍牙名稱,藍牙地址,協議版本號和功能。由于安全連接的建立未加密,Charlie可以通過竊聽他們的通信來收集Alice和Bob的特征。在Alice和Bob之間建立安全連接之后,Charlie可以阻塞藍牙頻譜以迫使Alice和Bob斷開連接,然后重新建立安全連接。
C.符號
KL表示配對產生的長期密鑰,稱為鏈接密鑰。藍牙身份驗證過程涉及質詢響應協議,用C指示驗證者發送的質詢,并用R指示證明者的響應。用HL( )指示用于傳統安全連接身份驗證的哈希函數,并用HS( )指示用于安全連接身份驗證的哈希函數。這些函數從多個參數(包括C)生成R,用k表示連接運算符,用rand( n)表示生成n個隨機字節的函數。藍牙地址以BTADD表示。使用M,S,A,B和C下標表示與主設備,從設備,Alice,Bob和Charlie相關的數量。例如,主設備將CM發送給從設備,而從設備通過將RS發回進行響應。
0x04 Bluetooth Impersonation AttackS(BIAS)
Alice和Bob配對一次就達成KL協議,然后通過使用傳統安全連接或安全連接來認證他們在建立安全連接后擁有KL。唯一標識其安全綁定的三元組為(KL,BTADDA,BTADDB)。當模仿Alice或Bob時,Charlie可以將其藍牙地址更改為BTADDA或BTADDB,但他不能證明KL的所有權。這是藍牙身份驗證保證背后的基本假設,并且該假設應該可以防止冒充攻擊。
提出利用以下方式進行的藍牙冒充攻擊:
i)藍牙安全連接的建立既未加密也不受到完整性保護,
ii)舊版安全連接的安全連接建立不需要相互身份驗證,
iii)藍牙設備可在之后的任何時間執行角色切換,
iv)使用安全連接配對的設備可以在安全連接建立期間使用舊版安全連接。
由于冒充攻擊是在藍牙的體系結構級別上進行的,因此可有效抵御任何符合標準的藍牙設備。攻擊也是隱秘的,因為該標準不需要通知用戶有關(缺乏)相互身份驗證和安全連接的使用情況,將攻擊稱為藍牙冒充攻擊(BIAS)。
為了進行BIAS攻擊,Charlie的目標是在安全連接建立過程中使用“傳統安全連接”和“安全連接”身份驗證過程。這兩個過程都使用質詢響應協議對KL進行身份驗證,并且過程的選擇取決于Alice和Bob的支持功能。該標準聲稱,這兩個過程都可以保護安全的連接建立免受冒充攻擊,因為不知道KL的攻擊者無法對挑戰提出正確的響應。
A. BIAS對舊版安全連接的攻擊
每當Alice(從)和Bob(主)想要建立安全連接時,他們都使用一種過程來認證KL,并且該標準將這種過程定義為舊式認證過程。該過程在上圖中進行了描述,并且工作如下:主機計算并發送CM到從機。從機計算響應RS = HL(KL,CM,BTADDS),并將其發送給主機。然后,主機使用相同的功能和相同的輸入來計算響應,并將其與RS進行比較。如果值相等,則主機得出結論,他與從機共享同一KL。
舊式身份驗證過程提供了單方面身份驗證,當Alice和Bob配對時,兩次使用此過程來實現相互認證,即Alice)認證Bob,然后Bob認證Alice。中心問題是,藍牙標準不需要在安全連接建立期間相互使用舊式身份驗證過程。如果Charlie可以冒充主機,那么他就可以完成安全連接的建立,而不必向從機進行身份驗證。
Charlie冒充Bob(主),并完成與Alice的安全連接建立,如上圖所示。Charlie請求與假裝為Bob的Alice建立連接,Alice接受該連接。查理通過偽造鮑勃的地址和公開身份與鮑勃建立聯系。 Charlie將CM發送給Alice,Alice根據KL,CM和BTADDS計算RS,然后將RS發送給Charlie。然后Charlie以Bob的身份完成會話密鑰協商和安全鏈接激活,而無需證明自己對lice擁有KL。
Charlie還可以通過惡意利用藍牙的角色切換程序來冒充從機。藍牙使用主從媒體訪問協議,以使主和從設備保持同步。該標準規定,在完成基帶尋呼之后,可以隨時切換主從角色。這是有問題的,因為Charlie可以通過啟動角色切換來冒充從設備,并在開始單方面身份驗證過程之前成為主設備(驗證者),然后無需進行身份驗證即可完成安全連接的建立。在實驗中,能夠對除測試過的一種設備以外的所有設備可靠地執行這種對抗角色切換。
Charlie冒充Alice(從),并完成與Bob的安全連接建立,如上圖所示。Bob請求與Charlie(冒充Alice)建立連接。查理發送時隙偏移同步數據包,然后向Bob發送角色切換請求。角色切換過程未經身份驗證,但是Bob必須接受請求以符合標準。
Charlie(新的主機)接受連接,并通過將CM發送給Bob來立即啟動單方舊式身份驗證過程。Bob通過向他發送RS向查理進行身份驗證。然后,Charlie以Alice的身份完成會話密鑰協商和安全鏈接激活,而無需向Bob認證KL。
總而言之,Charlie能夠冒充單方面舊式身份驗證的每種可能用法的主服務器和從服務器。根本問題是,藍牙舊版安全連接的規范沒有強制要求相互認證以建立安全連接,并且在基帶尋呼之后的任何時間都允許角色切換。從實驗中可以看到,配對時舊的身份驗證過程是相互使用的,例如,Alice首先向Bob進行身份驗證,然后Bob向Alice進行身份驗證。這不能防止冒充攻擊,因為它們是在安全連接建立期間而不是在配對過程中進行的。
B.對安全連接的BIAS降級攻擊
在本節中將介紹Charlie如何使用符合標準的降級攻擊來冒充安全連接設備。安全連接使用比傳統安全連接更強的加密原語,被認為是配對和建立安全連接的最安全方式。測試的所有安全連接設備都容易受到降級攻擊的影響。
安全連接提供了相互身份驗證過程,在標準中稱為安全身份驗證過程。該過程在上圖中進行了描述,并且工作如下。Alice(從)和Bob(主)交換CS和CM的順序沒有特定,然后都計算:
使用HS哈希函數。藍牙標準關于響應的順序不是很清楚。在實驗中,從機始終首先發送RS,并且采用此約定。在相互計算響應之后,Alice將RS發送給Bob, Bob將RM發送給Alice。Alice和Bob驗證他們獲得的響應與他們計算出的響應匹配。如果兩次驗證均成功,則KL將相互驗證。
通過安全連接規范中的降級漏洞啟用了對安全連接的BIAS攻擊。特別是,藍牙標準不需要兩個使用安全連接進行配對的設備始終使用安全連接來建立安全連接,并且不保護安全連接的協商。換句話說,即使Alice和Bob支持并且已經使用安全連接進行配對,也可以使用舊版安全連接建立安全連接。
Charlie利用這些漏洞來冒充設備(Alice或Bob)不支持安全連接,以將與受害者的安全連接建立降級為Legacy Secure Connections。降級的結果是,Charlie和受害者使用傳統身份驗證過程,而不是安全身份驗證過程,并且查理可以繞過安全連接建立身份驗證。在以下各段中,詳細描述了對安全連接的主-從降級攻擊。
假設Alice和Bob已經配對,并且他們支持安全連接,則Charlie冒充Bob(主機),如下圖所示。在功能交換階段,Charlie冒充Bob,告訴Alice不支持安全連接。即使Alice告訴Charlie她確實支持安全連接,安全連接的建立也會降級為舊版安全連接。然后,Charlie與Bob建立了與Alice的連接。Charlie是唯一的驗證者,執行單方面的遺留身份驗證,并且他建立了一個安全連接而無需向Alice進行身份驗證。
Charlie如上圖所示冒充lice(從)。在功能交換階段,Bob告訴Alice他支持安全連接。Charlie(冒充Alice)告訴Bob他不支持安全連接。安全連接建立已降級為舊版安全連接。Bob向Alice發送連接請求,Charlie在接受連接請求之前執行角色切換并成為主機。Charlie是唯一的驗證者,它執行單方面的舊式身份驗證,并且他無需建立向ob的身份即可建立安全連接。
0x05 BIAS Reflection Attacks on Secure Connections
現在提出使用反射攻擊來攻擊安全連接身份驗證的另一種(替代)方法。在反思攻擊中,攻擊者誘使受害者回答自己的挑戰并將響應給予攻擊者。然后,攻擊者通過反射(發回)響應來對受害者進行身份驗證。注意到,盡管將標準解釋為無法防止反射攻擊,但并未將實現作為此工作的一部分。
反射攻擊假設Charlie在收到遠程受害者的響應后能夠在安全身份驗證過程中切換角色。藍牙標準允許在基帶尋呼之后的任何時候切換角色,但尚不清楚在身份驗證過程中進行角色切換的可能性。在本節的其余部分中,描述了這種情況下將發生的情況。在下文中,假定從機始終首先發送R。上圖描述了Charlie在模仿Bob(主)的同時如何將RS反射回Alice(從)。Charlie假裝是Bob向Alice發送連接請求,Alice接受連接。Charlie將CM發送給Alice,Alice將CS發送給Charlie。挑戰的價值和排序不影響攻擊的有效性。Alice使用HS計算RM和RS,但是Charlie無法計算此類響應,因為他不了解KL。
在Alice將RS發送給Charlie之后,Charlie向Alice發送了一個角色切換請求,Alice接受了角色切換,Charlie成為了新的從屬角色。現在,新主角色Alice希望從Charlie獲得RS,因此Charlie將RS反映給Alice,并在不了解KL的情況下完成了安全(相互)身份驗證過程。
Charlie還可以在冒充Alice(從)的同時,將RS反射回Bob(主),如上圖所示。此反射攻擊使用了與剛剛描述的主冒充反射攻擊相同的邏輯。變化的是攻擊的第一步,Charlie必須假裝自己是Alice(從),在接受與Bob的聯系之前,他必須執行一次額外的角色切換以成為主。
藍牙標準提到“在安全認證過程(HS)中使用BTADDM和BTADDS可以防止簡單的反射攻擊。使用唯一標識符作為質詢響應協議的一部分是一種常見的反射攻擊對策。但是,在這種情況下還不夠,因為可以在計算和發送響應之前和之后切換角色。
該標準在舊式身份驗證過程的規范中有一個腳注:“反射攻擊實際上不構成威脅,因為所有服務請求均以FIFO為基礎進行處理。引入搶占之后,這種攻擊就有潛在的危險。” 。這是一個合理的警告,但應將其擴展到安全身份驗證過程,并且不會阻止使用優先級隊列代替FIFO來管理服務。總體而言,認為該標準應將反射攻擊包括在威脅模型中,并明確禁止在安全身份驗證過程中進行角色切換。
0x06 Implementation
使用CYW920819EVB-02評估板和linux筆記本電腦實施介紹的BIAS攻擊。在本節中,描述了開發板以及經過反向工程設計的有關其藍牙固件的相關信息。然后,介紹BIAS工具包,這是第一個可自動冒充任意藍牙設備以及進行BIAS攻擊所需的設置的工具包。最后解釋了如何使用BIAS工具包對舊版安全連接和安全連接實施主-從冒充攻擊。
A.CYW920819EVB-02藍牙開發板
為了實施BIAS攻擊,使用CYW920819EVB-02開發板(上圖)和Linux筆記本電腦。該評估板包含CYW20819 SoC,該SoC實施藍牙5.0并支持安全連接。 CYW20819主內核是時鐘頻率為96 MHz的ARM Cortex M4,并使用ARMv7E-M架構。該板通過USB提供對HCI UART總線的訪問,該總線用于將藍牙主機(例如筆記本電腦)與板Bluetooth控制器接口,以及用于記錄和調試的HCI外圍總線。該開發板具有一個JTAG接口,可通過J-Link EDU調試探針[28]將其用于硬件級調試。使用ModusToolbox SKD提供的庫,驅動程序和工具,對從筆記本電腦交叉編譯代碼的電路板進行編程。
該開發板將藍牙固件存儲在1 MB的只讀ROM中,并將藍牙應用程序存儲在256 KB的可讀,可寫和可執行的片上閃存中。該開發板具有176 KB的片上RAM,并且通過閃存執行應用程序可以節省RAM空間,同時最大程度地減少內存延遲。在筆記本電腦上編寫應用程序代碼,為板子進行交叉編譯,然后通過USB將其加載到板子的閃存中。加載應用程序代碼在主板的文檔中稱為“刷新固件”,但是由于無法刷新藍牙固件,因此刷新的是應用程序代碼。
B.對主板藍牙固件進行逆向
實施BIAS攻擊時,由于固件執行身份驗證和安全會話建立程序,因此需要修改主板的藍牙固件。不幸的是,開發板SDK不包括固件源代碼,并且不具有刷新修改過的固件的功能。但是發現該SDK包含固件調試符號,并支持專有的HCI命令來讀寫板卡的RAM 。使用專有的讀取RAM命令在運行時將RAM內容轉儲到二進制blob中。然后,找到一個包含內存布局信息的Makefile,并使用這些信息從二進制Blob中提取幾個區域,包括ROM,RAM和補丁RAM。
ROM區域包含固件代碼,RAM區域包含運行時內存,包括堆棧和堆,補丁RAM包含補丁表,這些表在啟動后使用賽普拉斯專有的補丁機制(稱為“ PatchRom”)應用。通過在運行時將代碼從ROM重定向到RAM中的補丁程序,PatchRom可以修補固件而無需更改ROM。補丁插槽必須明智地使用,因為該板只有16個插槽。
為了對主板的藍牙固件進行逆向,將轉儲的ROM,符號,RAM和補丁RAM區域加載到Ghidra項目中。 Ghidra是由美國國家安全局(NSA)開發的開源反匯編程序和反編譯器,與ARM二進制文件兼容。將Ghidra項目配置為以拇指模式使用ARM Cortex M4架構,并執行Ghidra自動分析的第一階段。花費了大量時間對固件進行逆向,以發現其主要組件,數據結構和控制流模塊。這些信息對于開發正確的固件補丁以實施BIAS攻擊至關重要。
固件具有標準的ARM Cortex M4存儲器布局和中斷向量表,入口是復位中斷處理程序。固件使用slimboot引導,初始化RAM和外圍設備,然后加載OS內核。操作系統是ThreadX,它是專有的實時操作系統(RTOS)。固件執行環境是多線程的,并且由實時和基于優先級的調度程序進行管理。
固件使用基于任務的API實施LMP協議。每當收到或必須發送LMP數據包時,都會根據LMP數據包的類型創建特定的任務。每種類型的數據包都有一個回調,并且回調存儲在RAM中的表中。 LMP調度程序根據LMP數據包的類型調用適當的回調。 HCI數據包使用相同的邏輯進行處理。
中斷用于在SoC主ARM內核與外圍設備之間進行通信。固件與安全模塊外圍設備連接,以在硬件中加速標準安全性原語(例如AES和SHA-1)的計算。固件不使用地址空間布局隨機化,防止數據執行和堆棧棧運行,實際上可以對固件執行任意控制流操作。
C.BIAS工具包
通過對主板固件進行逆向收集了足夠的信息后,開發了BIAS工具包來自動執行BIAS攻擊。BIAS工具包是第一個實現藍牙冒充攻擊的工具,計劃在https://github.com/francozAppa/bias 上以開放源代碼的形式發布該工具包。
上圖給出了BIAS工具包的高級描述。該工具包將冒充文件(IF)和攻擊文件(AF)作為輸入。冒充文件包含有關冒充的設備的信息,例如藍牙地址,藍牙名稱和安全連接支持。攻擊文件包含有關攻擊設備的信息,例如筆記本電腦使用的HCI接口的名稱以及在主板藍牙固件中修補的功能的地址。
給定IF和AF的工具包會生成一個bias.py Python腳本,可與InternalBlue一起使用。 InternalBlue是一個開放源代碼工具包,它提供Python API與Cypress藍牙芯片(包括主板所使用的CYW20819)進行交互。使用shell腳本和bias.py,將攻擊設備轉換為冒充設備,并配置攻擊設備以執行BIAS攻擊。
上表總結了BIAS工具包的主要功能,冒充功能可修改攻擊設備,以模仿IF中指定的受害者。角色切換功能允許攻擊設備在不同情況下(例如,在開始建立安全連接時)執行主角色和從角色切換。安全連接功能啟用或禁用攻擊設備的安全連接,并在安全連接降級攻擊中使用。 “無身份驗證”功能允許攻擊設備忽略遠程身份驗證請求和丟失的鏈接密鑰,并用于利用單方面的“舊式安全連接”身份驗證。使用鏈接密鑰管理功能可以從攻擊設備讀取,寫入和刪除鏈接密鑰。日志記錄功能通過向板發送供應商特定的HCI命令來啟用Link Manager日志記錄。在完成BIAS攻擊后,利用KNOB攻擊功能可以降低會話密鑰的熵。
BIAS工具包利用InternalBlue Python API的優勢。使用sendHciCommand(opcode,args)將HCI命令從筆記本電腦發送到開發板上,包括賽普拉斯專有的命令。通過此功能,能夠更改板卡的藍牙地址。使用writeMem(address,value)和readMem(address,bytes)讀寫固件RAM。這些功能可以更改主板的藍牙名稱和安全連接支持,以及在RAM中寫入補丁。
InternalBlue內部使用pwntools,在將它們寫入固件RAM之前,使用pwntools的asm(code,vma)創建補丁。使用patchRom(address,asmbranch)對主板固件進行修補,以便一旦固件執行到達地址,它便執行asmbranch,這反過來又跳轉到RAM中補丁之一的地址。除其他功能外,固件修補功能還可以執行對抗性角色切換和單方面的舊式身份驗證。
D.傳統安全連接的BIAS實施
對舊式安全連接的主從BIAS攻擊利用了單邊舊式身份驗證和對抗角色切換的優勢。要實施此類攻擊,攻擊設備需要以下功能。攻擊設備必須冒充支持傳統安全連接的藍牙設備,必須在接受來自主設備的連接之前切換角色,并且必須忽略來自遠程受害者(如果有)的身份驗證請求,并執行符合標準的單方面身份驗證過程。現在,描述如何在由連接到Linux筆記本電腦的CYW920819EVB-02板組成的攻擊設備上實現這種功能。
在本節中,以冒充Nexus 5智能手機為例。 Nexus 5運行Android 6.0.1,并包含CYW4339藍牙4.1 SoC。使用BIAS工具包,從數據庫中選擇Nexus 5冒充文件(IF),然后配置攻擊設備以冒充上表左欄中列出的所有功能。結果,發現藍牙設備的用戶無法通過Nexus 5告訴攻擊設備,因為他們具有相同標識符的相同功能。
然后,利用提供的攻擊文件(AF),使用工具包配置對抗角色切換和單方身份驗證。通過修補主板固件來配置角色開關。hook處理遠程連接請求的功能,并對其進行了修補,以便電路板在接受連接請求之前始終將角色從從角色切換到主角色。單板舊式身份驗證由板上固件的另外兩個補丁實施。建立連接后,第一個修補程序立即啟動舊式身份驗證過程。在板對遠程受害者進行身份驗證之后,第二個補丁立即啟動會話密鑰協商過程。因此,攻擊設備在冒充Nexus 5時,無論其藍牙角色如何,都無需在安全會話建立期間進行身份驗證。
為了驗證由傳統身份驗證過程產生的響應,實現了HL哈希函數。如式1所示,此類哈希函數使用E1計算來自鏈接密鑰(KL),證明方的藍牙地址(BTADDP)和驗證方(CV)發送的質詢的響應(RP),E1內部使用SAFER +分組密碼,也將其實現。為了檢查實施的正確性,成功地針對標準中的測試向量對其進行了測試。
E. BIAS實現安全連接
在本節中,介紹了安全連接降級攻擊的實現。這種攻擊需要以下功能。攻擊設備必須冒充支持安全連接但在建立安全連接期間降級為“傳統安全連接”的設備。攻擊設備必須在接受來自主設備的連接之前切換角色,并執行符合標準的單方面身份驗證。現在,描述如何在攻擊設備上實現這些功能,該攻擊設備由連接到Linux筆記本電腦的CYW920819EVB-02板組成。
在將使用Pixel 2智能手機的冒充作為參考示例。 Pixel 2運行Android 10,并包含Snapdragon 835藍牙5.0 SoC。使用BIAS工具包,從數據庫中選擇Pixel 2冒充文件(IF),然后將攻擊設備配置為模仿上表右欄中列出的所有功能。結果,發現藍牙設備的用戶無法通過Pixel 2告訴攻擊設備,因為他們具有相同標識符的相同功能。
然后,使用工具包通過相關的AF為板配置安全連接降級,對抗角色切換和單方身份驗證。使用可修改主板藍牙固件中的“安全連接”支持標志的補丁來實現“安全連接”降級。對抗角色切換和單方身份驗證使用在上節相同補丁來實現。結果,攻擊板在冒充Pixel 2的同時,降低了用于安全連接建立的身份驗證程序,并繞過了身份驗證。
為了驗證受害者配對時由安全認證程序產生的響應,實現了HS哈希函數。哈希函數內部使用h4(如式2中所示)從KL,“ btdk”字符串,BTADDM和BTADDS計算設備認證密鑰(KA)。然后,h5使用KA,CM和CS來計算RM和RS的級聯,如式3所示。按照h4和h5的規范實現,使用標準中提供的測試向量來測試實現。
0x07 Evalution
在本節中描述了BIAS攻擊評估設置和結果。使用總共28種獨特的藍牙芯片,成功地對16臺Legacy Secure Connections設備和15臺Secure Connections設備進行了主從模仿攻擊。
A.評估設置
考慮受害者A,受害者B和攻擊者的攻擊場景。受害者A和攻擊設備是連接到兩臺運行Linux的筆記本電腦的CYW920819EVB-02開發板,支持安全連接。受害者B是可以使用的任何其他藍牙設備,它可能支持安全連接。受害者A與受害者B配對,并且攻擊者不知道他們的長期密鑰(KL)。攻擊者冒充受害者A,并嘗試使用BIAS工具包與受害者B作為主和從屬建立安全連接。執行四種BIAS攻擊:
1)LSC MI:舊版安全連接(LSC)主冒充
2)LSC SI:舊式安全連接從冒充
3)SC MI:安全連接(SC)主冒充
4)SC SI:安全連接從屬冒充
在以下兩段中,描述了如何測試受害者B是否容易受到四次攻擊。
a)主冒充:攻擊設備冒充不需要在場的受害者A。開始建立從攻擊設備到受害者B的安全連接。如果受害者B不要求攻擊設備進行身份驗證(如上圖所示),則受害者B容易受到LSC MI的攻擊。如果受害者B支持安全連接,那么它也容易受到SC MI的攻擊,因為身份驗證過程已從安全降級為舊式(如下圖所示)。
b)從屬冒充:攻擊設備冒充了不需要在場的受害者A。開始從受害者B到受害者A的安全連接建立。如果攻擊在接受連接請求之前將角色從從角色切換到主角色,則執行單方面的舊式身份驗證,并開始會話密鑰協商而無需受害者B要求進行身份驗證,那么受害者B容易受到LSC SI的攻擊。如果受害人B支持安全連接,則它也容易受到SC SI的攻擊,因為身份驗證過程已從安全降級為舊式(如上圖所示)。
評估設置允許在幾分鐘內測試針對目標受害者的BIAS攻擊,并且由于它使用廉價的硬件和開源軟件,因此成本較低。攻擊設備包括連接到Linux筆記本電腦的CYW920819EVB-02板。該板的價格約為50美元,可以使用任何Linux筆記本電腦甚至Raspberry PI來控制該板。其他對BIAS攻擊感興趣的研究人員可以輕松地復制設置以測試更多設備。
B.評估結果
上表顯示了評估結果。第一列包含藍牙芯片名稱,第二列包含使用該芯片評估的設備的名稱。第三和第四列評估LSC MI和LSC SI BIAS攻擊。第五和第六列評估SC MI和SC SI BIAS攻擊。實心圓圈(●)表示芯片和相關設備不容易受到攻擊,而空心圓圈(○)表示芯片和相關設備不容易受到攻擊。安全連接在藍牙標準中是可選的,并且當芯片/設備不支持安全連接時,在SC列中使用。
上表確認評估的所有31個藍牙設備(28個獨特的藍牙芯片)都容易受到BIAS攻擊。易受攻擊的設備包括英特爾,高通(Snapdragon),賽普拉斯(包括Broadcom無線物聯網業務),蘋果,三星(Exynos)和CSR的藍牙芯片。此外,易受攻擊的設備列表包括來自Android(Bluedroid和Fluoride),Apple(IOS,iPadOS和macOS),Linux(BlueZ),Microsoft(windows 10和Windows Phone),賽普拉斯和CSR。總體而言,攻擊了16個舊版安全連接設備和15個安全連接設備,它們支持藍牙版本5.0、4.2、4.1及更低或等于4.0的藍牙。
唯一的例外是ThinkPad 41U5005鼠標。鼠標不容易受到LSC SI攻擊。特別是讓鼠標與攻擊設備建立安全連接時,即使攻擊設備切換了角色并完成了單方舊式身份驗證,鼠標也始終會要求攻擊板進行身份驗證,然后再開始會話密鑰協商。
該表確認BIAS攻擊符合標準,因為無論藍牙芯片,藍牙主機堆棧,安全連接的使用和藍牙版本號如何,攻擊均有效。此外,市場上所有使用表中任何易受攻擊的芯片的設備都應易于受到BIAS攻擊。
0x08 Discussion
A. BIAS和KNOB攻擊的組合
BIAS攻擊和KNOB攻擊都符合標準,但是它們不同,因為它們通過利用藍牙安全連接建立的不同階段達到不同的目標。BIAS攻擊以鏈接密鑰身份驗證為目標,并且它們使攻擊者無需擁有鏈接密鑰即可身份驗證為主密鑰和從屬身份。
KNOB攻擊以會話密鑰協商為目標,并允許攻擊者降低會話密鑰的熵(以強行攻擊)。僅KNOB攻擊無法冒充藍牙設備,因為攻擊者沒有擁有長期密鑰可以將BIAS和KNOB攻擊鏈接起來,以冒充一個藍牙設備,在不擁有鏈接密鑰的情況下完成身份驗證,以低熵協商會話密鑰,建立安全連接,并強制使用會話密鑰。兩種攻擊的結合是新穎而強大的。例如,攻擊者可以通過發送加密命令來冒充敏感文件的接收者并恢復明文,或冒充一個解鎖器并解鎖設備。
B. BIAS攻擊的根本原因
評估的BIAS攻擊由在藍牙標準中確定的四個根本原因(RC)啟用。這些根本原因的組合使攻擊者可以對LSC和SC進行主-從冒充攻擊。在下文中總結了根本原因:
1)完整性:盡管設備已經共享了長期密鑰(KL),但藍牙安全連接的建立不受完整性保護。缺乏完整性保護使攻擊者可以修改冒充受害者的功能,包括安全連接支持。
2)舊版相互認證:藍牙舊版安全連接不強制要求相互使用舊式身份驗證過程。當單方面使用該過程時,只有一個驗證者,攻擊者可以冒充該驗證者并完成安全連接的建立,而不必向受害者進行身份驗證。
3)角色切換:在基帶尋呼之后,可以隨時執行藍牙角色切換。在單方身份驗證方案中,這是有問題的,因為攻擊者可能以證明者身份啟動安全連接建立過程,并成為驗證者以避免被要求進行身份驗證。
4)安全連接降級:藍牙不強制在配對和安全連接建立之間使用安全連接。因此,使用安全連接配對的兩個設備可以使用舊版安全連接來建立后續的安全連接。攻擊者利用此事實將安全連接安全連接建立降級為傳統安全連接,以使用易受攻擊的舊式身份驗證過程。
上表顯示了啟動評估的BIAS攻擊所需的根本原因。如果有根本原因,則使用×,否則使用—。無論如何,都需要缺乏完整性保護,因為攻擊者必須修改冒充受害者的能力才能建立安全連接。在任何情況下,也都需要缺少傳統安全連接的相互身份驗證,因為攻擊者會利用它來進行傳統安全連接和降級安全連接。從屬冒充需要角色切換,因為冒充從屬的攻擊者必須在接受連接請求之前成為主機(驗證者)。僅在使用安全連接時才需要將安全連接降級。
C. BIAS攻擊對策
BIAS攻擊利用了藍牙標準中的漏洞,在這里提出了三種應對措施。
1)完整性:為了減輕安全連接建立過程中缺乏完整性保護,該標準應強制要求使用長期密鑰(KL)保護安全連接建立。長期密鑰是在配對過程中建立的,在建立安全連接之前應始終可用。這樣可以防止對藍牙功能的操縱和主動的中間人攻擊。
2)舊版相互認證和角色切換:為了減輕對舊版安全連接的強制性相互認證以及角色切換相關問題的缺乏,該標準應強制要求始終相互使用舊式認證過程。這將迫使攻擊者驗證長期密鑰,即使攻擊者在接受安全連接請求之前從從機切換到了主機。
3)安全連接降級:為了緩解安全連接降級攻擊,該標準應強制與安全連接配對的兩個設備始終使用它來建立安全連接。或者,該標準可能建議在安全連接降級的情況下通知用戶,并且用戶應決定是接受還是拒絕降級的安全連接。
藍牙標準包括“僅安全連接模式”,以僅使用安全連接機制(例如安全身份驗證程序和AES CCM)強制設備。該模式仍然易受反射攻擊的影響,并破壞了與舊版安全連接設備的向后兼容性。注意到測試的所有設備均未使用“僅安全連接模式”。
0x09 Conclusion
在這項工作中介紹BIAS攻擊,攻擊允許通過利用Bluetooth身份驗證和安全連接建立規范中的漏洞來冒充Bluetooth設備。通過手動檢查藍牙標準并利用先前與藍牙安全性相關的工作發現了此類漏洞。
作為BIAS攻擊的結果,攻擊者可以在冒充藍牙主設備和從設備的同時完成安全連接的建立,而無需知道和驗證受害者之間共享的長期密鑰。 BIAS攻擊符合標準,可有效抵御舊版安全連接(使用傳統身份驗證過程)和安全連接(使用安全身份驗證過程)。
BIAS攻擊是隱身的,因為建立藍牙安全連接不需要用戶交互。BIAS攻擊處于藍牙的體系結構級別,因此所有符合標準的藍牙設備都是潛在的目標。成功攻擊31個藍牙設備(28個獨特的藍牙芯片),評估樣本包括來自多個硬件和軟件供應商的16種傳統安全連接和15種安全連接設備,均使用所有主要的藍牙版本。建議應該更新藍牙規范以解決BIAS攻擊,并且提供了一系列根本原因以及專門的緩解措施來應對這些攻擊。