在了解四次握手以后,如果想了解KRACK攻擊暖庄,先簡單看一下WEP聊替,TKIP和AES的加密流程圖:
WEP加密流程:
WEP是一個Layer 2的加密方法,它使用的是ARC4流加密培廓。它有一個數據完整性校驗操作惹悄,也就是Integrity Check Value (ICV),這個值是通過計算為加密的數據域(MSDU)而來的肩钠。
802.11標準定義了兩個WEP版本泣港,分別是WEP-40和WEP-104支持64bit和128bit加密暂殖,其實40和104都是從64與128減24得來的,這24位叫初始化向量Initialization Vector (IV)当纱,注意和ICV進行區(qū)分:
40和104則是指靜態(tài)秘鑰的bit長度呛每,也就是說WEP-40支持輸入10 hex characters or 5 ASCII characters
,WEP-104支持輸入26 hex characters or 13 ASCII characters:
一般來說坡氯,WEP支持4個key晨横,使用時從中選一個進行加密。
那么WEP加密過程是怎么實現的呢箫柳?下面根據流程圖來分析一下
(1) IV是動態(tài)生成的24bit隨機數手形,標準沒有指定應該怎么生成,而且在數據幀中以明文的方式進行發(fā)送悯恍,它和key結合生成隨機種子(seed)库糠,然后運用CR4算法生成秘鑰流(keystream)。
(2)對需要加密的明文進行CRC-32運算涮毫,生成 ICV(32位)曼玩,然后將這個 ICV 追加到 plaintext的后面
(3)將尾部有 ICV的plaintext 與密碼流進行異或運算,得到加密數據
(4)將 IV 添加到加密數據的前面窒百,進行傳送黍判。
TKIP的加密過程:
基于WEP,TKIP主要做了以下改動:
(1)發(fā)送端會使用加密算法計算一個MIC(message integrity code篙梢,消息完整碼)顷帖,這個MIC是通過計算 SA, DA渤滞,priority 和plaintext data而來贬墩,TKIP會將MIC追加到MSDU的后面,如果MSDU + MIC 的size過大妄呕,需要分片陶舞,那么只要將 MSDU + MIC 看成一個整體 MSDU‘ 進行分片就好了。也就是說绪励,TKIP只要在MSDU進行分片前將MIC追加到MSDU后面肿孵,形成一個新的MSDU就好了,分片的事疏魏,它不管,那是MPDU的事情停做。接收端收到MPDU分片以后,會先將它們重組成一個MSDU大莫,然后進行MIC的校驗蛉腌。
(2)TKIP雖然包含了MIC,但仍然不夠,所以TKIP實現了countermeasures功能烙丛,它可以限制可能的偽裝和學習被攻擊的信息
(3)TKIP使用一個per-MPDU TKIP sequence counter (TSC) 來理順MPDUs的發(fā)送舅巷,如果接收端收到的MPDUs不符合順序(比如序號沒有遞增),那么將會被丟棄.TKIP會像WEP IV和附加 IV一樣 對TSC進行編碼河咽。
(4)TKIP使用一個密碼混合功能钠右,結合TK,TA和TSC生成一個WEP seed库北。
下面我們來看一下TKIP加密的流程圖:
TSC0-TSC5: 他們是由TSC派生而來的爬舰,在TKIP中有一個TSC計數生成器们陆,它會為每一個MPDU遞增的生成一個6字節(jié)的TSC序列號寒瓦,TSC0-TSC5則分別代表其中的每個字節(jié)TK(temporal key):臨時密鑰,它是從PTK或者GTK派生而來的坪仇,而PTK也就是相當于WEP加密中的由SSID和pairewise計算出來的keyplaintext MSDU: 未加密的MSDU杂腰,也就是要發(fā)送的playload
MIC Key: 它是從TK中取出來的指定位,文檔中規(guī)定
A STA shall use bits 128–191 of the temporal key as theMichael key for MSDUs from the Authenticator’s STA to the Supplicant’s STA.
A STA shall use bits 192–255 of the temporal key as the Michael key for MSDUs from the Supplicant’s STA to the Authenticator’s STA.
需要了解更多請參考博客:
https://blog.csdn.net/lee244868149/article/details/52701703椅文,以上內容均來自于此博客
AES的加密流程:
它的主要輸入包括:
MAC header:802.11 MAC 頭部
plaintext Data(MSDU):? 需要發(fā)送的playload
PN(packet number): 長度128bit,它和TKIP中TSC(TKIP sequence number )很相似喂很,它是每個幀的標識,而且它會隨著幀的發(fā)送過程不斷遞增皆刺,他可以防止回放和注入攻擊
TK(temporal key):和TKIP加密一樣少辣,CCMP也有一個128bit的TK,它可能是由SSID+passphase計算來的PTK(pairwise transient key )羡蛾,也可能是GTK(group temporal key )漓帅,兩者分別用于單播數據加密和組播數據加密
Key ID: 和TKPIP中的一樣,用于指定加密用的key,注意這個ID是index的縮寫痴怨,一般設為0
Nonce:他是一個隨機數忙干,而且只生成一次,它一共長104bit浪藻,是由PN(packet number捐迫,48bit), Qos中的優(yōu)先級字段(8bit)和TK(transmitter address , 48bit)這三個字段組合來的,需要注意爱葵,不要和4路握手的Nonce混淆
AAD Additional authentication data (AAD):它是由MPUD的頭部構建而來的施戴,它用于確保MAC頭部的數據完整性,接收端會使用這個字段來檢驗MAC頭部
需要了解更多請參考博客:
https://blog.csdn.net/lee244868149/article/details/52733277萌丈,以上內容均來自于此博客
了解了以上加密過程和四次握手暇韧,現在可以來看一下KRACK攻擊的原理:
http://www.reibang.com/p/ea86885abd02
這里有crack攻擊的具體原理,以及如何對報文進行解密浓瞪。一下內容為copy而來懈玻,僅供學習。
KRACK是什么?
關于WPA2漏洞涂乌,大家在去年年底或多或少都有了解艺栈,去年年底公開這個細節(jié)之后,媒體和新聞采用很大的篇幅去報道這個漏洞湾盒。這個消息剛一放出來時湿右,我只是簡單的看了一下,因為我印象里WPA2協議被證明過是一個安全的協議罚勾,而且它復議很長一段時間毅人,一直沒有出現很重大的問題,這次直接爆出屬于協議層面的問題尖殃,應該屬于嚴重的漏洞范圍丈莺。但最開始只是簡單的看了一下,并沒有深入的了解送丰。
我對它真正感興趣是在細節(jié)公開的幾個月之后缔俄,我突然想起來這個事件這么嚴重,怎么沒過多長時間就已經沒動靜了器躏。我回過頭來找新聞報道去看俐载,發(fā)現很多新聞報道不僅對漏洞原理沒有解釋清楚,連攻擊能干什么也沒有說清楚登失,就一直反復強調“這個問題很嚴重”遏佣,這讓我當時想進一步了解一下這次事件到底說了什么問題,于是有了后續(xù)的研究揽浙。
?KRACK攻擊是什么状婶?KRACK是我們說的密鑰重裝攻擊,它屬于重放攻擊捏萍,這個攻擊的范圍很有限太抓,因為它需要搞中間人攻擊。主要是利用了WPA和WPA2協議的漏洞令杈,當客戶端連接一個WiFi時走敌,四次握手過程被觸發(fā),這個過程中有一個ap向客戶端傳送msg3的過程逗噩,攻擊者控制這個過程反復傳msg3掉丽,導致客戶端Nonce被重置,進而導致后面?zhèn)鬏數臄祿梢员还艉徒饷芤煅悖@是KRACK攻擊的大致流程捶障。
至于攻擊是如何實現的,需要我們對漏洞的原理有一個大致的了解纲刀,因為這個問題出現在四次握手過程中项炼,我們先回到四次握手本身來看一下這個問題到底出在了什么地方。
四次握手分析
先明確幾個概念,四次握手過程會通過四次握手來產生PTK的后話密鑰锭部。PTK的生成一般包含5個部分暂论,前2個分別是aNonce和sNonce,這個Nonce就是密鑰學隨機數的概念拌禾,我們在客戶端ap通信的過程當中取胎,把ap叫“authenticator”,表示認證方湃窍;在客戶端叫“supplicant”闻蛀,表示請求方。aNonce和sNonce是表示客戶端ap那端產生的兩個隨機數您市,在這區(qū)分了一下觉痛。下面的兩個也是一樣的,a和s分別表示兩端的地址墨坚。Pmk是主密鑰秧饮,它既可以看作是由另外一個用戶響應密鑰來生成的映挂,但它又不是由單獨的psk來生成泽篮,它還包括其他的參數,共同組成了pmk柑船。這個pmk不是用來加密數據的帽撑,它和我們前面提到的另外4個部分共同組合成了PTK,這個PTK是后面真正用來加密傳輸數據的鑰匙鞍时,這個是我們首先需要明確的亏拉。
?我們看一下四次握手的過程,第一個是傳送給客戶端的msg1逆巍,這個msg1主要包含兩個東西及塘,一個是ap這邊傳的隨機數,還有一個是r锐极,r在這表示一個計數器的意思笙僚,它會隨著每發(fā)送一個報文自動加1,對于同一次傳送的回應過程中使用的是同一個r灵再,也就是說可以看到它這個載體下回映的報文當中使用函數肋层。在客戶端ap進行四次握手之前,它們會預先進行認證和關聯的過程翎迁,在這個過程當中PTK需要5個部分栋猖,其中有4個部分在前面已經準備好了,也就是說對于客戶端來講汪榔,現在如果它想生成一個PTK的話就缺一個aNonce蒲拉,也就是說它就等于aNonce。
現在通過四次握手的第一個階段,msg1把這個aNonce傳過去了雌团,比如客戶端在這邊爆班,它的5樣東西都已經集齊了,它現在可以生成一個PTK辱姨。但是客戶端這邊生成之后柿菩,ap這邊還沒有,所以這邊握手一個msg2過去雨涛。
?這個msg2也包含兩個東西枢舶,一個是sNonce,表示客戶端產生的隨機數替久,還有一個是這個r凉泄,和前面的那個authenticator保持一致。Ap這邊也就等sNonce過來了蚯根,它現在有了這個sNonce也是5樣東西都集齊了后众,所以它這邊也可以生成一個PTK。這樣通信兩端進行秘密通信颅拦,它的密鑰都已經完畢了蒂誉。也就是說四次握手的前兩次握手過程解決了PTK密鑰生成的問題。
?我們看一下第三次握手距帅,ap生成PTK之后還會進行一個驗證右锨,如果這邊都沒有什么問題了,這里又回一個msg3過去碌秸。這個msg3也主要包含兩個部分绍移,一個是主密鑰防阻隔時用的,還有一個是authenticator+1讥电,因為是我們這個ap這邊相當于第二次給客戶端發(fā)報文了蹂窖,所以這里的值自動加1《鞯校客戶端收到msg3的時候回一個msg4過來瞬测,這個msg4在這相當于msg3的ACK,起到一個確認的作用潮剪。它既然是一個ACK的話涣楷,可以想象到ap這邊如果沒有收到msg4的話會怎樣,如它沒有收到msg4就肯定認為msg3是丟了抗碰,因為我發(fā)一個東西過去狮斗,那邊沒有人理我,也沒有人回應弧蝇,那肯定它會重發(fā)一個東西過去碳褒,所以ap這邊只要沒有收到msg4就會回應一個msg3過去折砸。但是客戶端不會這么想,它才不會管ap有沒有收到這個msg4沙峻,只要我把msg4和ACK傳出去了睦授,我這邊的任務就完成了,四次握手就結束了摔寨,接下來就是通過PTK來加密數據了去枷,所有通過我客戶端發(fā)出來的東西都會經過PTK加密。但是ap那邊不行是复,它那邊只有收到msg4之后才會安裝PTK删顶,否則就會重傳msg3,直到它成功的收到了msg4之后認為工作完成了淑廊,可以安裝一個PTK了孕蝉。這是四次握手大致的過程膳算。
?我們接下來說說客戶端這邊,它要通過安裝的PTK來加密數據了杏死。我們一直在說這個加密来庭,那么它到底是怎么加密的串慰?我們詳細來看一下這個過程厚满。這是我們加密的流程夺谁,可以看一下上面的明文數據,客戶端假如要發(fā)送明文數據碾阁,它會利用我們的PTK和另一個東西組合成密鑰输虱,那個東西就是這個Nonce些楣。前面說到KRACK攻擊的原理時脂凶,說由于KRACK攻擊導致密鑰、Noucce被重置愁茁,被重置的就是這里的Nonce被重置了蚕钦,而不是前面四次握手中提到的aNonce或者sNonce,不是那里的那個鹅很,很多人都當成了前面那個Nonce嘶居,不是前面那個被重置了,只是加密的這個Nonce被重置了促煮。
這個Nonce叫pACKetNumber邮屁,它會隨著客戶端每發(fā)送一個報文,這個Nonce會自動加1菠齿。我們把這個地方雖然把它叫Nonce佑吝,但它一點也不隨機,因為它有自己的增長規(guī)律绳匀。我們在這個地方把PTK和這個Nonce做一個混合芋忿,混合成了這個密鑰流炸客,每過來一個明文數據,我們就用這個密鑰流給它做一個異或運算戈钢,這里生成密文數據痹仙。
我們看一下這個Nonce,每一個明文數據過來殉了,它的Nonce都一直變化开仰,下一個過來的時候,由于Nonce+1薪铜,它的值就變化了抖所。這么做有什么好處?如果我們對密碼學有了解的話痕囱,就知道加密的人很怕數學統(tǒng)計田轧,如果我們用同一把鑰匙加密很多不同的數據,就存在通過數學分析找出它其中規(guī)律鞍恢,進而解密數據的概率傻粘。我們現在每個明文數據都使用了一個不同的密鑰流,就會在一定程度上相當于降低了這種問題帮掉,出現了風險∠蚁ぃ現在把PTK和Nonce混合成一個密鑰流之后,過來一個明文數據蟆炊,這么混合一下稽莉,然后生成一個密鑰流,做一個異或運算涩搓,得到一個密文數據污秆。
這個時候我們就會發(fā)現,因為我們的Nonce在不斷變化昧甘,導致密鑰流也一直在變良拼。如果Nonce被重置了,因為我們的PTK是不變的充边,所以這個地方Nonce重置等于我們這個密鑰流也被重用了庸推。因為四次握手的過程是在WPA2里主要負責協商密鑰或者身份認證,真正加密是底下這些東西起到加密作用浇冰,這幾種加密的方式或者在WPA2協議的加密里面贬媒,這個Nonce重用就等于密鑰流重用了,這是我們首先需要明確的肘习。
這是四次握手當中加密的流程际乘,看了這個流程之后就,接下來看看攻擊環(huán)節(jié)井厌。
如何攻擊msg3傳輸蚓庭?
KRACK攻擊到底如何進行的致讥?可以分成幾步來看:
第一步,客戶端如果想試圖連接一個WiFi的話器赞,比如這邊連信道6垢袱,這個過程中正常的、沒有問題港柜。攻擊者這邊做的第一步是通過無線洪水攻擊斷開客戶端和APP之間的連接请契,它強迫客戶端下線。
這種東西怎么去防御夏醉?沒有太好的辦法去防御爽锥,因為這種東西不認證也不加密,它不是一個特別講道理的東西畔柔,它讓你掉線可能就掉線了氯夷,這是一個防不勝防的東西。但是客戶端掉線之后靶擦,它會試圖重新連接APP腮考,這時攻擊者可以采用攻擊方式,強迫把我們的客戶端連到另一個信道玄捕。攻擊者可以有兩塊網卡踩蔚,這邊用mitm地址很容易偽造,攻擊者把它試圖模擬成一個ap枚粘,把信道6的東西克隆馅闽,通過攻擊強迫客戶端連接到信道1上,這時攻擊者就卡在了兩個信道中間馍迄,扮演了中間人的角色福也。
這就是我們的攻擊第一步,攻擊者首先要想辦法卡上中間人的位置柬姚,但這時他還不進行任何篡改拟杉,客戶端和APP之間的流量會經過中間人的傳輸,但是他不進行任何操作量承。
?第二步,客戶端和APP之間進行四次握手過程穴店,前三次握手過程攻擊者左手拿到數據之后右手遞到另一邊撕捍,保證數據是正常傳遞的,在最后一次msg4傳輸的時候攻擊者開始搞事情了泣洞,他拿到msg4之后不再遞到另一方了忧风,相當于阻斷了msg4的傳輸,截斷了這個報文的操作球凰。APP只要沒有收到msg4狮腿,它就會重新傳一個msg3過去腿宰,但客戶端已經把msg4發(fā)過去了,它那邊已經認為自己的工作完成了缘厢。沒有一種機制是ap再回一個ACK過去吃度,那就沒完沒了了,總得有一個停的時候贴硫。所以客戶端的msg4只要發(fā)過來椿每,它就認為它這邊的工作完成了。
四次握手結束了英遭,接下來就用PTK加密數據了间护,接下來就這個來用加密通訊的數據了。但攻擊者在這時阻斷了msg4傳輸挖诸,所以這時APP會回傳一個msg3過去汁尺。這時客戶端如果收到重傳的msg3會出現什么情況??
?第三步多律,APP傳msg3過去均函,authenticator變成了+2了,表示重傳的msg3菱涤,攻擊者把msg3放回去苞也,讓它正常傳輸到客戶端那邊,因為它之前傳過一次msg4了粘秆,這時又收到msg3如迟,它就會想:我之前收到了msg3,現在四次握手都結束了攻走,怎么又收到了msg3殷勘?這時客戶端做出來的反應動作就是這次密鑰重裝攻擊漏洞爆發(fā)的關鍵。
?我們來看看它做出了什么反應昔搂,這個地方規(guī)定只要客戶端收到一個msg3玲销,它就要給出一個msg4做出回應,但是這個地方前面第一次msg4過去之后已經安裝PTK了摘符,所以這時它回復的不再是是一個簡單的msg4過來贤斜,而是一個經過加密之后的msg4。我們看看的加密的符號逛裤,上面的1表示使用的Nonce瘩绒,下面的PTK表示使用的PTK加密。它里面的authenticator+2跟上面有一定連續(xù)性带族,是緊跟上面發(fā)了一個包锁荔,只不過這里的msg4變成加密了。
?我們看一下這個攻擊蝙砌,這里發(fā)過來一個加密之后的msg4阳堕,到這里就結束了嗎跋理?還沒有。同時規(guī)定回來一個msg4之后恬总,還要重新安裝你的PTK前普,并且將你Nonce重置。這就是比如我們傳msg4時給它加密Nonce使用了一個1越驻,下一次發(fā)的時候本來這個應該更新的Nonce在這里又回到1了汁政,也就是說我們的Nonce由于msg3重傳,它在這里被重置了缀旁。接下來我們發(fā)完msg4之后记劈,客戶端就會重新安裝PTK,這個實際上就是我們重傳msg3帶來的后果并巍。接著看一下密鑰重裝Nonce在這個地方就已經被重置了目木。
?第四步,這個地方客戶端會想:我這邊已經收到一個重傳的msg3之后懊渡,msg4我已經回復過去了刽射,密鑰我已經重裝了,現在總應該沒有其他事情了吧剃执?這時又回到正常的通信過程誓禁,客戶端開始往APP傳輸數據。這時因為它之前已經安裝過一次PTK肾档,這時肯定傳送的是一個加密數據摹恰,但由于前面msg3的重傳,導致Nonce在這里被重用了怒见,所以這個地方本來是應該更新的一個Nonce俗慈,在這里它又回到1了,我們加密數據在這里采用的還是1的Nonce遣耍。這里我們可以看到客戶端那邊傳輸了兩次東西闺阱,但是使用的是同一個Nonce,這樣一來就會出現問題舵变。
第五步酣溃,現在看一下最底下被加密的數據,比如現在攻擊者如果想解密這個數據棋傍,他需要什么東西救拉?需要我們的密鑰流。這個密鑰流可以得到嗎瘫拣?可以的。我們先看攻擊者手里有哪些東西告喊,由于之前的msg3重轉導致msg4回過來一個加密之后的msg4麸拄,在之前四次握手過程中客戶端還發(fā)過來一個明文的msg4派昧,對比這兩個msg4可以發(fā)現,這兩個東西除了authenticator之外是沒有什么不同的拢切,authenticator對于msg4本身是沒有影響的〉傥現在等于是攻擊者有了明文的msg4,以及這個msg4對應的密文淮椰,有了這個名文和密文的對應關系之后五慈,在加密的時候采用的密鑰流是基于異或的,名文數據通過異或得到了密文數據主穗。
?現在攻擊者手里有了名文數據和對應的密文數據泻拦,現在只要返回來算一下,讓名文數據異或密文數據忽媒,就就可以倒推出來密鑰流争拐。有了這個密鑰流之后,我們最擔心的問題還是發(fā)生了晦雨,因為前面本來傳輸數據時更換了這個密鑰架曹,由于Nonce重置導致我們這里加密數據時使用的密鑰和前面推導出來的密鑰流使用的是同一把密鑰,我們就可以使用前面推導出來的密鑰流闹瞧,去解密后面?zhèn)魉偷臄祿笮郏罱K實現數據的解密。
?這就是KRACK攻擊流程中的核心思路奥邮,攻擊者首先卡上一個中間人的位置万牺,然后去放任四次握手的前三次握手,在最后一次握手過程中阻斷msg4傳輸漠烧,導致我們重傳msg3杏愤、密鑰重裝,導致Nonce被重置已脓,再通過前面明文和密文的對應關系推導出密鑰流珊楼,通過密鑰流解密被重裝之后加密的數據,最終實現數據的解密度液。
我們知道它的攻擊過程之后厕宗,可以看看KRACK攻擊到底能夠實現什么功能,首先堕担,我們知道肯定可以完成重放和解密兩個功能已慢。這里根據我們的加密采用的方式不一樣,這個KRACK還可以更進一步霹购,如果采用ASE-CCMP的方法頂多完成重放和解密動作佑惠,如果采用了wpa-tkip或者后來出的gcmp的方式,攻擊者除了重放和解密之外,他還可以完成偽造的步驟膜楷。在前面的KRACK沒有提到偽造的部分旭咽,因為時間有限,如果有興趣的話赌厅,可以會議之后繼續(xù)交流這部分內容穷绵。對于KRACK攻擊,不改密碼沒有事特愿,改了也沒有用仲墨,因為它根本跟這個東西沒有關系。這是KRACK攻擊大致能夠實現的攻擊效果揍障。
?我們看一下它的作用范圍目养,前面說到KRACK攻擊對我們的系統(tǒng)產生了嚴重的影響,這里有兩類系統(tǒng)產生的影響更一直亚兄,就是Linux和安卓系統(tǒng)混稽,為什么是這樣?主要原因是出現在WPA上审胚,只有東西它本來是客戶端一個加密任務工具匈勋,谷歌把它修改后之后加入了安卓平臺,所以兩邊都出事了膳叨。為什么說這個東西嚴重洽洁?因為它不僅清除了我們已經安裝的密鑰,而且它直接用了一個全0密鑰代替重裝密鑰菲嘴,導致加密過程形同虛設饿自,這時一點安全性都談不上了。
微軟在這個地方受到的影響非常小龄坪,從這個表可以發(fā)現Windows操作系統(tǒng)直接拒絕了msg3的重傳昭雌,Windows是挺有意思的一個操作系統(tǒng),KRACK攻擊的核心物種在于客戶端劫持msg3的重裝〗√铮現在微軟這里等于是你要重傳msg3烛卧,但我這邊不接受,等于最開始就把KRACK攻擊給阻斷了妓局。
關于KRACK攻擊的作用范圍总放,后面是關于如何對抗KRACK提供一個思路,除此之外好爬,對于個人用戶針對KRACK攻擊最方便的方法是及時更新或者安裝對應補丁局雄。對于企業(yè)用戶,可以考慮采用WIPS的防御系統(tǒng)存炮,它采用的是和攻擊者類似的思路炬搭,也是采用鏈路攻擊的方式打掉攻擊者的設備而實現保護蜈漓。