A. WLAN的MAC地址保衛戰
信息社會大數據時代下,日日匆忙行走在城市中的你可能沒有意識到,有些信息對你來說彌足珍貴,一旦為人所獲取,如赤身於人群中,比如說:身份證號碼,手機號碼,再比如說,本文的主角:WLAN無線網卡的MAC地址。泄露了,只能安慰自己,反正大多數人一起,大家都裸奔吧。
身份證和手機號碼作為個人隱私關鍵信息,這是地球人大約都知道的,這個無線網卡的MAC地址是什麼鬼?這里不做MAC地址的科普,只提一下:作為全球范圍內基本可以唯一關聯到你身邊最危險的設備--手機的信息欄位,無線網卡的MAC地址的地位肯定引人注目的。 愛我們(姑且算是「愛」吧)的蘋果、Android、windows操作系統想方設法保護它,黑產/灰產和各種業務的大數據採集行業絞盡腦汁竊取它,我們無知快樂著(果然還是不能看得太透徹呀!)
胡扯兩段,直接進入一個實驗:小米的手機,連接一個SSID為test_2.4G的無線網路,在此無線網路信號覆蓋范圍的另外一台第三方筆記本電腦,能否獲得小米手機的WLAN無線網卡的MAC地址?
答案當然是能的,實現偵聽無線WIFI的網路協議包(802.11協議),只要配置無線網卡為監聽模式(Monitor mode)。一般情況下無線網卡和無線接入點(Wireless Access Point,WAP)建立連接後,處在託管模式(Managed mode)下,無線網卡只接受從 WAP 發給自己的數據報文。如果把無線網卡設置成監聽模式(Monitor mode),無線網卡可以監聽空氣中所有的無線通信包(802.11協議的原始報文),使用諸如 Wireshark 等的軟體捕獲數據報文進行分析。
下面的實驗的過程
WIFI無線網路環境,使用TPLINK的無線路由器,配置test_2.4G的無線網路:
連接小米手機到TPLINK無線路由器,使用Android的調試工具ADB連接到小米的手機上,由於手機是非ROOT的手機,從ifconfig命令中不能獲取手機的無線網卡的MAC地址(這個信息是受保護的信息),獲取無線網卡的IP地址:192.168.1.102。
點擊TPLINK的管理界面上的的ARP列表,獲取小米手機的無線網卡的MAC地址。
嘗試從一台不接入任何一個WIFI AP的筆記本上進行捕獲小米手機的WIFI通信過程。在一台MAC筆記本上直接啟動802.11WIFI協議的抓包,將WIFI網路介面配置為Monitor的模式,抓取802.11WIFI協議的原始包。找到test_2.4G的MAC地址,設置包過濾,馬上可以看到test_2.4G的Beacon廣播的數據幀:
關閉小米手機的WIFI連接,然後再啟動連接test_2.4G,准確抓到了小米手機發出的Probe Request包,該數據包包含了小米手機WLAN介面的MAC地址,可以看到,和上文里從TPLINK管理界面上看到的MAC地址是一致的。由於真實的MAC地址攜帶了廠家的信息,在wireshark的抓包中直接看到MAC地址解釋成可讀的硬體廠商名:
當然,不僅僅是Probe Request包包含小米無線網口口的MAC地址,Authentication等其他通信的相關包都帶有無線網卡的MAC地址。
Probe Request引人注目的原因是:它是手機在真正的WIFI連接之前主動掃描時發出的包,在人主動發起手機上的WIFI連接之前,Probe Request就攜帶這MAC地址已經發送出來。
下面是關於802.11的Probe Request / Probe Response 請求的說明
探測請求(wlan.fc.type_subtype == 0x04)和探測響應(wlan.fc.type_subtype == 0x05)
Probe request由STA(這里是手機)發出,用於探測周圍的BSS(這里理解成AP)。如果指定了SSID,則只有SSID與之一致的BSS(准確來說是BSS內的AP)會通過Probe Response進行響應;如果未指定,則所有BSS都會進行響應。
在實施對Probe Request保護之前,這個特性這幾年來被用作用戶定位和跟蹤,商場街道等場所的人流人員識別,有一類業務叫做WIFI探針的數據採集開始繁榮,甚至利用無線網卡的MAC地址與網路上已經泄露的黑產/灰產數據進行撞庫,以掌握更多個人的隱私信息。於是引起了人們對個人隱私的的擔憂。
蘋果公司第一個提出了使用隨機MAC地址進行WIFI掃描,規避手機掃描狀態下真實MAC地址的泄露。當手機打開WIFI,但沒有連接任何WLAN AP的時候,手機發出的主動掃描的Probe request使用隨機的MAC地址。隨機MAC地址Universal/Local Bit位為1(該位為0才是全球唯一地址,為1表示是本地管理地址),Unicast/Multicast 位為0。
例如:ca:ad:c6:50:97:d4,f6:8a:be:70:46:38的Universal/Local Bit都為1,是隨機的MAC地址。
掃描狀態的隨機MAC這種技術,保護了處在WIFI掃描狀態(主要是手機的主動掃描AP)的手機,避免泄露WLAN介面的MAC地址, 一旦進入真正的通信狀態,802.11通信的數據包中將攜帶明文的真正的MAC地址。 這裡面有兩個概念,一個是WIFI掃描狀態下的虛擬隨機MAC地址,一個是真正進入通信狀態下使用的MAC地址。上面實驗抓的是手機已經連接上TPLINK的AP,故抓到的是真實的MAC地址。
舉個例子,某個購物商場,商場大門口裝了個隱私收集的WIFI探針AP,如果用戶拿著一個開了WIFI的手機,手機自動掃描周圍的AP,廣播Probe Request報文,如果沒有隨機MAC地址保護,探針AP可以直接從Probe Request包獲取用戶的WLAN的MAC地址。
獲取了用戶手機的MAC地址,可以做的事情很多,為人所詬病的是用戶隱私分析。如果用戶的MAC地址連同其他信息一起泄露到網上,例如(MAC地址、姓名、性別、購物記錄等),那可以直接使用MAC地址進行關聯出用戶的其他信息,找出當前進入商場的用戶是誰。
有一個問題來了,既然真正WIFI通信狀態下使用真實的MAC地址,這個真實的MAC地址可以被信號范圍內的任何一個第三方無線網卡捕獲,那這個MAC地址還是能被作用戶被定位和跟蹤么?這個問題上,windows 10對無線網路網卡的MAC地址進行了進一步的保護。提供了通信狀態下的隨機MAC地址,比如說可以有兩個選擇:單一一次的無線網路連接使用同一個隨機MAC地址,或者配置WIFI網路連接MAC地址一天隨機變化一次。
測試一下,windows 10對無線網卡MAC地址的保護:
對test_2.4G的無線網路斷開並選擇「忘記」,此時需重新輸入密碼登陸WIFI,MAC地址已經修改,得到了新的MAC地址,這個MAC地址的Universal/Local Bit位為為1(9A的二進制位 1001 1010)Universal/Local Bit為右數第二位
再測試一次:對test_2.4G無線網路斷開並選擇「忘記」,此時重新輸入密碼登陸WIFI,MAC地址已經修改,得到了新的MAC地址,這個MAC地址的Universal/Local Bit位為為1(CA的二進制位 1100 1010)Universal/Local Bit為右數第二位
最後一個問題:目前的狀態下,要保護自己手機的WLAN的MAC地址,怎麼做最安全呢?如果出門不需要用WIFI上網,則關閉WIFI功能吧;如果確實要用WFI上網,盡量升級和選擇有掃描狀態下隨機MAC功能的手機(僅僅測試過蘋果和小米手機)。