上月,受邀在C-SEC上海快遞行業安全會議上做了關于無線安全威脅的議題分享。介紹了家庭級的無線網絡薄弱環節及攻擊方法,同時列舉了烏云上因無線邊界被突破,造成內網淪陷的諸多例子。后半部分,簡要的介紹了企業級無線網絡安全,可能因為受眾人群及時間的關系,觀眾情緒不太高,所以我也沒有展開。
家庭級的無線安全已是老生常談了,而針對于企業級的802.1X,在我檢索時發現中文網頁內的相關安全文章只有寥寥數篇,大多只是講述了攻擊過程,對于其缺陷原因、防護方法、對于802.1X中EAP的諸多擴展協議并未提及。這無疑對新入研究者幫助甚少。于是便有了此文,也是我對知識的梳理,希望能對大家有所幫助。
是無線網絡中最早最被廣泛使用的安全協議,使用了基于共享加密密鑰的 RC4 對稱加密算法。因為加密算法不夠強壯,收集足夠多的密文數據便可直接算出密鑰,同時由于數據完整性檢驗算法也不夠強壯,導致整個破解過程可在幾分鐘內完成。
WEP有2種認證方式:開放式認證(open system)和預共享密鑰認證(shared key)。
針對WPE出現的問題,IEEE推出了 802.11i 標準。但由于時間緊迫,短時間內無法將標準全部實現,于是在2003年 WPA 被推出,用以作為 802.11i 完備之前替代 WEP 的過渡方案。
相比于WEP,WPA實現了三個關鍵的改動。
- 除了預共享模式(pre-shared key)這種類似WEP預設KEY的認證之外,還支持 802.1X 認證。802.1X 使用獨立的radius服務器,每個用戶使用不同的密碼登錄,提高了認證強度。
- 增加了 TKIP 協議(臨時密鑰完整性協議),可以將其理解為WEP外面的一層保護皮。WEP容易破解是因為RC算法不強,而且密鑰固定不變,TKIP 的做法就是在傳輸過程中為每個包生成不同的加密密鑰,增大破解難度。
- 更強的數據完整性檢驗算法,解決篡改問題。
WPA壽命很短,2004年便被實現了完整 IEEE 802.11i 標準的 WPA2 所取代。WPA2中使用更強的AES(Advanced Encryption Standard)加密算法取代WPA中的RC4,也使用了更強的完整性檢驗算法CCMP。
到現在,一共有三種認證方法:開放式認證、預共享密鑰(PSK)認證、802.1X認證。 現在,在路由器設置的加密方式里看到wpa-personal、wpa2-personal、wpa-enterprise、wpa2-enterprise時就不會暈了,personal指的PSK認證,enterprise指的便是802.1X認證。
IEEE 802.1X 是 IEEE 制定關于用戶接入網絡的認證標準,它為想要連接到 LAN 或 WLAN 的設備提供了一種認證機制,通過EAP協議(Extensible Authentication Protocol)進行認證,控制一個端口是否可以接入網絡。 802.1X工作在二層,加上EAP只是一個框架,可以由廠商實現具體的認證方法,因此具有非常好的擴展性,在辦公網絡的很多方案中得到應用。不同的廠商也衍生出一大堆LEAP、PEAP、EAP-TLS、EAP-MD5等等具體的認證協議。
802.1X驗證涉及到三個部分:申請者、驗證者和驗證服務器。
申請者是一個需要連接到LAN/WAN的客戶端設備,同時也可以指運行在客戶端上,提供憑據給驗證者的軟件。 驗證者是一個網絡設備,如以太網交換機或無線接入點。 驗證服務器通常是一個運行著支持RADIUS和EAP協議的主機。
驗證者就像是一個受保護網絡的警衛。申請者不允許通過驗證者訪問到受保護一側的網絡,直到申請者的身分被驗證和授權。這就像是允許進入一個國家之前要在機場的入境處提供一個有效的簽證一樣。使用802.1X基于端口的驗證,申請者向驗證者提供憑據,如用戶名/密碼或者數字證書,驗證者將憑據轉發給驗證服務器來進行驗證。如果驗證服務器認為憑據有效,則申請者就被允許訪問被保護側網絡的資源。
802.1X 最初為有線接入而設計,因連接需要物理接觸,所以在安全方面考慮較少。而無線網絡的出現,使設備接入變得容易,需要對802.1X的安全性進行加強,即增強EAP協議的安全性。除了驗證用戶外,用戶也需要去確保正在連接的是合法熱點。
需求便是:強健的加密方式及雙向認證。 基于 IETF 的 TLS 標準可以較好的實現這兩點需求,三種基于TLS的EAP協議就被研制了出來:EAP-TLS、EAP-TTLS、EAP-PEAP。 EAP-TLS基于Client和Server雙方互相驗證數字證書。因為EAP-TLS需要PKI系統為客戶端簽發證書的缺點,所以設計出了TTLS和PEAP,這兩個協議可以在TLS隧道內部使用多種認證方法。
因為PEAP與Windows操作系統的良好協調性,以及可以通過Windows組策略進行管理的特性,使得PEAP在部署時極其簡單。同時,由于PEAP可以兼容幾乎全部廠商的全部設備,因此對于企業來說,PEAP是一個最佳的驗證協議。
PEAP是可擴展的身份驗證協議 (EAP) 家族的一個成員。它使用 TLS 為進行PEAP驗證的客戶端和服務器間創建加密隧道。PEAP沒有指定具體的認證方法,可搭配選擇多種認證方式如 EAP-MSCHAPv2 、EAP-TLS等。
PEAP的認證過程分為兩個階段:
認證方法:
PEAP 使用 PKI 來確保用戶驗證過程不會被黑客或惡意人員截獲和破解,這與SSL采用PKI來確保網站或其它敏感網絡應用在數據交換過程不被截獲并破解的目的是一樣的。
PKI 模式采用一個簡單的數字文檔作為確定擁有者身份的數字證書,實現安全的密碼交換。 數字證書本身沒有價值,而當這個證書被稱作證書授權(CA)的受信機構簽名后,就具有了證明身份的作用。 為了讓CA能夠被客戶所信任,客戶端的證書信任列表(CTL)中應該安裝包含有該CA公鑰的“root certificate”,即該CA根證書。
目前所有主流操作系統中,都預裝了包含可信CA根證書的CTL,這也就是為什么諸如 VeriSign 等公司有權利給全球的服務器頒發證書。采用VeriSign這樣具有公信力的認證 機構來建立PKI是一件非常簡單的事情,因為該證書已經被幾乎所有的電腦及移動設備所接受,但是服務器證書的費用每年可能會有數百美元。采用EAP-TLS和CA結合的辦法成本更高,因為還需要每年為每個客戶支付60美元的數字證書費用。
于是很多企業采用自簽名數字證書的方式來實現無線局域網的部署。
企業部署無線網,一般會選擇采用PEAP-MSCHAP v2、使用AD認證(域賬戶)的架構。 通過上面的介紹可以了解到,PEAP通過類似SSL機制為認證提供傳輸層的安全,需要企業去向CA購買證書,或者自建PKI系統,簽署用于無線的證書,同時將根證書部署到每個客戶端。
“將根證書部署到每個客戶端”這個要求實現起來比較麻煩,大部分企業直接忽視,客戶端直接面對未經認證的證書,便留下了隱患:
那么針對PEAP的攻擊手法就很明確了:
工具可以使用FreeRadius-WPE,這是一款針對開源FreeRADIUS服務器的補丁程序。 使用方法可參考知識庫上mickey寫的《破解使用radius實現802.1x認證的企業無線網絡》一文,這里便不再贅述。
不過 FreeRadius-WPE 項目已經在14年停止維護,OpenSecurityResearch 制作了一個替代品 hostapd-wpe,可直接為hostapd打補丁支持 PEAP/MSCHAPv2、EAP-TTLS/MSCHAPv2等攻擊。
項目地址: https://github.com/OpenSecurityResearch/hostapd-wpe 官方文檔:
Ubuntu/Debian/Kali Building -
-----------------------------------------------------------------------
apt-get update
apt-get install libssl-dev libnl-dev
General -
------------------------------------------------------------------------
git clone https://github.com/OpenSecurityResearch/hostapd-wpe
wget http://hostap.epitest.fi/releases/hostapd-2.2.tar.gz
tar -zxf hostapd-2.2.tar.gz
cd hostapd-2.2
patch -p1 < ../hostapd-wpe/hostapd-wpe.patch
cd hostapd
#If you're using Kali 2.0 edit .config file and uncomment:CONFIG_LIBNL32=y
make
I copied the certs directory and scripts from FreeRADIUS to ease that
portion of things. You should just be able to:
cd ../../hostapd-wpe/certs
./bootstrap
#then finally just:
cd ../../hostapd-2.2/hostapd
sudo ./hostapd-wpe hostapd-wpe.conf
建立成功后,用手機連上此熱點,輸入賬號密碼就可觀察到被記錄hash值(Challenge/Response),被記錄在hostapd-wpe.log
有兩個工具可以使用,一個是著名的John the Ripper,hostapd-wpe.log文件里有直接生成了NETNTLM格式的hash,提交給John the Ripper就行了
這里以asleap為例:
wget http://www.willhackforsushi.com/code/asleap/2.2/asleap-2.2.tgz
tar zxvf asleap-2.2.tgz
cd asleap-2.2
make
./asleap -C Challenge值 -R Response值 -W path/to/wordlist.txt
在Defcon 20上,有研究人員展示了破解 MS-CHAPv2 的方法。
MS CHAP v2整個認證過程,最后的本質就是MD4計算HASH和DES加密。 但是這個過程中有幾個非常2的做法,首先DES加密的時候是分三段進行的,導致每段都很短,只有7bytes(56 bits)。更嚴重的問題在于,MD4 HASH只有16bytes(不夠21bytes分三段)而填充了5個0,導致最后一段DES的KEY其實只有2個字節也就是16bits,這一段簡直就是明文了。那么最后剩下的,就是要破解前面2個KEY長度為56bits的DES加密了,算法復雜度僅為2的57次方,可以暴力了。
在獲取了MS-CHAP v2握手數據包后,使用chapcrack工具解析該握手數據包中相關的憑證信息,被提交給CloudCracker網站,該網站為滲透測試人員和網絡審計員提供在線的密碼破解服務,在一天內返回破解的MD4哈希值。
雖然我們可以通過上面講述的方法對PEAP進行攻擊,同時MS-CHAP v2還包含漏洞可被暴力破解,但這并不意味著PEAP已經被攻破了。當配置合理時,PEAP 是安全的,因為黑客根本沒機會接觸到在TLS隧道中的MS-CHAPv2。
應該做到:
由于涉及較多的協議知識,如有紕漏歡迎指正。 有少量的參考內容未使用引用(考慮到排版),還請諒解。
最后感謝Sweeper、Sanr對本文的指導和幫助