author: icecolor
注:
這篇文章里我詳細說一下針對企業802.1X的安全解析,還有一些針對數據協議的分析方法和淺析關于個人滲透太多太啰嗦我就不寫了,有機會在說。
因為我不想一部分一部分的寫,所以索性就把三個內容寫在了一起,如果大家覺得那里有問題,歡迎指正與交流。
工欲善其事,必先利其器。在無線滲透或者是無線攻擊中,并不是任何支持linux的網卡都支持無線工具的。推薦過一款網卡 :‘AWUS036H’我用過這款網卡,是RT8187芯片的。確實不錯,完美的支持工具。當然,也可以選用RTL3070芯片。
其實除了不兼容工具外,選好網卡還有個很重要的因素就是質量問題,質量不好的可能不穩定,造成斷開,或者是藍屏,嗅探抓包時出現丟包等狀況。
互聯網企業里只要有一定規模的公司,一般無線架設都會選用Radius。WPA+Radius應該算是標配了。
這是一個簡單的Radius的工作原理圖,我畫圖畫不好,就弄個簡單的,復雜的也不一定有人看,能表示就行了。
在個人無線網設置里面會有一些讓我們選擇認證機制和加密方式(WPA-WPA2 TKIP-AES CCMP)等 。在802.11X中也有一些認證機制,最多使用的是基于TLS的身份驗證。TLS是出自IETF組織。就跟802.11出自IEEE一個道理。現在有三種標準被開發并被部署到了無線網中。
EAP是一個802.1x認證的協議。EAP給802.1X提供了一個驗證框架,是一個可擴展性協議,支持多種驗證方式。
EAP在企業WPA-802.11X的認證方式(果然還是老外的圖易懂):
802.1X協議是在第二層,上一層是EAP。EAP上一層是各種認證方法,最底層是802.11(圖不畫了。請君腦補。) 整個EAP通信,包括EAP的協商都是通過TLS隧道執行。
上面剛剛列舉了三種現在常用的機制,其實認證機制有好多,什么Leap,eap-MD5等等....最火的就是這三種。
因為本身EAP是沒有保護的,它的EAP-Identity明文顯示,EAP-Success等信息被仿冒或抓取:
(1) EAP-TLS:它是一個雙向認證的機制,Server與client之間完成的認證。它哪里都好,就是兩個缺點致命:(1)是傳輸用戶名用的是明文可以抓到(2)是他要求企業部署PKI,因為它基于這個證書體系。但是PKI太龐大太復雜了。所以....
(2) EAP-TTLS&&PEAP:因為上面的那個缺陷,所以有了EAP-TTLS,這兩個可以放在一起說,就像是WPA/WPA2 相似度很高。它們也要證書,不過是要Server端的而不是Client的。這兩個相比,還是peap從各個方面來說方便,而且兼容好。所以企業一般都是PEAP。
EAP需要進行保護,EAP協商就在安全隧道(TLS)內部來做,保證所有通信的數據安全性。那么它在內部也會選擇一些認證來:【EAP-MS-CHAPv2】【EAP-GTC】
這是WPA/WPA2允許的兩個PEAP子類型。企業使用最多的就是第一種域架構【EAP-MS-CHAPv2】。說了這么多,可能公司企業無線部署是這樣情況的能明白,沒遇到種架構的可能比較難腦補。我給幾張圖:
就是這樣的,一般情況下,用你的域賬號登陸進去,就可以連接你公司的無線網絡了。
其實在MSCHAPV2之前是有個MSCHAPV1版本的,是因為前者安全性的加密和認證都比后者好而把它取代。
在PEAP-MSCHAPV2認證流程中呢,會有一些Server與client的交互,這里面包含了EAP-Respons/Identitye和challenge字符串。在PEAP的保護下,因為它們的認證是在內部TLS隧道里,所以我們很難直接對MSCHAPV2做什么手腳,但是MSCHAPV2爆出了漏洞可被暴力破解。所以我們就可以對它進行fake AP從而取得它們的hash。
如果沒有驗證服務器的TLS證書.那么通過模擬的AP,攻擊者就可以誘騙客戶連接到惡意接入點,并獲得客戶的內部認證。很遺憾,上面已經說過了pki的問題。就這樣,黑客就進入到了你的企業域。具體的攻擊方式呢,就是利用 hostapd-wpe這個工具。它替代了freeradius-wpe.
Github:https://github.com/OpenSecurityResearch/hostapd-wpe
支持EAP的類型:
當我們建立偽AP的同時,會產生兩個相同的SSID。如果我們是指定目標攻擊,而我們我目標已經連上了正常的無線網絡,那我們可以對此SSID進行Deauth攻擊,使其強制斷線重連到我們的Fake AP。
命令: aireplay-ng -0 10 –a <ap mac> -c <my mac> mon0
當目標連接到我們的Fake AP 上時:
這是抓取到的hash。你所有抓取的hash都在 hostapd目錄下的一個名為host-wpe.log的文件內。
當我們抓到這些hash以后,需要破解它,可以用asleap破解密碼。Kali內置了好像。也可以自己去github。
可能有的人覺得,一個暴力破解,關鍵還是要看字典,密碼設置的復雜就沒有關系。但是大家有沒有想過,一個無線架構在radius的企業,我假設它有2000人。2000人中我保守一點估計抓了1000的人hash。難道我連1000/5的概率都沒有么?更何況無線其他攻擊也很多,拿到幾個域賬號根本沒難度。組合攻擊的手法還是不容小覷的。
還有一種認證是EAP—MD5,這個可能現在見不到了,不過應該也有吧,凡事不絕對,遇到了就簡單提一下,它的認證我就不說了,其實也沒什么可說的,沒安全性可言,數據不受ssl保護,只有個MD5,只提供了最低級加密,MD5hash能被字典破掉,而且不支持密鑰生成,所以就根本不適合企業加密。我也不知道這是誰想出來的,可能開發這個加密的時候還沒無線安全呢吧。抓包就能抓出來。
這是一個在連接了EAP-MD5認證的AP。通過抓包我們直接可以看到了它的challenge. 我們把他們通訊的整個過程抓下來。就像WPA/WPA2的握手包一樣。捕獲數據包之后,有一個專門針對EAP-MD5的破解工具叫做:eapmd5Pass。
使用方法也簡單:
eapmd5pass -r <握手包文件名> -w <字典>
Cisco的東西。叫輕量級EAP,特點也是數據不受SSL保護,用的是MS-CHAPV1,也就是我上面說的那個第一個版本。這就更別說了,還不如個WEP,03年就能黑了。
LEAP的升級版,有個受保護的訪問憑證(PAC)在TLS端驗證,說也是有漏洞,但是我對這個加密接觸不是太多,也沒遇到過,可能見識短吧,大家有遇到的可以交流交流,但是估計也沒啥價值。
LEAP的破解方法也是捕獲四次握手,然后暴力破解。具體方法見上面都一個道理。簡單的東西不多說.
針對一些高復雜的密碼呢,我們可以去試試John the Ripper。 也叫JTR,也不錯。支持的算法也多:
https://github.com/magnumripper/JohnTheRipper
在我們針對一個未知的不了解的企業熱點進行滲透時,我們需要事先清楚它是采用什么加密,我們可以通過wireshark過濾一下類型:
也算個小技巧,受用。
順便再貼一個MDK3關于802.1X的攻擊方法。
#!bash
mdk3 mon0 x
0 - EAPOL Start packet flooding #EAPOL格式的報文洪水攻擊
-n <ssid>
-t <bssid> #目標客戶端的mac地址
-w <WPA type>
Set WPA type (1: WPA, 2: WPA2/RSN; default: WPA)
-u <unicast cipher>
Set unicast cipher type (1: TKIP, 2: CCMP; default: TKIP)
-m <multicast cipher>
Set multicast cipher type (1: TKIP, 2: CCMP; default: TKIP)
-s <pps> #速率,默認400
1 - EAPOL Logoff test #注銷認證攻擊
-t <bssid> #目標客戶端的mac地址
-c <bssid> #目標ap的合法客戶端mac
-s <pps> #速率,默認400
MDK3 X 1 -t <目標mac地址> -c <客戶端mac地址>
再推薦個工具吧:3vilTiwnAttacker
老外寫的一款做無線劫持,嗅探為一體的工具。新出的,覺得不錯大家可以試試。
https://github.com/joridos/3vilTiwnAttacker 里面附帶演示視頻
其實呢,我覺得吧,大家如果是真想研究的話呢,不妨去自己下載個FreeRadius去研究下。
買個路由器,一般里面都有設置Radius的選項,沒用的也可以刷個固件。雖說安裝環節有點慢,但是真能學到很多東西,我本來是想把每一步涉及到Radius的設置和配置文件說一下的,無奈學校上網客戶端的限制我安不了路由器,悲催了,以后再說吧。
還有一個關于企業wifi的backdoor,worm的一個思路,我放個pdf大家有興趣的看下:
前些日子我看了一篇文章: http://drops.wooyun.org/wireless/15269?from=timeline&isappinstalled=0
很巧合的是,這個作者是我去年暑假實習時候的同事。ID換了,不過給了微博,微博ID是沒換的。
他在里面提出了關于證書機制的缺陷。確實如此,但是這個東西做起來是個繁瑣的工程。就算解決了這個,也會有別的攻擊可以破壞到無線網絡。不如我們去開發一些策略去全面保護無線網絡。其實我也是近期才想到了一些,我只把簡單的想法說一下,還并沒有什么實體化的東西做出來,有興趣的咱們也可以聊聊。
1.因為無線網絡的特殊性,我們去真正檢測一個攻擊行為是否真實存在時,多少會有一些誤差。簡單例子:
這個客戶端對這個 AP發起了Deauth 攻擊,那我該將它判定為洪水還是捕獲握手包?
因為Deauth包是使其AP斷線重連捕獲數據的。一個是DOS攻擊,一個是密碼威脅。還有就是,我如果輸錯了幾次密碼是不是也會報警?
所以這些都是問題,這個參數很難去設置。我曾經想過去計算他們之間正常差值然后把精確度提到最高,但是還是覺得不夠好,我只能從數據變化和流量方面去做,因為后面它是離線攻擊。
還有,企業問題一般員工建個私人熱點,一旦被攻破,那也是很嚴重的一件事,所以這方面的意識還是要去培養。
2.還有一種就是針對偽AP的這種。
如上圖,我們可以用一些mac地址的策略去識別這些‘fake AP’。
有款工具叫做“Airdrop-ng”它開始是個‘Deauth’工具,但是后來被用于做了IPS。真應了那句話:‘工具是把雙刃劍,看你怎么使用它.’
Airdrop的玩法很多,也能有蜜罐的效果哦。具體可以參照:
https://github.com/aircrack-ng/aircrack-ng/tree/master/scripts/airdrop-ng
功能差不多就是一個黑白名單的機制,根據自己的要求可以寫一些規則。
有個老外寫了個IDS,不過針對個人的地方比較多,但也可以借鑒下。
https://github.com/SYWorks/waidps
這哥們腦洞挺大的,以前寫過一個針對WPA無client的破解腳本。當然了,還是跟條件有關系的東西,但是人家能想到也確實比咱們強,不服也是不行的。
我心里也是有一些針對其他攻擊的規則但不想說了,因為還需要完善,不過我覺得應該挺有用,等真正沒問題的時候再發吧。
說一些數據分析吧,802.11 有好幾個標準,像什么802.11g 802.11n 等等之類的,不同的標準對應著不同的頻道。分析數據肯定是避免不了的,況且無線就是協議的東西。 我就簡單說一下常見的,時常用到的。就算你不分析,起碼遇到了能看懂不是。
802.11數據包有三種類型。
也許有人聽過有個叫beacon包的東西,其實最重要的東西也就是這個,beacon里面包含了一些AP功能、信息網絡名稱、配置、安全信息等等東西。所以MDK3里面也有個模式叫做Beacon flood的模式。
這不是完整的數據,只是其中一部分,它的頭部的‘type’定義為beacon。它是作為一個廣播數據包由wap發送。
這不是全部的,簡單點我們可以看出的信息有:它的頭部給它定義的類型為:Beacon. 設備信息是:Huawei. MAC地址之類的。下面可以看出SSID的名稱。用的802.11B協議。工作11信道。
也可以通過分析得知AP與站點是否加密一致:
先看下 Authentiction數據中的 Authentiction Algorithm:open System(0)數值是否為0 ,則說明并非Shared加密模式,而是Open加密或WPA加密。和下面的Beacon數據中的數值是否為(1)來判定是否啟用加密。AP與STA的認證一致。
當然加密還有別的。只舉一例了。
還有就是關于DOS攻擊的分析,這個更簡單了,DOS攻擊很多,什么beacon flood Authentication DoS Deauthentication/Disassociation 等等。。 就拿Authentication Flood 舉個例子吧。
從type類型和請求可以看出是什么樣的攻擊類型(Authentiction)。
其他類型的攻擊也大體差不多,稍有出入相信大家也能辨別。
還有就是針對于802.11 無線信道和頻率的
信道 | 中心頻率(MHZ) |
---|---|
1 | 2412 |
2 | 2417 |
3 | 2422 |
4 | 2427 |
5 | 2432 |
6 | 2437 |
7 | 2442 |
8 | 2447 |
9 | 2452 |
10 | 2457 |
11 | 2462 |
12 | 2467 |
13 | 2472 |
這就是只顯示10信道的數據。
其實無線數據里面頭疼的也就是它的封包結構,控制幀、管理幀、數據幀。全都弄懂真心不容易。我現在也還在學習中,如果是簡單分析是用不太多這些東西的。我給大家提供一些802.11的type與subtype類型。方便大家對照
還有一些wireshark的過濾參數:
這個不全,老外整理了一篇 集 過濾參數、802.11模型和數據值解釋為一體的pdf:
http://www.willhackforsushi.com/papers/80211_Pocket_Reference_Guide.pdf 我覺得超級牛B,新手看也容易懂。
如果大家想分析指定的AP包的話,可以
我們也可以分析下握手包,下面以Wpa為例,
因為WPA-psk (個人版)在STA和ap建立數據后使用了EAPOL協議處理用戶登錄認證。然后由四次握手組成。支持WPA的AP工作時候呢,如果客戶端里面有Radius服務器的話就用802.1X認證。要沒有就用psk的方式認證。上面是第四次握手中抓到的數據,別的都好懂,這個MIC我說一下,這個值是最后握手成功的一個重點。
在認證過程中,SSID和password使用特定的算法產生這個PSK。 那么客戶端接收到AP發來的信息后也會用這個算法產生PSK。然后這兩部分分別用算法進行認證,最后會提取到一個MIC KEY 。STA和AP的MIC KEY 如果相等,他們就成功,如果不等就失敗。
基本上這些都是一些常用的或者是重點。,但還有好多沒寫到。因為學校的網絡環境不支持太多。如果你正好用到用也可私我,我可以把我知道的全部free。寫的有點驢唇不對馬嘴.因為802.11協議的東西太多太繁瑣.我也有點抓不住重點了.對不住各位了。
再延伸一點知識,關于 802.11 fuzzing 的東西。
現在Fuzzer是很流行的一種挖掘漏洞手段,不管是在web還是其他安全,fuzz現在都很熱,但是無線fuzz以前火過,最近好像沒啥動靜了。資料更是少之又少。簡單提一下。
借老外的一張圖吧:
老外這張圖表示的是一個底層。它可能表示的意思就是一個溢出fuzz。
分別是類型,長度,和信息值,OCtets 定義了長度和Element ID為1(bit) 我們都知道FUZZ的原理就是嘗試協議各種奇葩數據看看協議有沒有考慮到,我可以給它定義一個自定值,如果客戶端沒有處理的話就會出現內核破壞類的漏洞。
所以,在802.11里面最常見的Fuzz就從SSID入手。例如這個,你可以針對它的Bytes自己去設置fuzz
其實跟溢出的解釋差不多吧。其實最初的辦法也就是投放大量的ssid,如果超出了其長度,來實現崩潰。等還有一些其他的CVE,是跟無線驅動程序有關的。
有人開發過一個關于802.11堆棧的fuzz腳本叫wifuzz。
https://github.com/0x90/wifuzz
它利用的Scapy包生成的。所以環境要下載Scapy
先要用airmon-ng把網卡監聽一下。
下面的參數對應著攻擊類型。
#!bash
$ sudo python wifuzz.py -s admin auth
Wed Sep 28 10:38:36 2011 {MAIN} Target SSID: admin; Interface: wlan0; Ping timeout: 60;PCAP directory: /dev/shm; Test mode? False; Fuzzer(s): auth;
Wed Sep 28 10:38:36 2011 {WIFI} Waiting for a beacon from SSID=[admin]
Wed Sep 28 10:38:36 2011 {WIFI} Beacon from SSID=[admin] found (MAC=[00:aa:bb:cc:dd:ee])
Wed Sep 28 10:38:36 2011 {WIFI} Starting fuzz 'auth'
Wed Sep 28 10:38:36 2011 {WIFI} [R00001] Sending packets 1-100
Wed Sep 28 10:38:50 2011 {WIFI} [R00001] Checking if the AP is still up...
Wed Sep 28 10:38:50 2011 {WIFI} Waiting for a beacon from SSID=[admin]
Wed Sep 28 10:38:50 2011 {WIFI} Beacon from SSID=[admin] found (MAC=[00:aa:bb:cc:dd:ee])
Wed Sep 28 10:38:50 2011 {WIFI} [R00002] Sending packets 101-200
Wed Sep 28 10:39:04 2011 {WIFI} [R00002] Checking if the AP is still up...
Wed Sep 28 10:39:04 2011 {WIFI} Waiting for a beacon from SSID=[admin]
Wed Sep 28 10:39:04 2011 {WIFI} Beacon from SSID=[admin] found (MAC=[00:aa:bb:cc:dd:ee])
Wed Sep 28 10:39:04 2011 {WIFI} [R00003] Sending packets 201-300
Wed Sep 28 10:39:18 2011 {WIFI} [R00003] Checking if the AP is still up...
Wed Sep 28 10:39:18 2011 {WIFI} Waiting for a beacon from SSID=[admin]
Wed Sep 28 10:39:19 2011 {WIFI} Beacon from SSID=[admin] found (MAC=[00:aa:bb:cc:dd:ee])
Wed Sep 28 10:39:19 2011 {WIFI} [R00004] Sending packets 301-400
Wed Sep 28 10:39:42 2011 {WIFI} [R00004] recv() timeout exceeded! (packet #325)
Wed Sep 28 10:39:42 2011 {WIFI} [R00004] Checking if the AP is still up...
Wed Sep 28 10:39:42 2011 {WIFI} Waiting for a beacon from SSID=[admin]
Wed Sep 28 10:40:42 2011 {WIFI} [!] The AP does not respond anymore. Latest test-case has been written to '/dev/shm/wifuzz-eK97nb.pcap'
Admin就是SSID名 用的auth的FUzz。到最后的時候發現已經崩潰了
Wed Sep 28 10:40:42 2011 {WIFI} [!] The AP does not respond anymore. Latest test-case has been written to '/dev/shm/wifuzz-eK97nb.pcap'
Wifuzz可以自己進行檢測Bacon frame,會假定目標已經崩潰,然后生成一個pacp來重現崩潰。
其實在Metasploit里面也內置了一些fuzzer的腳本。要想在Metasploit進行fuzz的話,要安裝一個lorcon2模塊。這個模塊是專門用于無線注入的。Google把代碼撤了。如果想自己安的話,環境變量要自己設置.
自己airodump一個STA 的mac。因為是Beacon fuzz,它要制出大量的ssid。
可以看下該頻道的ESSID。 這就證明開始fuzz了。
沒辦法,802.11的fuzz能表示出來的就這么點東西,也許有更難的我沒看到,還有一些是驅動層的東西,但我不太會,也不著重看過。
例如還有個工具,https://github.com/bullo95/WiFi--/tree/master/wifuzzit 這個工具發現了好多如Atheros驅動 CVE:
Cve-2006-6332 其中這是一個遠程代碼執行漏洞,是關于madwifi的802.11的堆棧溢出。
Cve-2009-0952 它錯誤出現在可以在一個無線接入點發送惡意的管理幀。可以攻擊任何未經身份驗證的基于EAP 的WPA/WPA2 WPA2-EAP的無線設備。Netgear 與Atheros芯片都受到了影響。
CVE-2009-0052 這也是一個關于Atheros的無線驅動程序的漏洞,該漏洞可導致用戶拒絕服務(設備重啟或直接掛掉)
其實真的還有很多東西沒寫出來。就在腦子里,也真是不知道咋寫出來了。可能是太懶了,人一呆著就容易有惰性啊。有想交流的可以一起交流。
也非常感謝在 unicorn Team的兩個月,時隔一年整,短短兩個月我看到了自己的不足,也讓我更清晰了方向,回來努力補過。感謝 Ir0smith Sweeper 在當時對我的各種方面的幫助。我至今還記得我去的第一天,Sweeper讓我看了Vivek Ramachandran的視頻,當時沒放心上,后來看了之后也挺困難的,印度方言,很是雷我。不過看了好幾遍連續,看懂之后受益匪淺。再次感謝幫助過我的人。