神州數碼802.1x認證協議簡析

 
神州數碼802.1x認證協議簡析
一.   前言
本次神州數碼802.1x認證協議的分析有這麼幾個前提:
1.       使用神州數碼客戶端進行上網認證。
2.       協議選擇的是神州數碼私有報文。
3.       使用的靜態IP地址而不是DHCP分配。
4.       不涉及計時計費。
5.       分析的版本基於3.3/3.4
 
二.基本認證流程
 
1.     客戶端向認證系統發送EAPOL-Start數據包發起認證。
2.     認證系統向客戶端發送EAP-Request/Identity數據包,請求客戶端發送身份標示。
3.     客戶端接收到認證系統發來的EAP-Request/Identity後,發送包含身份標示信息(用戶名)的EAP-Response-Identity數據包。
4.     認證系統接收到客戶端發送的EAP-Response/Identity後,查詢用戶名,如果驗證成功,繼續,否則返回錯誤信息,客戶端執行步驟11。
5.     認證系統向客戶端發送EAP-Request/Md5-Challenge數據包,數據包中包含客戶端進行Md5加密時所需的16字節Md5-Challenge。
6.     客戶端接收到認證系統發送的EAP-Request/Md5-Challenge,從中取出所需要的Md5-Challenge字段和Id字段,結合密碼,運算得到16字節的加密結果,用於合成EAP-Response/Md5-Challenge數據包。合成完畢,發送數據包。
7.     認證系統接收到客戶端發送的EAP-Response/Md5-Challenge,進行驗證,如果通過,則繼續,否則返回錯誤信息,執行步驟11。
8.     認證系統向客戶端發送EAP-Success數據包,同時將Port狀態置爲Enable,客戶端所在的電腦就此得到上網權限。
9.     認證系統每隔一段時間主動向客戶端發送EAP-Keepalive數據包。
10. 客戶端接收到EAP-Keepalive數據包後(與EAP-Request/Identity數據包內容相同),客戶端執行步驟3,完成連接的保持工作。重複步驟10。
11. 接收到錯誤信息,發送EAP-Logoff數據包,中止認證。
 
三.協議具體分析
神州數碼802.1x認證協議並不是完全的私有協議,只是在標準協議的基礎上進行了自己的擴展,爲了敘述方便,對於標準802.1x的描述,附上一部分關於標準802.1x,EAP,EAPOL的相關說明,不再贅述:
 
1.以太網協議幀頭描述:
destination
6字節
目的MAC地址
source
6字節
源MAC地址
type
2字節
協議類型,802.1x的類型是88 8E
神州數碼客戶端在發送認證包的時候,無論是否可以得到認證服務器的MAC地址,都採用802.1x協議分配的組播地址01-80-c2-00-00-03作爲目的MAC地址。
 
 
 
4.神州數碼私有報文部分的分析
 
在標準802.1x認證協議的基礎上,神州數碼進行了擴展。具體表現如下:
A.EAP-Response-Identity數據包開始,客戶端發送的數據包中均包含一段45字節的私有數據。與標準數據之間用一個值爲0的字節進行分隔【當該字節爲01時表示是DHCP認證模式……後面的IP地址就是網卡信息中那個非法IP,子網掩碼是FF FF 00 00,後面八個字節全零,這種認證方式目前還沒有好好研究】。該數據段的意義如下:
 
IpAdress
4字節
Ip地址
SubnetMasks
4字節
子網掩碼
GateWay
4字節
網關
Dns
4字節
Dns地址
UsernameMd5
16字節
用戶名的Md5
VerInfor
13字節
版本信息的ASCII碼
例如,我見到的最新的版本號是:0x33 ,0x2e ,0x34 ,0x2e ,0x32 ,0x30 ,0x30 ,0x36 ,0x2e ,0x31 ,0x30 ,0x32 ,0x37
相應的文本就是:
3       .   4       .   2       0   0       6   .       1   0       2    7
 
 
 
B.EAP-Response/Md5-Challenge數據包中加密信息的形成
EAP-Response/Md5-Challenge數據包中,有16字節的數據是通過md5加密形成的,該過程用C語言描述如下:
            //讀取md5 challenge,存儲於m_digiMd5中
            memmove(m_digiMd5,pkt_data+0x18,16);
           
            //計算md5值
            MD5_CTX md5;
            md5.MD5Update(pkt_data+0x13,1);
            md5.MD5Update(m_password,strlen((const char*)m_password));
            md5.MD5Update(m_digiMd5,16);
            md5.MD5Final(m_digiMd5);
            //結果保留在m_digiMd5中
 
