標籤:
這篇文章基於《Wi-Fi Simple Configuration Technical Specification Version 2.0.5》文檔, 更詳細的內容請直接參考文檔,這裡只將自己的想法做一些簡單的記錄。
一、WSC的三種實現
WSC(wifi simple configuration),一看這名字就知道這個協議是用來偷懶用的,所以我將它翻譯為“快速接入無線網”協議,這個協議主要包括三種快速串連方式:
1. WPS: 看這篇文章的人,應該會知道wps是幹嘛用的,但是相信也有很多人不瞭解,因為周邊的朋友從來都問wifi密碼是多少,不會問wps按鈕在哪。但是老外對這個功能比較喜愛,他們把密碼設個幾十位加特殊字元,連自己都不記得了,更不要說告訴你了,所以wps成瞭解決這個問題的很好選擇。有線之所以比無線跟安全,其中一個原因是我們不能輕易的將一根網線插到他的router上去,但是卻可以通過無線輕易的搜到這個router的訊號,通過不同的手段破解。但是將router設個幾十位的ccmp加密,我想應該不會有人想去破解它了。
WPS主要包括兩種快速接入的方法:PIN (personal identifiy number) and PBC (push button configuration)。
ROUTER PIN 是一組序號,它寫在router裡面,一般可以從router的標籤上可以看到,它是"external registrar"的驗證模式,僅需路由器的PIN,此模式的設計存在問題允許對PIN進行暴力猜測攻擊。當PIN驗證失敗時訪問存取點會發送EAP-NACK訊息回用戶端。根據發送回的EAP-NACK訊息攻擊者可判斷PIN的前一半是否正確,此外,PIN的最後一個數字也是已知的,因為它是一個PIN的校正。這種設計大大降低了暴力破解PIN的嘗試次數,嘗試次數從10的8次方到10的4次方 +10的3次方之間,共11000次嘗試。根據報告一些無線路由器沒有對暴力破解嘗試進行任何鎖操作策略,這就大大降少了成功進行暴力破解攻擊的時間。也有報告一些路由器會因為暴力破解嘗試產生拒絕服務條件,需要重新啟動。對於這種問題,router一般會對pin_lock_down的數量進行限制,如果是5,那麼驗證5次後會鎖住,不在讓PIN。
CLIENT PIN是無線用戶端隨機產生的PIN,在串連router的時候,將它輸入router裡面,實現驗證串連,這種方式會比router pin會安全些。
PBC就是按下WPS按鈕後,router會開始廣播帶有WCS IE的beacon包,當wireless client收到這個資訊以後,表示在這周圍有發現可使用WSP串連的AP,然後就會發送request進行關聯,這個關聯並不是真正的串連,只是為了讓完成8路wps認證,以擷取router的認證資訊,包括ssid,psk,encryption等;擷取到這些資訊以後,斷開與router的關聯,然後用這些資訊實現RSNA(正常串連的4路握手過程)。
2. P2P(peer-to-peer):這個協議可以實現兩個sta之間直接互聯,是不是想到了藍芽功能?沒錯,它就是可以像藍芽功能那樣,將兩個裝置之間串連起來快速的傳輸檔案,而且穩定又快。但是藍芽的省電是direct wifi的硬傷,如果用p2p聽歌或打電話,我想簡直有點耗電過頭了,但是用藍芽耳機來完成這些功能實在是划算。除了耗電這一點,我想direct wifi幾乎可以完成藍芽所有的事了,我買了個藍芽音箱,隔個房間音質就變差了,但是使用direct wifi,去一樓也沒事,如果這個協議成熟了,應該可以節省好多網線吧。
3. NFC(非接觸式射頻識別):這個協議允許你的無線用戶端只要刷一下router就可以上網了,是不是更方便了呢?就像超市刷條碼一樣。如果哪一天,你進入一家餐館,你只要刷一下手機,就會把你所有預定好的菜都上好,而且會自動幫忙連上這家的無線網路,會不會覺得很貼心呢?想想還是挺美的。
二、基本概念
Registrar: An entity with the authority to issue and revoke Domain Credentials. A Registrar may be integrated into an AP, or it may be separate from the AP. A Registrar may not have WLAN capability. A given Domain may have multiple Registrars.一個發放和撤銷認證的實體,它可能整合在外部AP上,也可能和AP相互獨立,這個實體可能沒有wlan特性,而且一個指定的域裡面也有可能有多個registrars。簡直不是人話,說白了,它就是一個server,讓要評鑑真身的太監們來這裡報道,所以下面叫它"認證server", enrollee叫“接入者”
Enrollee: A Device seeking to join a WLAN Domain. Once an Enrollee obtains a valid credential, it becomes a Member.
Stand-Alone External Registrar (SAER): An External Registrar that is not embedded in a wireless STA. For example, may be embedded in an Ethernet connected device, or may be software installed on any networking device.
WSC IE:WSC information element,這個欄位主要在beacon包,probe requests and probe responses裡面,以表明是WSC串連,從這些包的IE裡面擷取的資訊是沒有加密認證的。
In-band(內帶): Data transfer using the WLAN communication channel, including WLAN multiband devices (e.g. 2.4GHz, 5GHz, and 60GHz).
Out-of-Band(外帶): Data transfer using a communication channel other than the WLAN.
內帶和外帶是兩個比較重要的概念,這主要體現在輸入PIN的時候,如果將無線用戶端的PIN通過頁面或其他方式輸入給router,那麼這叫內帶,因為它傳輸使用的是和無線同一channel;但是如果使用的是NFC的方式,那麼就是外帶了,因為NFC工作在13.56MHz頻道,肯定不是WLAN channel。
我們下面討論的都是內帶方式,包括router pin,client pin,pbc。
三、核心結構
關於WPS的認證結構,文檔上是這樣畫的:
關於這個圖,有點像portal的功能,也有點想802.1x協議的實現過程,不管是哪一種,對於使用者來說,配置起來都有些難度。
這種結構需要至少三個裝置,enrollee用來作用戶端,AP用來做存取點,registrar用來做證明伺服器:
Enrollee的角色類似於supplicant,它向Registrar發起註冊請求。
Registrar用於檢查Enrollee的合法性。另外,Registrar還能對AP進行配置。
AP也需要註冊到Registar中。所以,從Registrar角度來看,AP也是Enrollee。
AP和Registrar以及Enrollee三者互動,Enrollee從Registrar那擷取AP的安全配置資訊,然後Enrollee利用該資訊加入AP提供的無線網路。
注意,這三個組件只是邏輯上的概念,這種結構叫:AP With an External Registrar
在具體實現時,AP和Registrar可以由同一個實體實現,也可分別由不同實體來實現。
但是在實際應用中,AP和registrar是由一個裝置實現的,所以我更喜歡這樣畫:
這種結構就是常說的 Standalone AP。
四、In-band Setup Using a Standalone AP/Registrar
其實還有EAP-based Setup of External Registrar和Ethernet-based Setup of External Registrar,這裡就不分析了,下面主要分析常用的 standalone AP的方式
1. AP端的WSC開始工作後,它會廣播帶有WSC IE欄位的beacon包,以聲明AP支援WSC
2. 如果Enrollee收到來自AP的端的beacon包,那麼它會解析beacon包中的 WSC IE,並向AP發送單播Probe Request包;如果Enrollee沒有收到帶有WSC IE的beacon包,那麼它就會去搜尋周圍支援WSC的AP,所以會向周圍發送Probe Request廣播包。
如果Enrollee發現周圍有兩個或者兩個以上的AP在跑WPS,則Enrollee會在發現階段停止繼續執行;同理,如果AP發現有兩個或兩個以上的Enrollee在嘗試建立WPS串連,AP也會停止運行WPS。如果哪一天按下你router的WPS按鈕,發現wps燈快閃了幾下就不閃了,可能就是當時同時有兩個Enrollee在嘗試WPS串連。
3. AP收到帶有 WSC IE的Probe Request請求包以後,就會回複Probe Response包,這個包裡面帶有WSC IE,會告訴Enrollee一些資訊,這些資訊很多,Enrollee會根據這些資訊來決定下一步的動作
4. 這條虛線是一個分水嶺,對於PIN WPS需要在這個步驟輸入PIN,對於PUSH BUTTON則不需要輸入,當然PIN有分AP PIN和client PIN,這個決定了需要在AP端還是在Enrollee端輸入PIN, 這種輸入都是in-band的方式,當然也可以使用out-band的方式輸入資訊,如NFC
5. 當Enrollee擷取到AP端的資訊,並且通過判斷符合接入條件的時候,Enrollee會嘗試去和AP進行認證,向AP發送Auth包
6. AP端知道又是這個小夥子來了,很大度的讓他認證成功,並回複Auth 成功包
7. 然後Enrollee發送Association Request 關聯請求包,並附帶WSC IE 資訊,這個資訊很重要,目的是告訴AP我這邊使用的協議的802.1x WPS 1.0 協議,我們接下來的M1-M8過程也將會遵守這個協議進行互動,你那邊可要準備好哦,如果不能接受這種協議的話,請及時告訴我。
8. 這時,AP端發現,放心啦,你這種協議我是支援的,讓你關聯進來完成下面的資訊互動過程吧! 然後AP就會發送一個Association Response包給Enrollee,完成關聯。
9. 發送EAPOL-Start
10. 在STA和AP雙方開展EAP-WSC流程前,AP需要確定STA的Identity以及使用的身分識別驗證演算法。該過程涉及三次EAP包交換。這三次包交換的內容,首先,AP發送EAP-Request/Identity以確定STA的ID
11. 對於打算使用WSC認證方法的STA來說,它需要在回複的EAP-Response/Identity包中設定Identity為"WFA-SimpleConfig-Enrollee-1-0"。
12. AP確定STA的Identity為"WFA-SimpleConfig-Enrollee-1-0"後,將發送EAP-Request/WSC_Start包以啟動EAP-WSC認證流程。這個流程將涉及M1~M8相關的知識。
13-20. M1到M8的互動過程
看到這些是不是有點不耐煩了?沒關係,先去瞭解一下EAP和EAPOL的知識再來看這個吧,或者直接看看802.1x協議也不錯。802.1x本來是專門針對無線區域網路涉及的,後來卻在PPP上玩的風聲水起。
EAPOL:Extensible Authentication Protocol over LAN, 運行在區域網路內的可拓展認證協議,為什麼是可拓展呢?EAP協議是IEEE 802.1x認證機制的核心,它將實現細節交由附屬的EAP Method協議完成,還記得這張圖嗎,EAP methods有好多種,但是EAP並不在鏈路建立階段指定認證方法,而是把這個過程延遲到“認證”階段,這樣認證方就可以在得到更多的資訊以後再決定使用什麼認證方法。所以WPS是在完成關聯以後才進行的認證協商。後面分析我們會知道,他們協商的結果是使用了EAP-WSC 方式,它是WSC規範利用EAP的擴充功能新定義的一種EAP演算法。
M1:在確認了接下來使用的ID以後,Register會向Enrollee發送WSC_Start報文,告訴Enrollee可以開始資訊認證互動了,這時Enrollee首先會發送M1報文給Register,下面來看看它給Register什麼資訊
UUID-E:代表STA的UUID
MAC Address代表STA的MAC地址
Enrollee Nonce:代表STA產生的一串隨機數,它用於後續的密鑰派生等工作
Public Key:STA和AP的密鑰派生源頭也是PMK,在WSC PIN法中並沒有使用PSK(數字 PIN 碼的作用不是PSK),雙方採用了Diffie-Hellman[6](D-H)金鑰交換演算法。該演算法使得通訊的雙方可以用這個方法確定對稱金鑰。注意,D-H演算法只能用於密鑰的交換,而不能進行訊息的加密和解密。通訊雙方確定要用的密鑰後,要使用其他對稱金鑰操作密碼編譯演算法以加密和解密訊息。Public Key屬性包含了Enrollee的D-H Key值。
Authentication Type Flags和Encryption Type Flags:表示Enrollee支援的身分識別驗證演算法以及密碼編譯演算法類型
Connection Type Flags:代表裝置支援的802.11網路類型,值0x01代表ESS,值0x02代表IBSS
M2:如果register發送給Enrollee的M2包是通過out-of-band的方式發送的,那麼register會將ConfigData在這個包裡面發送出去。當使用out-of-band進行發送M2包時,ConfigData資料的加密方式是可選的,因為使用這種方式的前提是:預先假定這個通訊過程是安全的,而且不會被偷聽。然而,即使使用的是out-of-band的方式發送帶有ConfigData資料的包,也強烈推薦對ConfigData進行KeyWrapKey加密。
在使用in-band的方式配置AP時,如果使用的是外部register,那麼register需要在M7包中擷取AP的當前配置資訊,來決定是需要使用新的配置來覆蓋AP的舊配置,還是保留AP的原有配置。比如router上有一個“keep existing wifi setting”的功能,如果把這個功能關閉,表示AP會進入未配置狀態,當使用WPS進行串連的時候,會根據新的規則或無線用戶端的資訊來配置AP。
·Registrar Nonce:Registrar產生的隨機數。
·Public Key:D-H演算法中,Registrar一方的D-H Key值。
·Authenticator:由HMAC-SHA-256及AuthKey(詳情見下文)演算法得來一個256位的二進位串。注意,Authenticator屬性只包含其中的前64位二進位內容。
提示 AP發送M2之前,會根據Enrollee Nonce、Enrollee MAC以及Registrar Nonce並通過D-H演算法計算一個KDK(Key Derivation Key),KDK密鑰用於其他三種Key派生,這三種Key分別用於加密RP協議中的一些屬性的AuthKey(256位)、加密Nonce和ConfigData(即一些安全配置資訊)的KeyWrapKey(128位)以及派生其他用途Key的EMSK(Extended MasterSession Key)。
M3:
·Registrar Nonce值來源於M2的Registrar Nonce屬性
·E Hash1和E Hash2屬性的計算比較複雜,根據WSC規範,E Hash1和E Hash2的計算過程如下
1)利用AuthKey和數字 PIN 碼利用HMAC演算法分別產生兩個PSK。其中,PSK1由數字 PIN 碼前半部分產生,PSK2由數字 PIN 碼後半部分產生
2)利用AuthKey對兩個新隨機數128 Nonce進行加密,以得到E-S1和E-S2
3)利用HMAC演算法及AuthenKey分別對(E-S1、PSK1、STA的D-H Key和AP的D-H Key)計算得到E Hash1; E Hash2則由E-S2、PSK2、STA的D-H Key和AP的D-H Key計算而來
·Authenticator是STA利用AuthKey(STA收到M2的Registrar Nonce後也將計算一個AuthKey)計算出來的一串二進位位。
M4:
·AP將計算R Hash1和R Hash2。其使用的數字 PIN 碼為使用者通過AP設定介面輸入的數字 PIN 碼。很顯然,如果AP設定了錯誤數字 PIN 碼的話,STA在比較R Hash 1/2和E Hash 1/2時就會發現二者不一致,從而可終止EAP-WSC流程。
·Encrypted Settings為AP利用KeyWrapKey加密R-S1得到的資料。
M5:
M6:
Encryped Settings為AP利用KeyWrapKey加密R-S2而來。
M7:
由M5、M6的內容可知,STA的M7將發送利用KeyWrapKey加密E-S2的資訊給AP以進行驗證,當AP確定M7訊息正確無誤後,它將發送M8訊息,而M8將攜帶至關重要的安全配置資訊.
M8:
安全配置資訊儲存在Encrypted Settings中,它由KeyWrapKey加密。WSC規範規定,當Enrollee為STA時(對Registrar來說,AP也是Enrollee),Encrypted Settings將包含若干屬性,其中最重要的就是Credential屬性集合,該屬性集的內容如下(這裡討論的Enrollee是STA):
當STA收到M8並解密其中的Credential屬性集合後,將得到AP的安全設定資訊。很顯然,如果不使用WSC,使用者需要手動設定這些資訊。使用了WSC後,這些資訊將在M8中由AP發送給STA。
STA擷取到這些資訊以後,一般會儲存起來並修改到wpa_supplicant.conf 檔案中,後面STA就可以用這個設定檔正常的串連AP了
root:~/run# cat wpa_supplicant-ath11.confctrl_interface=/var/run/wpa_supplicant-ath11config_methods=virtual_display virtual_push_button physical_push_buttonwps_cred_processing=2update_config=1uuid=87654321-9abc-def0-1234-001122334450network={ scan_ssid=1 ssid="R8500-5G-2" key_mgmt=WPA-PSK proto=RSN psk="12345678" pairwise=CCMP group=CCMP TKIP}
接下來,STA就可以利用這些資訊加入AP對應的目標無線網路了。
STA處理完M8訊息後,將回複WSC_DONE訊息給AP,表示自己已經成功處理M8訊息。
·AP發送EAP-FAIL以及Deauthentication幀給STA。STA收到該幀後將取消和AP的關聯。
·STA將重新掃描周圍的無線網路。由於STA以及擷取了AP的配置資訊,所以它可以利用這些資訊加入AP所在的無線網路。
hostapd wpa_supplicant madwifi詳細分析(九)——wps原理及實現 一