一.导言
研究结果表明,智能手机的Wi-Fi信号可以用来被动跟踪用户的生活轨迹。通常,人们会关闭设备的Wi-Fi开关来阻止这种跟踪行为(参考链接1和2)。事实上,Wi-Fi跟踪行业的从业者也建议用户使用这种方法来避免被跟踪。
Android系统提供了在设备上启用或禁用Wi-Fi功能的选项。但是,通过此选项禁用Wi-Fi不足以完全阻止设备的Wi-Fi活动。我们做了很多测量实验,最终证实了很多安卓设备都存在这种行为。
第二,Android上的Wi-Fi
2.1 Android Wi-Fi扫描
Android系统支持Wi-Fi协议,提供网络连接功能。与其他支持Wi-Fi的系统一样,Android依靠Wi-Fi服务检测机制来检测配件可用的Wi-Fi接入点。与流行的看法[4]相反,Android和大多数移动系统一样,使用主动服务检测机制来主动搜索附近的接入点。为此,Android设备会主动扫描。在扫描过程中,设备将发送无线探测请求消息,其中包含设备自己的(通常是唯一的)MAC地址信息。接入点将通过探测响应消息通知设备。
如今,Wi-Fi服务发现也用于获取位置信息。Wi-Fi接入点可以由唯一的BSSID(MAC地址)作为地标来识别,以获得位置信息。借助基于Wi-Fi的定位引擎,人们可以在Wi-Fi扫描的过程中得到一个接入点列表,并从这个列表中猜测出具体的地理位置信息。在Android中,系统使用Wi-Fi扫描来启用网络连接功能和定位功能[3]。
然而,该设备不仅使用Wi-Fi扫描来猜测位置信息,而且分析公司现在还使用Wi-Fi探测请求消息来估计商场和商店的用户数量,并记录用户的移动性。事实上,通过计算探测请求消息中不同MAC地址的数量,零售商可以获得商店中智能手机的数量。由于可以在许多地方获得用户设备的MAC地址,所以可以通过跟踪这些MAC地址来跟踪用户的地理位置。
2.2 Android中与Wi-Fi相关的设置
在Android系统中,很多配置选项都会影响设备的Wi-Fi功能。最明显的选择之一是Wi-Fi开关(如图1a所示)。当此开关被激活时,操作系统和应用程序(只要程序有足够的权限)可以使用Wi-Fi接口的所有功能。关闭开关时,Wi-Fi网络连接不可用,应用程序无法获得Wi-Fi扫描的结果。
另一个选项是“总是允许扫描”选项(如图1b所示)。启动此选项后,即使关闭设备的Wi-Fi开关,也可以执行Wi-Fi扫描。在安卓4.4.4版本的三星Galaxy S3和安卓4.3版本的Nexus S中,这个选项的具体路径是“系统-Wi-Fi-高级”。在搭载Android 4.3的联想Moto G 5上,这个选项的具体路径是“设置-位置-扫描”。我们在Android 6.0.1的OnePlus1(OnePlus One)上没有找到这个选项。但是,我们在测验中发现这个选项被激活了,测验结果会显示在下面。
图1 (a)。Android 4.4.4中的Wi-Fi开关选项
图1 (b)。Android 4.4.4中的“总是允许扫描”选项
第三,分析设备产生的Wi-Fi活动
我们测试了五款设备,涉及的安卓系统范围从2.2.1到6.0.1。设备如下:
银河S3:三星银河S3(GT-I9.),安卓4.4.4
HTC wildfire,Android 2.3.7,CyanogenMod 7.2.0
三星Galaxy Spica,安卓2.2.1,CyanogenMod 6.1.1
Nexus S,安卓4.3,CyanogenMod 10.2.1.1
OnePlus One,安卓6.0.1,CyanogenMod 13.1.2
3.1实验方案
我们监控每部智能手机在不同设置和不同活动下产生的Wi-Fi流量。与设备接入点没有关系。为了监控Wi-Fi活动,我们在监控模式下使用Wi-Fi接口来捕获固定信道上的流量。我们从收集的Wi-Fi帧中提取源MAC地址,以识别某个设备生成的流量。事实上,这些设备发送的所有Wi-Fi帧都在报头中包含其MAC地址(这些设备不支持MAC地址随机化)。
我们考虑了以下选项:
Wi-Fi开关:该选项可以控制Wi-Fi是否处于活动状态。
始终允许扫描:当Wi-Fi关闭时,此选项允许设备扫描Wi-Fi。
定位:该选项可以控制定位功能。在某些设备中,此选项分为两个选项:基于GPS的地理位置选项和基于蜂窝数据/Wi-Fi的地理位置选项。我们只考虑后一种情况。
我们测试了以下活动状态,我们认为这些状态可以反映设备的常见用途:
屏幕打开:屏幕亮起,切换设备上的多个面板,并保持这种状态几分钟。
空闲:如果5分钟内没有接触设备,屏幕将自动关闭。
离开空闲状态:按下电源键,使设备离开空闲状态。
谷歌地图:该设备运行谷歌地图。
启动谷歌地图:用户启动谷歌地图。
不相关:当这个事件发生时,它与用户的具体活动没有显著的相关性。
对于每台设备,我们尝试了前面提到的所有选项,然后遍历了上面提到的所有活动状态,以捕捉不同状态下设备的Wi-Fi流量。
除了OnePlus One和Galaxy S3,其他所有设备都没有其他互联网连接渠道。
3.2测量结果
我们在表格中显示了测量结果。在测量期间,设备仅生成探测请求类型的帧。
S3银河公司
经过测量,我们发现这款设备的Wi-Fi行为由三个参数决定,即“Wi-Fi开关”、“始终允许扫描”和“位置”选项。显然,当Wi-Fi处于活动状态时,设备可以随时发送Wi-Fi帧,尤其是在设备离开空闲模式时。
谷歌地图启动时,如果同时激活定位选项,设备也会发送探测请求。无论谷歌地图是否运行,我们都可以观察到探测信息。
从上面的观察我们可以发现,简单的禁用Wi-Fi就足以完全屏蔽Wi-Fi活动。例如,如果启用了“始终允许扫描”和“定位”选项,只要使用谷歌地图,设备就会产生Wi-Fi流量。这大概和使用基于Wi-Fi的谷歌定位引擎有关。
表1。1产生的Wi-Fi活动。各种设定下的银河S3
当只有Wi-Fi和“总是允许扫描”选项被禁用时,无论定位选项是否启用,我们此时都无法观察到设备的Wi-Fi活动。
当定位和Wi-Fi被禁用并且扫描总是被启用时,我们观察到Wi-Fi扫描事件,该事件不能与设备上的任何特定行为相关联。也就是说,无论你在手机上怎么操作,这些扫描事件似乎总是会出现。我们不知道这些扫描动作的目的是什么。
3.2.2一加一
OnePlus One的观测结果如表2所示。这个装置的结果与前一个装置的结果相似。不同的是,我们无法停用OnePlus One的“始终允许扫描”选项。不同的是,当Wi-Fi开关和定位选项都关闭时,设备仍然会在离开空闲模式时发送一堆探测请求消息。这种行为的具体原因还没有搞清楚,但是它给我们带来了非常麻烦的事情:它意味着除非我们使用设备的飞行模式或者完全关闭设备,否则我们无法阻止设备发送检测请求消息。
表二。2产生的Wi-Fi活动。各种设置下的OnePlus One
注意:在此设备上,我们无法在设置面板中找到“始终允许扫描”选项。
Nexus S
Nexus的测量结果如表3所示,与Galaxy S3的测量结果略有不同。我们可以注意到,即使关闭了Wi-Fi开关和定位选项,只要我们切换“始终允许扫描”选项,设备就会发送大量的探测请求消息。
表3。Nexus S在各种设置下产生的Wi-Fi活动
注意:
*:设备会提示用户立即激活定位功能,只需点击“确定”按钮即可。
* *:只要切换了“总是允许扫描”选项,设备就会发送一堆探测请求消息。
3.2.4 HTC WildFire和Galaxy Spica
HTC WildFire的测量结果如表4所示,我们不会对这个结果感到意外。在早期版本的Android系统中,“总是允许扫描”这个选项是不存在的,设备只有在Wi-Fi开关打开的情况下才会发送探测请求消息。我们没有展示三星Galaxy Spica的测量结果,因为这个结果和WildFire非常相似。唯一的区别是,当设备处于或退出空闲模式时,它不发送探测请求消息。
表4。4产生的Wi-Fi活动。各种设置下的HTC WildFire
注意:该设备搭载的是较早版本的Android系统,没有“始终允许扫描”选项。
3.2.5 Moto G5 Plus
联想Moto G5 Plus的测量结果如表5所示。这款设备搭载了稍微定制的Android 7.0系统,设备的随机化行为也很奇怪:只有当设备处于空闲模式时,设备才会在探测消息中使用随机化的MAC地址。只有当Wi-Fi被禁用时,我们才能通过Wi-Fi设置面板访问“始终允许扫描”选项,或者我们也可以通过“位置设置”面板访问该选项。
表5。5产生的Wi-Fi活动。各种设置下的Moto G5 Plus
注意:
*:当处于空闲状态时,设备会连续发送探测请求消息,消息中会使用随机化的MAC地址;否则,将使用真实的MAC地址。
测量结果总结
当Wi-Fi处于活动状态时,所有设备都会发送Wi-Fi消息,这符合我们的预期。当Wi-Fi被禁用时,根据设备上安装的Android系统版本,我们会观察到两种不同的行为。对于较旧的系统(版本2.2.1和2.3.7),当Wi-Fi关闭时,我们没有观察到Wi-Fi消息。对于较新的版本(4.3及更高版本),Wi-Fi行为取决于是否启用了“总是允许扫描”选项。当“始终允许扫描”选项被激活时,无论设备的Wi-Fi开关是否关闭,设备都将发送Wi-Fi信息。要完全禁止设备发送Wi-Fi消息,我们需要禁用Wi-Fi,同时始终允许扫描选项。我们注意到OnePlus One中没有“总是允许扫描”选项。所以在使用这个设备的时候,我们无法阻止手机发送Wi-Fi消息,除非手机关机或者处于飞行模式。
3.3检测频率
检测频率与具体的设备、配置和应用场景有关。虽然我们研究的目的不是找出具体的区别,但是我们可以发现,在某些场景下,设备发出信号的频率会处于一个较高的水平。在这种情况下,跟踪设备的可能性将大大提高。例如,对于OnePlus One,如果启用了Wi-Fi开关或位置选项,当用户打开谷歌地图时,设备将每5秒发送一次探测请求消息。
4.提示激活定位功能
在某些版本的Android系统上,当谷歌地图启动时,如果没有激活定位功能,设备会提示用户立即激活定位功能。在HTC WildFire上,用户将被重定向到相应的设置面板。在OnePlus One上,只需点击弹出消息中的“确定”按钮,这个选项就会立即被激活。如果用户忽略了这条消息,那么稍后重启Google Maps时,相应的对话框将不会再次弹出。但是,如果用户再次点击导航按钮(图2右下角的按钮),对话框会再次弹出。在Nexus S上,我们发现有两种可能的情况(如图2所示):
如果Wi-Fi开关被禁用,并且定位选项和“总是允许扫描”选项也被禁用,设备将提示用户激活这两个选项,如果用户单击“是”按钮,这两个选项将被激活。
如果Wi-Fi开关被激活,但位置选项和“总是允许扫描”选项被禁用,设备只会弹出一个对话框提示用户激活位置选项,而不是“总是允许扫描”选项。
图2(a)。启用“始终允许扫描”选项时,Nexus S上的谷歌地图会提示用户激活Wi-Fi。
图2(b)。当“总是允许扫描”选项被禁用时,Nexus S上的谷歌地图会提示用户激活Wi-Fi。
在OnePlus One上,谷歌Mpas会弹出一个对话框,要求用户激活Wi-Fi,如图3所示。
图3(a)。简要信息
图3(b)。单击展开按钮显示详细信息。
动词(verb的缩写)摘要
在Android系统上,禁用Wi-Fi不足以阻止设备发送Wi-Fi消息。在禁用Wi-Fi后,某些设备仍会生成Wi-Fi信息。所以禁用Wi-Fi后,我们并不能完全避免Wi-Fi追踪系统对用户的数据收集行为。为了防止设备发送Wi-Fi消息,我们需要同时禁用设备上的两个功能:我们必须同时禁用Wi-Fi开关和“始终允许扫描”选项,以确保设备处于静默状态。在一些设备上,我们甚至看不到那个选项,这意味着用户无法阻止他们的手机发送Wi-Fi消息。
虽然Android在较新的系统中引入了MAC地址随机化机制[1],但有些设备并不支持该功能。从6.0版本开始,Android开始支持MAC地址随机化,现在54.2%的Android设备仍然使用旧版系统[2]。另外,只要硬件支持MAC地址随机化,就应该激活MAC地址随机化。不过这种情况在2017年还是很少见的。
不及物动词参考
[1] Android 6.0的变化
[2] Android平台版本描述
[3]安卓定位策略
[4]安卓扫描论坛
[5]《华盛顿时报》:商店是如何利用用户的无线WiFi来追踪他们的购物习惯的?
[6]研究移动设备中的mac地址随机化及其失败的情况。arXiv预印本arXiv:1703.02874,2017 .
[7]使用Wi-fi监视器跟踪未经改装的智能手机。《第十届ACM嵌入式网络传感器系统会议论文集》, SenSys '12,第281294页,美国纽约州纽约市,2012年。ACM .