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功能的手机(仅仅测试过苹果和小米手机)。