802.11 MAC層幀解析
注2:本文屬於個人理解,存在錯誤望見諒和指正。
1.MAC幀格式
對應的資料結構如下:
- typedefstruct _rtw_ieee80211_hdr_qos {
- __le16 frame_ctl;
- __le16 duration_id;
- u8 addr1[ETH_ALEN];
- u8 addr2[ETH_ALEN];
- u8 addr3[ETH_ALEN];
- u16 seq_ctl;
- u8 addr4[ETH_ALEN];
- } rtw_ieee80211_hdr_qos,*prtw_ieee80211_hdr_qos;
1.1 地址格式
addr1:接收地址(所有包都包含它)
addr2:傳輸地址(除ACK和CTS包外的其他包都包含它)
addr3:只用於管理包和資料包。
addr4:無線分佈系統模式下,FROM DS和TO DS都被置位時使用。
下圖中,佔兩個位元組的Frame control ,其To DS和From Ds決定了這四個地址的使用。
Frame control對應的地址如下: (Little ENDIAN)
- typedefstruct _frame_contrl{
- unsignedchar version:2;
- unsignedchar type:2;//00 管理幀 01控制幀 10資料幀 11保留
- unsigned
- //0100 0101 probe requset/response; 0110-0111 reserved
- //1000 Beacon; 1001 Announcement traffic indication message(ATIM)
- //1010 Disassociation 1011 Authentication
- //1100 Deauthentication 1101-1111 Reserved
- //unsigned char ToDS:1;
- unsignedcharFromDS:2;/* 來自DS*/
- unsignedcharMoreFrag:1;/*更多分段*/
- unsignedcharRetry:1;/*重傳*/
- unsignedcharPwrMgt:1;/*電源管理*/
- unsignedcharMoreData:1;/*更多資料*/
- unsignedchar WEP:1;/*受保護幀*/
- unsignedcharRsvd:1;/*順序*/
- }frame_contrl,*pfram_contrl;
地址對應表如下:
DS是分散式系統的簡稱,我們用它以區分不同型別幀中關於地址的解析方式。
To DS=0,From DS=0:表示Station之間的AD Hoc類似的通訊,或者控制偵、管理偵。
To DS=0,From DS=1:Station接收的偵。
To DS=1,From DS = 0:Station傳送的偵。
To DS=1,From DS = 1:無線橋接器上的資料偵。
各地址的解釋:
SRC:源地址(SA),和乙太網中的一樣,就是發幀的最初地址,在乙太網和wifi中幀格式轉換的時候,互相可以直接複製。
DST:目的地址(DA),和乙太網中的一樣,就是最終接受資料幀的地址,在乙太網和wifi中幀格式轉換的時候,互相可以直接複製。
TX:也就是Transmiter(TA),表示無線網路中目前實際傳送幀者的地址(可能是最初發幀的人,也可能是轉發時候的路由)。
RX:也就是Receiver(RA),表示無線網路中,目前實際接收幀者的地址(可能是最終的接收者,也可能是接收幀以便轉發給接收者的ap)。
注:無線網路中的Station想要通訊,必須經過AP來進行“轉發”。其實,Tx和Rx是無線網路中的發和收,也就是Radio;而Src和Dst是真正的傳送源和接收者
2 幀型別
幀型別由frame control的type兩位決定,目前有三種類型的幀:
00,管理幀。IEEE80211_TYPE_MGMT 用於執行管理操作,如關聯、身份驗證,掃描等。
01,控制幀。IEEE80211_TYPE_CTL 通常與資料包相關。如:PS-poll包用於從AP緩衝區取回資料包;另一個例子,STA若想資料傳輸,首先會發送RTS的控制資料包,如果介質空閒,目標客戶端將發回一個名為允許傳送(CTS)的控制資料包。
10,資料幀。IEEE80211_TYPE_DATA 原始資料包。注:空資料包是特殊的資料幀,其用於電源管理。
11,保留。
2.1 SubType
2.1.1 管理幀 type 00
下表為管理幀的subType對應的型別(即type為00時,subType的取值)
Type | SubType | FrameType |
00 |
0000 |
Association request (連線請求) |
00 |
0001 |
Association response (連線響應) |
00 |
0010 |
Reassociation request(重連線請求) |
00 |
0011 |
Reassociation response(重連線聯響應) |
00 |
0100 |
Probe request(探測請求) |
00 |
0101 |
Probe response(探測響應) |
00 |
1000 |
Beacon(信標,被動掃描時AP 發出,notify) |
00 |
1001 |
ATIM(通知傳輸指示訊息) |
00 |
1010 |
Disassociation(解除連線,notify) |
00 |
1011 |
Authentication(身份驗證) |
00 |
1100 |
Deauthentication(解除認證,notify) |
00 |
1101~1111 |
Reserved(保留,未使用) |
2.1.1.1(Beacon(信標)幀) subtype 1000
抓包顯示的結果:
由於Beacon是廣播包,因此DA為FF:FF:FF:FF:FF:FF。
作用:向STA廣播AP的存在。也就是我們平時能夠搜到AP的原因,其包含了AP的相關資訊。
2.1.1.2 (Probe Request(探測請求)幀) subtype 0100
抓包顯示的結果:
作用:STA廣播發出,與AP建立關聯的必然步驟,後面會具體說明。
2.1.1.3 (Probe Response(探測響應)幀) subtype 0101
作用:STA請求探測幀後,AP的相對應的迴應幀。
2.1.1.4 (ATIM幀) subtype 1001
2.1.1.5 (Disassociation(解除關聯)與Deauthentication(解除認證)幀) subtype 1010
2.1.1.6
(Association Request(關聯請求)幀) subtype 0000
2.1.1.7 (Reassociation Request(重新關聯請求)幀) subtype 0010
2.1.1.8 (Authentication(身份認證)幀) subtype 1011
2.1.2 資料幀 type 10
Type | Subtype | Frametype |
10 | 0000 |
Data(資料) |
10 |
0001 |
Data+CF-ACK |
10 |
0010 |
Data+CF-Poll |
10 |
0011 |
Data+CF-ACK+CF-Poll |
10 |
0100 |
Null data(無資料:未傳送資料) |
10 |
0101 |
CF-ACK(未傳送資料) |
10 |
0110 |
CF-Poll(未傳送資料) |
10 |
0111 |
Data+CF-ACK+CF-Poll |
10 |
1000 |
Qos Data |
10 |
1001 |
Qos Data + CF-ACK |
10 |
1010 |
Qos Data + CF-Poll |
10 |
1011 |
Qos Data + CF-ACK+ CF-Poll |
10 |
1100 |
QoS Null(未傳送資料) |
10 |
1101 |
QoS CF-ACK(未傳送資料) |
10 |
1110 |
QoS CF-Poll(未傳送資料) |
10 |
1111 |
QoS CF-ACK+ CF-Poll(未傳送資料) |
2.1.2.1 IBSS subtype (0000 Data,0100NULL)
2.1.2.2 From AP subtype如圖所示
2.1.2.3 To AP 幀
2.1.2.4 WDS幀 subtype null
2.1.3 控制幀 type 01
主要用於資料傳輸前的控制,相關過程請看4.0 RTS/CTS。
Type | Subtype | Frametype |
01 | 1010 |
Power Save(PS)- Poll(省電-輪詢) |
01 |
1011 |
RTS(請求傳送,即: Request To Send ,預約通道,幀長20位元組) |
01 |
1100 |
CTS(清除傳送,即:Clear To Send ,同意預約,幀長14位元組) |
01 |
1101 |
ACK(確認) |
01 |
1110 |
CF-End(無競爭週期結束) |
01 |
1111 |
CF-End(無競爭週期結束)+CF-ACK(無競爭週期確認) |
2.1.3.1 RTS幀 subtype 1011
2.1.3.2 CTS幀 subtype 1100
2.1.3.3 ACK幀 subtype 1101
2.1.3.4 PS-Poll幀 subtype 1010
作用:當sta從省電模式中甦醒,便傳送一個PS-poll給基站。
3. Radiotap Header(monitor資訊)
在monitor模式時,核心在MAC幀前面提供額外的資訊。稱為Radiotap Header,其包含的資訊有MAC時間戳,SSI訊號強度,頻道頻率等。
對應的資料結構如下:
- typedefstruct _ieee80211_radiotap_header {
- u8 it_version;/* Version 0. Only increases
- * for drastic changes,
- * introduction of compatible
- * new fields does not count.
- */
- u8 it_pad;
- __le16 it_len;/* length of the whole
- * header in bytes, including
- * it_version, it_pad,
- * it_len, and data fields.
- */
- __le32 it_present;/* A bitmap telling which
- * fields are present. Set bit 31
- * (0x80000000) to extend the
- * bitmap by another 32 bits.
- * Additional extensions are made
- * by setting bit 31.
- */
- }ieee80211_radiotap_header,*pieee80211_radiotap_header;
這裡的it_len表明了radiotap_header的長度,按上面抓到的包,這裡的值為26。
因此,在monitor模式得到的RAW包,我們首先要偏移it_len個位元組,以此得到MAC頭。
4. RTS/CTS 幀 (資料傳送原子性)
這兩個幀出現的原因是 無線收發器(STA)通常無法同時收發資料。使用這兩個幀可以讓STA處於收或髮狀態。
這樣比較好理解,正是因為如此,當STA開始傳送RTS,說明STA發資料;AP開始傳送RTS,說明RTS接收資料。
當其他STA收到RTS時,將延後資料包的傳送。而具體延遲多久,由正在傳輸的MAC頭中的持續時間決定(Duration ID)。如:
RTS(Request-to-Send):請求傳送資料。
CTS(Clear-to-Send):清空傳送區域。
兩個幀的過程如圖:
①為 STA ②為AP
抓的兩個包來看下,下面是STA作為請求方
下面是STA作為接收方:
上圖的223.252.199.6(00:36:76:54:b4:a2)是ap,172.21.11.2(a4:d1:d2:60:bb:0d)是STA,其Qos資料資料如下:
RTS和CTS幀會延長幀傳輸過程,RTS,CTS,資料幀,以及ACK視為同一原子操作的一部分。
使用者可以通過調整RTS閾值,來控制RTS/CTS交換過程。只要大於此閾值,RTS/CTS交換過程就會進行,小於該閾值就會直接傳送幀。
對應的SOCK欄位如下:
- #define SIOCSIWRTS 0x8B22/* set RTS/CTS threshold (bytes) */
- #define SIOCGIWRTS 0x8B23/* get RTS/CTS threshold (bytes) */
5. WIFI建立關聯過程
建立連線認證的過程主要由管理幀負責。
序號 | SubType | 說明 |
---|---|---|
1 | 1000 | Beacon,STA接受AP信標幀,感知到AP,獲取SSID及AP引數 |
2 | 0100 | STA主動傳送Probe探測請求 |
3 | 0101 | AP應答STA Prob Response |
4 | 1011 | STA傳送Authentication請求認證 |
5 | AP應答Authentication請求,指示STA認證成功或失敗 | |
6 | 0000 | STA傳送Association請求 |
7 | 0001 | AP應答Association Response |
以上是連線過程,當需要斷開連線時,STA傳送Disassociation
5.1 wifi攻擊原理
從連線的過程我們可以發現,我們可以採取強制斷開連線,使得STA重新進行連線。以此獲得認證資料包。
因此,可以利用Disassociation包或Deanthentication包實現。
6. 加密演算法
安全認證主要由802.11i規範。以下是幾種加密演算法。具體的連線過程將在下篇中說明。
本文參考《802.11無線網路 權威指南》