FragAttacks漏洞分析
發布時間 2021-05-18背景
近日,紐約大學阿布扎比分校的安全研究員Mathy Vanhoef發現了一系列影響巨大的Wi-Fi漏洞,這一系列漏洞被統稱為FragAttacks,FragAttacks影響了1997年Wi-Fi技術誕生以來的所有Wi-Fi設備(包括計算機、智能手機、園區網絡、家庭路由器、智能家居設備、智能汽車、物聯網等等)。
其中三個漏洞影響大多數WiFi設備,屬于Wi-Fi 802.11標準幀聚合和幀分片功能中的設計缺陷,而其他漏洞是Wi-Fi產品中的編程錯誤。
黑客只要在目標設備的Wi-Fi范圍內,就能利用FragAttacks漏洞竊取敏感用戶數據并執行惡意代碼,甚至可以接管整個設備。
啟明星辰ADLab第一時間對漏洞進行了分析,并提出了相應的緩解建議。由于WiFi產品的協議棧,包括了Soft Mac及Full Mac多種實現方案。FragAttacks系列漏洞不僅存在影響操作系統內核、WiFi驅動,還影響WiFi的SOC芯片,所以漏洞的影響長期存在。請及時關注并更新設備供應商的安全更新。
修復及緩解建議
● 及時更新設備供應商發布的FragAttacks漏洞安全更新。
● 確保您訪問的所有網站和在線服務都啟用了安全超文本傳輸協議HTTPS(比如安裝HTTPS Everywhere插件)。
● 例如在Wi-Fi 6(802.11ax)設備中禁用分片,禁用成對重新生成密鑰以及禁用動態分片。
漏洞列表及具體影響
Wi-Fi設計缺陷相關的漏洞包括:
CVE編號 | 漏洞介紹 | 漏洞影響 |
---|---|---|
CVE-2020-24588 | 針對A-MSDU聚合的注入攻擊(無效的SPP A-MSDU保護機制) | 攻擊者可插入惡意幀,篡改數據包 |
CVE-2020-24587 | 混合密鑰攻擊(重組時使用不同密鑰加密的分片 | 密取用戶的敏感數據 |
CVE-2020-24586 | 分片緩存攻擊(重新連接到網絡時不清除分片緩存) | 竊取用戶敏感數據或篡改任意數據包 |
Wi-Fi實現相關的漏洞包括:
CVE編號 | 漏洞介紹 | 漏洞影響 |
---|---|---|
CVE-2020-26145 | 在加密通訊中,仍接受未加密廣播分片作為完整幀 | 獨立于網絡配置,插入任意幀,從而篡改數據包 |
CVE-2020-26144 | 在加密通訊中,仍接受未加密的A-MSDU幀 | |
CVE-2020-26140 | 在受保護的網絡中接受未加密數據幀 | |
CVE-2020-26143 | 在受保護的網絡中接受分片的未加密數據幀 | |
CVE-2020-26139 | 轉發EAPOL幀時未驗證發送端的身份 | 和CVE-2020-24588結合起來,插入任攻擊者可插入惡意幀,篡改數據包 |
CVE-2020-26146 | 對于非連續數據包編號的加密分片依然進行重新組合 | 竊取用戶敏感數據 |
CVE-2020-26147 | 對分片進行重新組合時不區分加密或未加密 | 攻擊者可插入惡意幀,篡改數據包 |
CVE-2020-26142 | 將分片幀作為完整幀進行處理 | |
CVE-2020-26141 | 不驗證分片幀的TKIP MIC |
通過這一系列漏洞,攻擊者完全可以獲得用戶的敏感信息或直接控制智能設備,如控制智能電源插座,甚至直接接管網絡中存在漏洞的計算機,參見下文參考資料[2]。
漏洞分析
我們選取了在所有設備普遍存在的CVE-2020-24586、CVE-2020-24587、CVE-2020-24588三個設計漏洞進行分析。由于CVE-2020-24588的漏洞影響較大,我們著重進行介紹CVE-2020-24588。
1、技術背景
由于802.11MAC層協議耗費了相當多開銷用作鏈路的維護,為了提高MAC層的效率,802.11n引入幀聚合技術,報文幀聚合技術包括:A-MSDU(MAC服務數據單元聚合) 及 A-MPDU(MAC協議數據單元聚合)。
A-MSDU允許對目的地及應用都相同的多個A-MSDU子幀進行聚合,聚合后的多個子幀只有一個共同的MAC幀頭,當多個子幀聚合到一起后,從而減少了發送每一個802.11報文所需的PLCP Preamble、PLCP Header和802.11MAC頭的開銷,同時減少了應答幀的數量,從而提高無線傳輸效率。A-MSDU報文幀聚合技術是802.11n協議的強制要求,所有支持802.11n協議的設備都必須支持。
下圖示意了在802.11協議棧中,發送端和接收端是如何處理A-MSDU數據的。
圖1. 802.11協議數據處理流程
在802.11協議棧中,發送端將來自3-7層的網絡數據經過數據鏈路層的LLC子層添加LLC/SNAP頭后封裝成MSDU(MAC服務數據單元),MSDU經過添加DA、SA、長度及pading后,封裝成A-MSDU子幀,在MAC子層的頂層將多個A-MSDU子幀封裝成A-MSDU,經MAC子層后,幀數據被添加上MAC頭及幀尾封裝成802.11數據幀(MPDU),MPDU/PSDU經過物理層添加PLCP Preamble(PLCP前導碼)及PLCP Header(PHY頭),無線側最后通過射頻口將二進制流發送到接收端。
接收端通過相反路徑對802.11數據幀進行拆解,最后獲得發送端的3-7層的網絡數據。
A-MSDU的協議數據組成如圖2所示,我們從上到下進行分別說明:
(1)一個MSDU由LCC/SNAP頭、IP頭、TCP/UDP頭及協議數據Data組成。
(2)MSDU添加DA(目的地址),SA(源地址),后續數據長度及Padding(四字節對齊)組成一個MSDU子幀。
(3)多個MSDU子幀組成一個802.11幀的A-MSDU域。
(4)802.11數據幀通過QOS Control的A-MSDU Present位來表示這是一個包括A-MSDU域的數據幀。
圖2. A-MSDU數據組成示意
在802.11協議中,一個普通的802.11數據幀與A-MSDU數據幀的結構是相同的,只是QOS Control域的A-MSDU Preset位 為1,則標示了該數據幀是一個A-MSDU數據幀。A-MSDU Preset位為0,則標示這是普通802.11數據幀。
在802.11協議中WEP及CCMP只保護802.11MAC的有效載荷,至于802.11幀頭以及下層協議的標頭則原封不動,也就是說802.11協議中數據幀中QOS Control并沒有加密,這為攻擊者提供了攻擊入口。
圖3. CCMP加密的802.11數據幀格式
為防止中間人攻擊,IEEE在2011年設計了SPPA-MSDU機制來保護A-MSDU Preset位及A-MSDU的Payload。SPP A-MSDU通過在RSN capabilities 域中添加SPP A-MSDU Capable及SPP A-MSDU Required來標示是否支持SPP A-MSDU機制及是否采用SPP A-MSDU機制。
圖4. RSN Capabilities 域數據格式
2、針對A-MSDU聚合的幀注入攻擊(CVE-2020-24588)
雖然有SPP A-MSDU機制來保護A-MSDU Preset位不被篡改,但是在實際的測試中,幾乎所有的設備都不遵循SPP A-MSDU機制,這使得中間人攻擊成為可能。
我們假設發送端發送了一個正常的802.11數據幀,這是一個里面封裝的是一個普通TCP包,其dst=“192.168.1.2", src="1.2.3.4", id=34
圖5. 原始的802.11數據幀
由于偏移0x18的QOS Control(0200)不受保護,攻擊者可以將 QOS Control域中的A-MSDU Preset翻轉為1,使得QOS Control的值為8200,同時在幀末尾注入惡意的A-MSDU子幀2(如下圖的紅色線標示),最后發送給接收端。
圖6. 篡改后的802.11A-MSDU數據幀
由于QOS Control域中的A-MSDU Preset翻轉為1,當接收端接收到數據幀后,會按A-MSDU格式來拆解里面的數據。數據被識別成兩個A-MSDU子幀。A-MSDU子幀1中的數據是原始的MSDU數據,所以會被協議棧丟棄,但第二個子幀會被正確解析并處理。這上面的例子中第二個子幀會被識別成ICMP ping包,接收端會回復一個ICMP echo Reply給發送端。
視頻1. 發送端收到ICMP echo Reply
下圖示意了中間人幀注入流程:
圖7. 中間人幀注入流程
(1)STA(終端)和AP(熱點/無線路由器)信道A(如信道6), 建立關聯
(2)MITM利用多信道中間人技術使得STA認為AP已經切換到信道B(如信道11)。
(3)STA在信道11給 MITM發送加密的Wifi正常數據幀。
(4)MITM將 接收到的Wifi幀QOS域的A-MSDU Preset標示設為1,同時插入篡改的A-MSDU數據。把一個正常的Wifi幀改成一個A-MSDU幀,并注入一個ICMP請求包,并在通道6發給AP。
(5)AP接收到A-MSDU數據幀,AP拆解A-MSDU,分成多個A-MSDU子幀,其中第一個A-MSDU子幀為非法包,會被丟棄,但后續的MSDU子幀會被系統正常處理。AP會回復收到一個ICMP Echo 應答給MITM。
(6)MITM收到AP的回復后,將接收到的WIFI幀轉發給STA,這樣STA收到AP回復的ICMP應答。
CVE-2020-24588的修復
今年3月Windows發布了相應的補丁,修復了FragAttacks系列漏洞,5月11日Linux也發布了FragAttacks系列漏洞補丁[6],Linux針對CVE-2020-24588的修復如下:
---
net/wireless/util.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/net/wireless/util.c b/net/wireless/util.c
index 39966a873e40..7ec021a610ae 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -771,6 +771,9 @@ void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list,
remaining = skb->len - offset;
if (subframe_len > remaining)
goto purge;
+/* mitigate A-MSDU aggregation injection attacks */
+if (ether_addr_equal(eth.h_dest, rfc1042_header))
+goto purge;
offset += sizeof(struct ethhdr);
last = remaining <= subframe_len + padding;
--
因為在A-MSDU聚合注入攻擊中,需要將普通加密Wi-Fi幀轉換為A-MSDU幀。這意味著第一個A-MSDU子幀的前6字節對應于RFC1042的幀頭,liunx內核通過增加判斷DA(目標地址)是否和rfc1042_header(\xaa\xaa\x03\x00\x00\x00)一致,如果相等則認為是惡意攻擊,可以把這個A-MSDU幀拋棄。
混合密鑰攻擊(CVE-2020-24587)
圖8.混合密鑰攻擊流程
在步驟1當中,攻擊者誘導受害者訪問受攻擊者控制的服務器,通過一些手段,比如指定一個超長的URL,從而使受害者發送的數據包不得不分成兩段進行傳輸,分片的數據包用秘鑰k加密,這兩個數據包為和。而攻擊者通過多信道的中間人進行攔截,一旦監測到攻擊者指定IP數據包,便將此數據包轉發給AP,即AP一旦收到此數據包后,就將其解密后存在內存當中。
在步驟2進行之前,受害者需要與AP重新進行四次握手并協商新的密鑰。之后攻擊者等待受害者發送包含敏感信息的數據包,即和。攻擊者將數據包號碼為n+1的數據包攔截,并將其序列號修改為s,然后轉發給AP,即數據包。而AP直接把他當作序列號s數據包的第二個分片信息,將他解密后重組成新的數據包,而新的數據包中包含受害者的敏感信息與攻擊者指定的IP。于是敏感信息就被發送到受害者控制的服務器上,造成信息泄露。
分片緩存投毒攻擊(CVE-2020-24586)
圖9.分片緩存投毒攻擊流程
在步驟1中,攻擊者嗅探到受害者的MAC地址后,偽造受害者MAC地址去連接AP。這樣就可以合法的用受害者的身份在AP的內存中插入分片。
在步驟2中,受害者進行正常的認證工作,此時攻擊者發送數據包,這個數據包中包含攻擊者指定的IP數據包。然后AP解密此數據包,并保存在內存中,以受害者的MAC地址作為標識。然后攻擊者通過發送解除認證的數據包并斷開連接,隨后在受害者和AP之間建立一個多信道的中間人。注意此時AP內存中的分片并沒有被清除。
之后受害者與AP之間進行正常的連接。此時攻擊者只需要等待受害者發送第二個分片,數據包號碼為n+1,攻擊者將此數據包攔截后,并將此數據包的序列號修改為s,然后其轉發給AP,即數據包,一旦AP收到此數據包,和混合密鑰漏洞類似,AP會將此數據包解密,并和之前保存在緩存中的數據包重組成新的數據包,因為這兩個數據包包含相同的MAC地址和序列號。最后,AP將重組后的數據包發送給攻擊者控制的服務器,從而造成敏感信息泄露。
參考鏈接:
【1】https://papers.mathyvanhoef.com/usenix2021.pdf
【2】https://www.youtube.com/embed/88YZ4061tYw
【3】https://www.fragattacks.com/#notpatched
【4】https://github.com/vanhoefm/fragattacks
【5】https://lore.kernel.org/linux-wireless/20210511180259.159598-1-johannes@sipsolutions.net/
啟明星辰積極防御實驗室(ADLab)
ADLab成立于1999年,是中國安全行業最早成立的攻防技術研究實驗室之一,微軟MAPP計劃核心成員,“黑雀攻擊”概念首推者。截止目前,ADLab已通過CVE累計發布安全漏洞近1100個,通過 CNVD/CNNVD累計發布安全漏洞1000余個,持續保持國際網絡安全領域一流水準。實驗室研究方向涵蓋操作系統與應用系統安全研究、智能終端安全研究、物聯網智能設備安全研究、Web安全研究、工控系統安全研究、云安全研究。研究成果應用于產品核心技術研究、國家重點科技項目攻關、專業安全服務等。