讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、余姚網(wǎng)站維護、網(wǎng)站推廣。
近期WPA2被破解的事(也就是KRACK漏洞***),在網(wǎng)上鬧得沸沸揚揚,因為這個漏洞影響面實在太大,一時間人人自危,于是乎,改密碼的、升級系統(tǒng)的、打補丁的、寫攻略的等等,干啥的都有,其中當(dāng)屬專家最活躍,一時間,媒體、論壇上看到諸多高見,一篇又一篇KRACK漏洞***的技術(shù)分析文章,隨便百度一下,都能發(fā)現(xiàn)很多大作。比如:http://www.cnbeta.com/articles/tech/661599.htm ,這篇文章不知是怎地,造成這么大影響的KRACK漏洞居然說成是“其實很弱雞”,我就呵呵了。再比如:http://net.zol.com.cn/660/6603551.html,這篇文章倒是旗幟鮮明的提出了“全世界的Wi-Fi早就不安全了”,這個認(rèn)識是對的,但奈何文章并沒有深入分析,更多的是在引用KRACK漏洞曝出者的論文內(nèi)容,所以不能算作技術(shù)分析文章,只是一篇新聞稿罷了。還有借KRACK漏洞打廣告想發(fā)危機財?shù)?,這本無可厚非,但稍微有點網(wǎng)絡(luò)技術(shù)常識的人都知道,KRACK漏洞是Wi-Fi安全技術(shù)協(xié)議上的漏洞,這是底層的技術(shù)協(xié)議,而某某Wi-Fi管家只是一個上層應(yīng)用的防御軟件,防防病毒或許還行,試問如何能解決底層技術(shù)協(xié)議的問題?借此廣告誤導(dǎo)可真有些不地道了。須知中醫(yī)頭痛醫(yī)腳的理論放在網(wǎng)絡(luò)技術(shù)里是萬萬行不通的!若能解決,×××的問題也早就解決了,這樣的文章也有很多,我就不一一列舉了,大家自行百度(拜讀)即可。
作為一個曾經(jīng)浸淫在無線網(wǎng)絡(luò)行業(yè),算是從事了十六年無線網(wǎng)絡(luò)安全技術(shù)研究的老磚家,本不想就此事發(fā)聲,畢竟是曾經(jīng)嘛,我已離開這個行業(yè)快2年,只能算半個業(yè)內(nèi)人士了。但是看到專家們林林總總文章后,說實話,有點無法忍受,都什么啊,沒有深入的技術(shù)分析,人云亦云搬運看似專業(yè),也很熱鬧,但無助于問題認(rèn)識正確,自然也就無法解決問題本身。于是我這個老磚家只能花些時間,通過重現(xiàn)KRACK漏洞***的過程,并結(jié)合過去的一些研究,寫就這篇文章,希望能通過這些的技術(shù)理論和實踐數(shù)據(jù),深入剖析WPA2安全漏洞以及Wi-Fi安全問題背后的根源,知其然,亦能知其所以然。看完我這磚,需要點時間…….
好了,咱們進入正題。
2017年10月17日,國外社交媒體Twitter爆出一款宣判無線網(wǎng)絡(luò)WPA2安全協(xié)議死亡的漏洞,這就讓IEEE面子上有點掛不住了,因為此前IEEE一直在竭力聲稱和證明WAP2是安全的。比利時相關(guān)機構(gòu)的安全研究人員Mathy Vanhoef(馬蒂·萬赫弗)發(fā)現(xiàn)WPA2認(rèn)證與密鑰協(xié)商協(xié)議存在一種“密鑰重裝***”(Key Reinstallation Attack,KRACK)漏洞,并通過專門的網(wǎng)站https://www.krackattacks.com詳述該新型***,詳見論文 Key Reinstallation Attacks: Forcing Nonce Reuse in WPA2(https://papers. mathyvanhoef.com/ccs2017.pdf)。
根據(jù)Mathy Vanhoef的研究結(jié)果,幾乎所有支持Wi-Fi的設(shè)備(例如運行Android, Linux, iOS, MAC OS, OS X, Windows, OpenBSD等操作系統(tǒng)的設(shè)備)都受此漏洞的影響,其傳輸?shù)臄?shù)據(jù)存在被嗅探、被篡改的風(fēng)險。***者可獲取Wi-Fi網(wǎng)絡(luò)中的數(shù)據(jù)信息,如信用卡、郵件、賬號、照片等,危害巨大。
需要注意的是,這絕非是一個工程實現(xiàn)上的問題,因為微軟、蘋果、谷歌、Linux開源社區(qū)等等這些公司和開發(fā)人員不可能同時犯一樣的錯誤!這是Wi-Fi技術(shù)標(biāo)準(zhǔn)的問題,所以漏洞發(fā)現(xiàn)者Mathy Vanhoef才調(diào)侃說“所有按照Wi-Fi技術(shù)標(biāo)準(zhǔn)實現(xiàn)的產(chǎn)品都難以幸免,而有些產(chǎn)品未遵守Wi-Fi標(biāo)準(zhǔn),卻幸運的躲過一劫?!薄?/p>
實際上,自1997年第一次有Wi-Fi安全技術(shù)以來,各種安全漏洞問題層出不窮,從最初的WEP到后來的WPA,再到曾經(jīng)被IEEE宣稱很安全的WPA2,一次又一次的被曝出安全漏洞,而本次的KRACK漏洞只是這眾多安全漏洞中的一個,且絕不會是最后一個,Wi-Fi的安全問題之嚴(yán)重,可見一斑。因此比利時專家明確表示“Wi-Fi安全(WPA2)已死”。
我們先來看看Wi-Fi安全技術(shù)發(fā)展和演進歷程(摘抄自我搞無線網(wǎng)絡(luò)安全技術(shù)時寫的某篇技術(shù)分析文章):
WEP安全協(xié)議提出于1997年,這是無線局域網(wǎng)標(biāo)準(zhǔn)最初使用的安全協(xié)議。其安全架構(gòu)是基站對用戶進行單向鑒別,采用開放式系統(tǒng)鑒別與共享式密鑰鑒別算法,鑒別簡單,易于偽造。其加密機制是64位RC4流加密算法,靜態(tài)密鑰,安全強度低。已于2001年被完全破解。
WPA安全協(xié)議提出于2002年,是為了緩解來自產(chǎn)業(yè)和用戶的安全壓力,而提出的針對WEP協(xié)議的軟件升級方案,可通過對原有WEP設(shè)備軟件升級實現(xiàn),但仍存在大量安全漏洞,主要有:安全架構(gòu)漏洞(基站缺乏獨立身份,基站和后臺傳輸主密鑰帶來安全風(fēng)險并且導(dǎo)致擴展性差,兼容已被破解的WEP機制導(dǎo)致系統(tǒng)整體存在漏洞等);安全協(xié)議設(shè)計不安全、缺乏健壯性(協(xié)議設(shè)計不完備,使用的雜湊算法等級低,無效幀重傳導(dǎo)致拒絕服務(wù)***等)。
WPA2安全協(xié)議提出于2004年,采用了AES-128分組密碼算法。但WPA2采用的身份鑒別協(xié)議和WPA相同,仍存在安全架構(gòu)和安全協(xié)議設(shè)計漏洞,容易遭受漏洞***。
(筆者注:老磚家的預(yù)言果然應(yīng)驗了,WPA2遭受了KRACK漏洞***。^_^)
而要剖析Wi-Fi安全性為什么這么經(jīng)受不住考驗,就得從其安全架構(gòu)入手。
圖1 Wi-Fi安全架構(gòu)示意
如圖1所示,最初的WEP安全可以忽略不計,其架構(gòu)毫無安全性可言。被輕松破解后,Wi-Fi采用了號稱更加安全的IEEE 802.1x架構(gòu),可依然無法逃過被破解的命運,這是為什么呢?
眾所周知,IEEE 802.1x原本是有線網(wǎng)絡(luò)上的安全架構(gòu),Wi-Fi則是完全將其照搬到了無線局域網(wǎng)中??墒怯形锢斫佑|的有線網(wǎng)絡(luò)與沒有物理接觸僅靠電磁傳播的無線網(wǎng)絡(luò)并不一樣,直接將有線網(wǎng)絡(luò)的安全架構(gòu)生搬硬套到無線網(wǎng)絡(luò)上,本身就是有問題的。IEEE顯然也意識到了這一點,可遺憾的是,他們并未從架構(gòu)上尋求解決方法,而是在這個不合理的架構(gòu)之上疊加了一個四步握手協(xié)議,某種程度上也是希冀著可以用這種方式彌補其架構(gòu)上的缺陷。殊不知基礎(chǔ)架構(gòu)不牢靠,你把房子壘得越高,反倒越容易出問題。IEEE這種錯誤的思路,導(dǎo)致的結(jié)果就是這些年來,Wi-Fi各種安全問題層出不窮,往往都是為了解決上一個安全問題而打的補丁中,卻引入新的安全問題,以本次的KRACK***為例,問題恰恰就出在疊加的那四步握手協(xié)議上。
圖2 Wi-Fi的四步握手協(xié)議
如圖2所示,KRACK***主要發(fā)生在認(rèn)證和密鑰建立階段的四步握手過程中,通過簡單的報文模擬誘使安全協(xié)議交互的一方重發(fā)密鑰交互協(xié)議中的一條消息,另一方收到重發(fā)的這條消息后再次安裝已安裝過的密鑰,安裝時將IV等相關(guān)的信息重置后使用,從而導(dǎo)致了同一個密鑰使用了相同的IV再次加密數(shù)據(jù),最終造成數(shù)據(jù)被重放、解密甚至偽造等安全危害。該***不僅針對WPA2,對于WPA也同樣適用,不論是采用預(yù)共享密鑰機制還是采用IEEE 802.1x機制的Wi-Fi網(wǎng)絡(luò)都受到該漏洞的影響。
順便多說幾句,Wi-Fi不安全的本質(zhì)原因是其安全架構(gòu)設(shè)計上的缺陷,無視這個本質(zhì)問題,而試圖通過增加消息交互協(xié)議來堵這個漏洞,最終只會是越堵漏洞越多,正如這次的KRACK一樣。我們也可以預(yù)計到,未來WPA3也一定會是這個下場!因為其安全架構(gòu)并沒有任何變化,只是把WPA2中受KRACK影響的四步握手協(xié)議替換掉了,這種治標(biāo)不治本的方式,與“等死”何異?
下面我們就來揭開密鑰重裝***(KRACK)神秘的面紗,一窺其究竟:
密鑰重裝對于不同的數(shù)據(jù)機密性協(xié)議造成的危害程度不盡相同。針對AES-CCMP,***者可以實施重放和解密,這使得劫持TCP流并注入惡意數(shù)據(jù)變得有可能;針對WPA-TKIP和GCMP,***的影響更大甚至是災(zāi)難性的,不僅可以重放、解密,而且還能偽造。危害情況具體如表1所示:
重放*** | 解密*** | 偽造*** | ||
四步握手 | TKIP | AP—> Client | Client—> AP | Client—> AP |
CCMP | AP—> Client | Client—> AP | ||
GCMP | AP—> Client | Client—> AP | Client—> AP | |
組播密鑰握手 | TKIP | AP—> Client | ||
CCMP | AP—> Client | |||
GCMP | AP—> Client | |||
快速切換 | TKIP | Client—> AP | AP—> Client | AP—> Client |
CCMP | Client—> AP | AP—> Client | ||
GCMP | Client—> AP | AP—> Client | AP—> Client | |
站間密鑰握手 | TKIP | 發(fā)起端 Client—>對端Client | 對端 Client—>發(fā)起端Client | 對端 Client—>發(fā)起端Client |
CCMP | 發(fā)起端 Client—>對端Client | 對端 Client—>對端Client | ||
GCMP | 發(fā)起端 Client—>對端Client | 對端 Client—>發(fā)起端Client | 對端 Client—>發(fā)起端Client |
KRACK漏洞基于密碼學(xué)的理論基礎(chǔ),即分組加密算法使用同一加密密鑰在用于會話加密時不能使用相同的IV,若IV重用,則必然存在安全漏洞。受篇幅限制,此處不再贅述。
目前公共漏洞和披露(Common Vulnerabilities & Exposures,CVE)網(wǎng)站已為KRACK預(yù)留漏洞編號,包括如下列出的十種,都是基于上述原理。
l CVE-2017-13077:在四次握手中重裝成對加密密鑰(PTK)
l CVE-2017-13078:在四次握手中重裝組密鑰(GTK)
l CVE-2017-13079:在四次握手中重裝完整組密鑰(IGTK)
l CVE-2017-13080:在組密鑰握手中重裝組密鑰(GTK)
l CVE-2017-13081:在組密鑰握手中重裝完整組密鑰(IGTK)
l CVE-2017-13082:接受重新傳輸?shù)目焖貰SS切換(FT)重新關(guān)聯(lián)請求,處理的同時重裝成對加密密鑰(PTK-TK)
l CVE-2017-13084:在PeerKey握手中重裝STK密鑰
l CVE-2017-13086:在TDLS(Tunneled Direct-Link Setup,通道直接鏈路建立)握手中重裝TDLS PeerKey(TPK)
l CVE-2017-13087:處理無線網(wǎng)絡(luò)管理(WNM)休眠模式響應(yīng)幀時重裝組密鑰(GTK)
l CVE-2017-13088:處理無線網(wǎng)絡(luò)管理(WNM)休眠響應(yīng)幀時重裝完整組密鑰(IGTK)
KRACK***不僅涉及Wi-Fi安全協(xié)議的四步握手(4-way Handshake),而且還涉及到其他協(xié)議組件,包括組密鑰握手(GroupKey Handshake)、站間密鑰握手(PeerKey Handshake)、快速切換握手(Fast BSS Transition (FT) Handshake)等幾乎所有的安全協(xié)議過程,如圖3紅圈所標(biāo)示的,導(dǎo)致成對傳輸密鑰(Pairwise Transient Key,PTK)、組臨時密鑰(Group Temporal Key,GTK)、站間密鑰STK、組播管理保護密鑰( Integrity GTK,IGTK)等都會被重裝。圖中的TK是指PTK、GTK和IGTK。
圖3 IEEE 802.11的安全協(xié)議模塊執(zhí)行示意圖
從圖3可見,站間密鑰握手協(xié)議雖然由兩個子協(xié)議構(gòu)成,但是SMK 握手用于協(xié)商四步握手使用的PMK,SMK并不是直接用來保護通信數(shù)據(jù)的,故不會受到KRACK***的影響,故KRACK對站間密鑰協(xié)議的***也只是集中在其的第二個階段即SMK握手之后的四步握手協(xié)議上,因第二階段的四步握手協(xié)議用于協(xié)商和裝載數(shù)據(jù)保密協(xié)議的密鑰STK;快速切換握手是將四次握手協(xié)議嵌在了物理關(guān)聯(lián)框架中完成的;KRACK對組密鑰握手的***方法與對四步握手協(xié)議并無本質(zhì)區(qū)別。
四步握手協(xié)議是Wi-Fi安全機制中最重要和最基礎(chǔ)的組件,它不僅完成客戶端和AP之間的認(rèn)證,確保雙方具有一致的成對主密鑰PMK(來自于PSK或者IEEE 802.1x認(rèn)證的結(jié)果),而且完成會話密鑰的協(xié)商和分發(fā),包括用于保護單播業(yè)務(wù)數(shù)據(jù)的PTK、保護廣播/組播業(yè)務(wù)數(shù)據(jù)的GTK以及保護組播管理幀的IGTK等。
圖4 四步握手協(xié)議示意圖
在圖4中,四步握手協(xié)議與會話密鑰有關(guān)的簡要說明如下:
(1)Client在收到Msg1 后導(dǎo)出PTK;
(2)AP在收到Msg2后導(dǎo)出PTK;
(3)客戶端在收到Msg3后安裝PTK/GTK/IGTK;
(4)AP在收到Msg4后安裝PTK;
(5)安裝之后客戶端和AP分別使用該PTK/GTK/IGTK進行加解密或者完整性保護。
IEEE 802.11標(biāo)準(zhǔn)中關(guān)于Msg3的接收和重發(fā)處理,定義見其的12.7.6.4和Fig.13-17對應(yīng)的描述,為方便閱讀,對標(biāo)準(zhǔn)中相關(guān)部分截圖見圖5和圖6。
圖5 客戶端對Msg3的接收處理
圖6 客戶端狀態(tài)機中Msg3消息重發(fā)的接收處理
這四條消息中都攜帶Key Replay Counter字段,該字段作為消息計數(shù)器,用于收發(fā)雙方消息的匹配,標(biāo)準(zhǔn)中定義該字段是嚴(yán)格遞增使用的。正確的流程中Msg1和Msg2中使用Key Replay Counter的值為r;Msg3和Msg4中使用Key Replay Counter為r+1。對Key Replay Counter的定義指出,AP每次加1使用,客戶端每次將收到的有效的交互消息中的Key Replay Counter的值作為自己的Key Replay Counter。同時標(biāo)準(zhǔn)中還定義了,客戶端對每次收到的Msg3,如果Key Replay Counter字段的值已經(jīng)使用過(小于或等于當(dāng)前Key Replay Counter)就悄悄地丟棄該消息(也就是不做任何處理)。因此,如果正常的Msg4丟失,如圖7中紅字體所標(biāo)示的,那么AP就需要重發(fā)Msg3,此時為了保證客戶端接收并處理重發(fā)的消息,根據(jù)圖5和圖6的表述即可得知AP必須對Key Replay Counter加1后使用,也就是AP會重發(fā)Msg3,且是重新組包,其中的Key Replay Counter就使用了r+2,因此客戶端就會完整地按照接收一個新的Msg3的消息處理過程進行處理,據(jù)圖5可知客戶端每收到Msg3就安裝一次密鑰,并重置加密使用的關(guān)鍵參數(shù)包括IV等,因此客戶端收到重傳的Msg3就重新安裝了已安裝的密鑰(密鑰還是同一個密鑰,IV相關(guān)的信息等也再次重置),見圖7。
圖7 Msg4丟失時Msg3的重發(fā)示意圖
可見,KRACK***在 Msg4 由于背景噪聲而丟失的時候會自發(fā)地出現(xiàn),也就是說接受明文重傳 Msg3 的Client,可能會在沒有***者存在的情況下重用IV。此時***者就可以通過一些手段迫使AP收不到Msg4而重發(fā)Msg3,從而造成KRACK***。
客戶端在發(fā)出Msg4即打開802.1x端口后,有的僅接收密文的四步握手消息,有的還允許接收明文的四步握手消息,下面分兩種情況詳述***過程:
1、明文重傳Msg3的***方法
圖8 明文重傳Msg3的***示意圖
如果客戶端即受害者在加載完會話密鑰之后,依舊接受以明文方式重傳 Msg3,密鑰重裝***就很簡單,如圖8所示。首先,***者會使用基于頻段的中間人***,因此可以控制握手包。階段1中,***者阻止AP接收Msg4;階段2中,受害者在發(fā)送 Msg4 之后會裝載 PTK 以及 GTK/IGTK 密鑰,并打開IEEE 802.1x端口,開始正常傳輸數(shù)據(jù);階段3中,AP會因為沒有收到 Msg4 而重傳 Msg3,***者可以轉(zhuǎn)發(fā)重傳 Msg3 給受害者,導(dǎo)致它重新裝載 PTK 和 GTK/IGTK,并重置數(shù)據(jù)保密協(xié)議使用的IV和重傳計數(shù)器等,此時,當(dāng)受害者傳輸它下一個數(shù)據(jù)幀時,數(shù)據(jù)保密協(xié)議就會使用舊的IV,見階段5。這意味著***者可以在轉(zhuǎn)發(fā)重傳 Msg3 給受害者前等待任意的時間,即可控制一定數(shù)量的會被重用的IV。
階段4的目標(biāo)是完成 AP部分的握手。因為受害者已經(jīng)加載了 PTK,這意味著它的下一個 Msg4 是被加密的,在AP還未加載 PTK 時,它通常會拒絕已加密的Msg4,因此,IEEE 802.11標(biāo)準(zhǔn)里定義了 AP需要接受具有任意重傳計數(shù)器的四次握手包(見其12.7.6.5的描述,為方便閱讀,對標(biāo)準(zhǔn)中相關(guān)部分截圖見圖9),而不僅僅是最后一個,即接收Msg4的時候,AP驗證 Key Replay Counter字段值在當(dāng)前四次握手過程中是否使用過,也就是說,AP接受之前曾發(fā)送給Client消息中使用過且還未被Client發(fā)送回來的重傳計數(shù)器。此時AP 會接受舊的未加密的Msg4,就是重傳計數(shù)器為r+1的那條消息??傊?,AP會裝載 PTK等,打開 802.1x 端口,開始發(fā)送加密的數(shù)據(jù)幀給 Client。
圖9 AP對Msg4消息的接收處理
雖然圖9只示意了 Client 發(fā)送IV的重用情況,其實KRACK***允許重放數(shù)據(jù)幀。Client在階段3中重裝 GTK 之后,AP通過廣播或多播重傳的數(shù)據(jù)是可以被重放的。這是因為在重裝密鑰的時候,重傳計數(shù)器也被重置了。特別是對于密鑰更新即四步握手更新執(zhí)行的情況下,無論單播還是多播都更容易實現(xiàn)重放***。
還有一種針對明文Msg3重傳的***如圖10所示,其中Client中的認(rèn)證、密鑰協(xié)商等由主CPU軟件完成,數(shù)據(jù)加密由硬件即網(wǎng)卡NIC完成。階段1中,首先讓Client和AP交換Msg1和Msg2,然后阻塞第一個Msg3 ,使其不立即轉(zhuǎn)發(fā)給Client,而是等著AP重傳第二個Msg3;階段2中,***著接連發(fā)送兩個Msg3給Client,實現(xiàn)數(shù)據(jù)保密協(xié)議的無線網(wǎng)卡還沒有裝載 PTK,于是就將收到的兩個明文包按順序轉(zhuǎn)發(fā)給主CPU;階段3中,實現(xiàn)四次握手協(xié)議的CPU 接收了第一個Msg3,并且讓無線網(wǎng)卡裝載PTK;階段4中,CPU 對從接收序列里得到的第二個 Msg3會正常處理,并響應(yīng)發(fā)出Msg4,因為網(wǎng)卡已經(jīng)裝載了 PTK,因此這個Msg4會是在IV為x(某個值,可能已經(jīng)發(fā)送過其他數(shù)據(jù))的情況下加密傳輸?shù)?,在這之后,CPU再次讓無線網(wǎng)卡裝載 PTK,同時無線網(wǎng)卡也會重置與 PTK 相關(guān)的IV和重傳計數(shù)器等,這意味著下一個數(shù)據(jù)幀會重用IV為1到x。
圖10 明文重傳Msg3的第二種***示意圖
2、加密重傳Msg3的***方法
圖11 密文重傳Msg3的***示意圖
階段1,***者讓受害者和AP進行一個初始的四次握手,并且在握手成功之后,初始化執(zhí)行PTK的重裝;階段2,***者沒有立刻轉(zhuǎn)發(fā)第一個Msg3,而是等待 AP 重傳Msg3,然后將這兩個Msg3按順序一起發(fā)送給受害者,網(wǎng)卡會使用當(dāng)前的PTK來解密這兩個信息,然后將它們轉(zhuǎn)發(fā)到CPU的接收序列;階段3中,CPU會處理第一個Msg3,讓網(wǎng)卡裝載新的PTK;階段4中,CPU會從接收序列取出第二個Msg3,當(dāng) PTK 被裝載的時候,Msg4會通過新的PTK和IV為 1 來加密并發(fā)送,在這之后,CPU會讓網(wǎng)卡重裝 PTK,并且重置 IV和重傳計數(shù)器等,最終,受害者發(fā)送的下一個數(shù)據(jù)幀就會使用新的PTK和IV為1 來加密。
這里要特別指出的是,KRACK對于四次握手的***還發(fā)現(xiàn)了一種更為驚悚的漏洞,即四步握手Msg3重傳引起PTK/GTK/IGTK重新安裝時,客戶端會重裝一個全零加密密鑰。Mathy Vanhoef認(rèn)為,該漏洞是由 Wi-Fi安全技術(shù)標(biāo)準(zhǔn)引起的,該標(biāo)準(zhǔn)建議在安裝了TK (指PTK/GTK/IGTK)之后,從內(nèi)存清除它。KRACK導(dǎo)致全零密鑰的安裝,則意味著數(shù)據(jù)通信的安全性喪失殆盡,WAP/WPA2的安全機制將形同虛設(shè)。
在Mathy Vanhoef公布的演示信息中有一段視頻,向大家展示了如何進行一次完整的***過程,其核心就在于“重新安裝現(xiàn)已清除的加密密鑰,有效地安裝了一個全零的密鑰?!?。
現(xiàn)在,我們就從工程實現(xiàn)角度來深入分析一下那些按照Wi-Fi標(biāo)準(zhǔn)實現(xiàn)的產(chǎn)品是否存在這樣的行為:
首先我們進行代碼側(cè)分析,先弄清楚其邏輯以及密鑰重裝過程。為此我特意下載了Linux系統(tǒng)中的wpa.c文件進行詳細(xì)閱讀,發(fā)現(xiàn)了其中關(guān)鍵代碼實現(xiàn)過程。
圖12 Wi-Fi安全協(xié)議實現(xiàn)代碼片段(一)
圖12表示了wpa_supplicant_process_3_of_4函數(shù)中調(diào)用wpa_supplicant_install_ptk函數(shù)的代碼片段。STA接收并處理第3幀,在調(diào)用wpa_supplicant_send_4_of_4函數(shù)發(fā)送第4幀后,調(diào)用wpa_supplicant_install_ptk函數(shù)安裝PTK。
圖13 Wi-Fi安全協(xié)議實現(xiàn)代碼片段(二)
圖13為wpa_supplicant_install_ptk函數(shù)的代碼片段。wpa_supplicant_install_ptk函數(shù)中,當(dāng)安裝完P(guān)TK后,調(diào)用如下代碼將PTK的緩沖區(qū)清0。
/* TK is not needed anymore in supplicant */
os_memset(sm->ptk.tk, 0, WPA_TK_MAX_LEN);
從代碼側(cè)看,確實是存在問題的,但是為了嚴(yán)謹(jǐn)起見還是要進行更深入的分析,拿到與之呼應(yīng)的證據(jù)才行。
為了驗證這一情況筆者搭建了一套WIFI接入點環(huán)境。一臺無線路由器、一臺安卓6.0+內(nèi)核的手機作為客戶端。兩者進行正常的接入動作,在此過程中進行抓包,確實看到了四步握手的報文,如圖14所示:
圖14 Wi-Fi四步握手協(xié)議過程抓包
圖14是使用wireshark打開的,EAPOL類型的數(shù)據(jù),即四次握手的數(shù)據(jù)包。筆者特意使AP不斷進行第三包的重傳過程,所以會看到很多EAPOL的報文。通過抓包分析確實看到了四步握手過程,但是通過包分析并不能證明是否進行了全0密鑰的安裝。
為了捕捉全0密鑰的安裝過程,筆者決定用內(nèi)存分析的方式來分析這一臺安卓手機客戶端,以便拿到真實準(zhǔn)確的密鑰信息。
將手機與電腦連接以便進行調(diào)試,通過內(nèi)存分析手段即可觀測密鑰的變化過程,分析環(huán)境如下:
圖15 內(nèi)存分析環(huán)境
我們還是進行上述步驟,重復(fù)的使第三包進行重傳,經(jīng)過試驗并調(diào)試內(nèi)存信息,我們最終找到了全0密鑰安裝最直接的證據(jù):
圖16 內(nèi)存分析數(shù)據(jù)
如上述二圖所示,我們可以看到。客戶端第一次接收第三包時,確實是安裝了一個隨機出來的密鑰,但是在收到重傳指令之后,系統(tǒng)會將密鑰內(nèi)存清零,然后再去被清零區(qū)域取值進行安裝。與我們最初的分析結(jié)果完全一致!
至此,關(guān)于Wi-Fi安全問題以及KRACK漏洞***就分析完了。
后記:
原本是想就此截稿,奈何筆者還是忍不住想說一說另一個無線局域網(wǎng)安全技術(shù)(沒錯,就是中國提出的WAPI技術(shù)),畢竟那十六年可不僅僅是在研究了Wi-Fi安全技術(shù),對于WAPI安全技術(shù)也研究頗多。說實話,技術(shù)上WAPI的確比Wi-Fi安全多了,可惜產(chǎn)業(yè)中至關(guān)重要的資源(比如芯片、驅(qū)動、操作系統(tǒng)等)都沒掌握在中國人手里,以至于咱們空有WAPI這么好的技術(shù),卻硬生生被別人利用產(chǎn)業(yè)資源的壟斷優(yōu)勢排擠得舉步維艱,可笑的是某些人還在那說風(fēng)涼話,認(rèn)為國外的月亮就一定比國內(nèi)的圓!不知道在經(jīng)歷了這些年Wi-Fi種種安全問題之后,這些人是否還是覺得國外的月亮圓?
好了,我就不感慨了,直接說經(jīng)過仔細(xì)分析得出的結(jié)論: KRACK***對WAPI是無效的!
為什么這么說呢?先來看看WAPI安全技術(shù)的架構(gòu),如下圖所示:
圖17 WAPI安全技術(shù)架構(gòu)
大家都知道,WAPI是我國自主提出的無線局域網(wǎng)安全技術(shù),也是全球唯二的無線局域網(wǎng)安全技術(shù)之一(另一個就是Wi-Fi安全技術(shù))。不同于Wi-Fi安全技術(shù)在有缺陷的架構(gòu)之上不斷的修修補補,WAPI安全技術(shù)從設(shè)計之初就采用了先進的三元對等安全架構(gòu),直接實現(xiàn)了AP和客戶端之間的對等雙向認(rèn)證,并且從WAPI技術(shù)標(biāo)準(zhǔn)中也可以看出,技術(shù)人員在協(xié)議設(shè)計過程中已經(jīng)考慮到了種種可能面臨的安全威脅,其中就包括密鑰重裝這類***方式,并有針對性的在WAPI相關(guān)技術(shù)標(biāo)準(zhǔn)中做了明確的規(guī)定,例如在WAPI安全協(xié)議交互的過程中采用了具有魯棒性的處理方式,對于重發(fā)的消息,接收端會根據(jù)需要選擇丟棄或者響應(yīng),即使選擇響應(yīng),也僅僅是將之前發(fā)出的消息原樣重發(fā),僅此而已,絕不會重新執(zhí)行一遍密鑰安裝的動作,這樣KRACK***的前提就無法成立,后續(xù)的***也就無從談起了。
寫在最后:
雖說安全這東西,你不吃點虧就不會知道它的好!但是老磚家在此還是提醒大家,趁著還沒吃大虧,重視一下無線網(wǎng)絡(luò)的安全問題吧!畢竟亡羊補牢,你再怎么補,損失的羊終歸是回不來了!
主要參考文獻(xiàn)
[1] Mathy Vanhoef,Key Reinstallation Attacks: Forcing Nonce Reuse in WPA2, https://www.krackattacks.com.
[2] IEEE Std 802.11. 2016. Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Spec.
[3] IEEE Std 802.11ac. 2013. Amendment 4: Enhancements for Very High Throughput for Operation in Bands below 6 GHz.
[4] IEEE Std 802.11ad. 2012. Amendment 3: Enhancements for Very High Throughput in the 60 GHz Band.
[5] IEEE Std 802.11i. 2004. Amendment 6: Medium Access Control (MAC) Security Enhancements.
[6] IEEE Std 802.11r. 2008. Amendment 2: Fast Basic Service Set (BSS) Transition.
[7] GB 15629.11-2003/XG1-2006,信息技術(shù)系統(tǒng)間遠(yuǎn)程通信和信息交換局域網(wǎng)和城域網(wǎng)特定要求第11部分:無線局域網(wǎng)媒體訪問控制和物理層規(guī)范 第1號修改單。
[8] CBWIPS/Z 008-2008,WAPI密鑰管理實施指南。