其中pkt_data是EAP-Request/Md5-Challenge數據包的起始位置,pkt_data+0x18起的16個字節是Md5-Challenge,pkt_data+0x13起的一個字節是Id,也就是對Id+密碼+Md5-Challenge進行md5運算。
 
 
C.神州數碼反饋信息的解析(目前只瞭解了少量信息的格式)
1.認證成功時的信息格式:
認證成功時,認證系統有可能返回相關信息,該信息的格式目前不是很清楚,只知道有時在pkt_data[0x82]處出現0x12標誌,有時在pkt_data[0x99]處出現該標誌,所以現在程序中的考慮是這樣的:
if(pkt_data[0x82]==0x12)
{
     char *msg=(char*)malloc(pkt_data[0x83]-2+1);
     memmove(msg,pkt_data+0x84,pkt_data[0x83]-2);
     msg[pkt_data[0x83]-2]=0;
     printf(" 系統消息:/n[%s]/n",msg);
    free(msg);
}
else
{
     if(pkt_data[0x99]==0x12)
     {
         char *msg=(char*)malloc(pkt_data[0x9A]-2+1);
         memmove(msg,pkt_data+0x9B,pkt_data[0x9A]-2);
         msg[pkt_data[0x9A]-2]=0;
         printf(" 系統消息:/n[%s]/n",msg);
         free(msg);
     }
}
標誌位0x12後面的那一個字節就是附加信息的長度,但是這個長度是包含標誌位以及長度自身的,所以信息真正的長度應該是pkt_data[0x83]-2或者pkt_data[0x9A]-2。因爲協議使用一個字節來表示信息長度,所以信息的最大有效長度爲254字節。信息使用GB2312編碼,所以在linux下直接顯示的話,可能會出現問題。
2.失敗信息的格式。
在神州數碼的失敗信息,已經瞭解的有兩個:用戶名驗證失敗,用戶名或密碼錯誤。與成功的消息一樣,都是在找到一個標誌位0x12後,讀取接下來一個字節中存儲的長度信息,從而獲取消息字符串。
在用戶名驗證失敗的消息中,標誌位位於pkt_data[0x2A]
在用戶名或密碼錯誤消息中,標誌位位於pkt_data[0x42]
 
 
目前爲止對神州數碼802.1x認證協議的瞭解就是這些。
 
 
 
 
 
附加材料:
1EAP協議
 
802.1x協議在實現整個認證的過程中,其三個關鍵部分(客戶端、認證系統、認證服務器)之間是通過不同的通信協議進行交互的,其中認證系統和認證服務器之間是EAP報文。
EAP幀結構如下表所示:
字段
字節
Code
1
Identifier
2
Length
3-4
Data
5-N
 
 
EAP幀格式中各字段含義如下:
 
字段
佔用字節數
描述
Code
1個字節
表示EAP幀四種類型:1.Request;2.Response
3.Success;4.Failure
Identifier
1個字節
用於匹配Request和Response。Identifier的值和系統端口一起單獨標識一個認證過程
Length
2個字節
表示EAP幀的總長度
Data
0或更多字節
表示EAP數據
其中Code的取值如下:
1       Request
2        Response
3        Success
4        Failure
 
 
802.1x協議定義了一種報文封裝格式,這種報文稱爲EAPoL(EAP over LANs局域網上的擴展認證協議)報文,主要用於在客戶端和認證系統之間傳送EAP協議報文,以允許EAP協議報文在LAN上傳送。
標準EAPoL幀結構如下表所示:
字段
字節
PAE Ethernet Type
1-2
Protocol Version
3
Packet Type
4
Packet Body Length
5-6
Packet Body
7-N
 
 
 
EAPoL幀格式中各字段含義如下:
 
字段
佔用字節
描述
PAE Ethernet Type
2個字節
表示協議類型,802.1x分配的協議類型爲888E
Protocol Version
1個字節
表示EAPOL 幀的發送方所支持的協議版本號。本規範使用值爲0000 0001
Packet Type
1個字節
表示傳送的幀類型,如下幾種幀類型:
a) EAP-Packet. 值爲 0000 0000
b)EAPOL-Start.值爲0000 0001
b) EAPOL-Logoff. 值爲0000 0010
Packet Body Length
2個字節
表示Packet Body的長度
Packet Body
0/多字節
如果Packet Type爲EAP-Packet,取相應值。對於其他幀類型,該值爲空。
 
EAPOL幀在二層傳送時,必須要有目標MAC地址,當客戶端和認證系統彼此之間不知道發送的目標時,其目標MAC地址使用由802.1x協議分配的組播地址01-80-c2-00-00-03。
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章