导语:移动智能手机发出的Wi-Fi信号可以被某些机构和别有用心的人利用,跟踪用户的移动行为,所以你如果关闭移动设备的Wi-Fi接口则意味着你不想被人发现。

u=3555312387,37021342&fm=27&gp=0.jpg

前言

移动智能手机发出的Wi-Fi信号可以被某些机构和别有用心的人利用,跟踪用户的移动行为,所以你如果关闭移动设备的Wi-Fi接口则意味着你不想被人发现。

Android系统具有设置启用或禁用Wi-Fi功能的选项,然而,你以为只要通过禁用Wi-Fi选项就足以阻止你手机的所有Wi-Fi活动吗?大错特错。为此,我还专门进行了一些测试,以验证这种说法的准确性。

Android手机的Wi-Fi配置

Android手机的Wi-Fi扫描

和其他任何支持Wi-Fi的系统一样,Android也是依靠Wi-Fi服务发现机制来检测Wi-Fi接入点范围。但与大多数移动系统的做法不同的是,Android是依靠主动的Wi-Fi服务发现机制来运行的,设备为了主动搜索附近的接入点,会执行Wi-Fi扫描,这样,在该过程中,它就会发送无线查询探测请求,该请求包含其独特的,且通常是唯一的MAC地址。通过探测响应,接入点会回复这些请求,并在Android设备上显示出来。

今日,有人发现,Android的Wi-Fi服务发现机制在寻找可用网络的同时也会被用来获取位置信息。具体原理是这样的:无线网络连接会把其唯一的BSSID(MAC地址)标识的点用作地标,协助一个基于Wi-Fi的位置引擎,这样,在Wi-Fi扫描期间,就可以利用该原理从检测到的接入点的列表中导出一个位置。

众所周知,在Android中,Wi-Fi扫描是用于启用网络连接和进行定位的。然而,有组织竟然利用Android的Wi-Fi扫描来推导其现在的位置,还利用Wi-Fi探测器请求来估计接入该商场的访问者数量从而记录客户的流动性。这样,在探测请求中,通过检测唯一MAC地址广播的数量,零售商就可以获得有多少智能手机使用了其店内的Wi-Fi。综上所述,一旦你寻求可用的无线连接,那么这些Android设备的位置跟踪就会按照这些MAC地址来测试。

Android中的Wi-Fi相关设置

Android系统包含许多可以影响Wi-Fi的配置选项的活动设备,最明显的是Wi-Fi交换机。下图是Android 4.4.4中的Wi-Fi开关相关选项:

1.jpg

这个时候开关被激活,Wi-Fi接口可以被操作系统和应用程序(只要他们有足够的权限)充分利用。当交换机关闭时,Wi-Fi连接不可用,应用无法访问Wi-Fi扫描的结果。

第二个选项称为“始终允许扫描”或“始终可用扫描”,允许设备执行Wi-Fi扫描,即使Wi-Fi开关关闭。

2.jpg

在Android上4.4.4的Samsung Galaxy S3和Android 4.3的Nexus S,你可以通过“系统→Wi-Fi→高级”找到该选项,而在联想Moto G 5的Android 7.0上,此选项位于“设置→位置→扫描”处。在OnePlus One的Android 6.0.1上,这个选项目前还无法找到(本文后面的测试表明该选项其实一开始就已被激活)。

分析生成的Wi-Fi活动

本文对Wi-Fi活动的分析主要集中在5款Android手机上,可以说是覆盖了整个Android目前已经发布的版本(从2.2.1到6.0.1)。

•Galaxy S3:Samsung Galaxy S3(GT-I9 …),Android 4.4.4

•HTC野火,Android 2.3.7,CyanogenMod 7.2.0

•Samsung Galaxy Spica,Android 2.2.1,CyanogenMod 6.1.1

•Nexus S,Android 4.3,CyanogenMod 10.2.1.1

•OnePlus One,Android 6.0.1,CyanogenMod 13.1.2

测试分析方案

为了测试的全面可信,我会监控以上每款智能手机在不同配置下以及在不同类型活动中生成的Wi-Fi流量。除此之外,设备从不与接入点相关联。监控是使用在监控模式下设置的Wi-Fi接口执行的,并捕获固定信道上的流量。收集的Wi-Fi帧的源MAC地址用于检测由这些设备生成的流量。实际上,由这些设备发射的所有Wi-Fi帧都包括它们在帧头的MAC地址。

测试的配置选项包括:

•Wi-Fi开关:控制Wi-Fi激活的选项。

•始终允许扫描:当Wi-Fi关闭时允许Wi-Fi扫描的选项。

•位置:控制位置功能的选项。在某些设备中,该选项是分为2个选项:GPS定位以及蜂窝或Wi-Fi地理位置,本文只考虑蜂窝或Wi-Fi地理位置的选项。

测试的不同类型活动

•屏幕亮起时的活动:屏幕打开时,设备会会让屏幕保持亮起状态的时间,即亮屏几分钟。

•空闲时的活动:在屏幕自动暗屏后,设备至少在5分钟内没有执行任何操作。

•手动闲空闲时的活动:通过控制电源键将设备置于空闲模式。

•Google地图:Google地图应用正在该设备上运行。

•启动Google地图:由用户启动Google Maps应用程序。

•不相关活动:设备事件的发生不是在用户的操控之下发生的活动。

所以,Wi-Fi流量就是在每个设备的不同活动下所捕获的。要说明的是,除了OnePlus One和Galaxy S3之外的所有设备都没有其他的网络连接途径。

测试结果

测试结果会在以下列表中显示,在测试时,只有手机生成了探测请求类型的帧。

Galaxy S3

测试结果显示,Wi-Fi活动取决于所有三个参数:“Wi-Fi开关”,“始终允许扫描”和“位置”。显然,当Wi-Fi被激活时,设备会在任何时间发送Wi-Fi帧,特别是当空闲模式结束时。启动Google地图也会触发探测请求的发送,但前提是在定位启动的情况下。只要Google地图正在运行,就会被无线流量探测到。

于是,我观察到的一个重要结果就是禁用Wi-Fi并不一定会阻止Wi-Fi活动。例如,如果“始终允许扫描”和“位置”两个选项都被激活,则Wi-Fi流量将会在使用Google地图时产生。这可能是由于使用了基于Google Wi-Fi的位置引擎。

3.jpg

上面的表就是在Galaxy S3的各种设置中生成的Wi-Fi活动。

4.jpg

上面的表就是在OnePlus One的各种设置中生成的Wi-Fi活动。在这个设备上,“始终允许扫描”选项是不显示在参数中的。

可以发现,在Galaxy S3和OnePlus One的Wi-Fi配置中,完全缺乏Wi-Fi活动。而且无论“位置”选项如何设置,“始终允许扫描”都会被禁用。

我观察到,当“位置”和“Wi-Fi开关”都被禁用且“始终允许扫描”选项时好时坏时,

我是无法连接设备上的任何特定活动的Wi-Fi扫描事件。换句话说,无论手机上产生什么活动,这些扫描事件似乎都会发生。目前,我还不清楚这些扫描的目的是什么。

OnePlus One

表2中所列的OnePlus One的测试结果与表一的结果类似,唯一不同之处就在于“始终允许扫描”不可停用。 所以这就造成了当Wi-Fi交换机和位置选项都关闭时,手机在每次进入空闲模式时仍然会发送一组探测请求。 目前,我还无法解释这种行为的原因,但很明显,这意味着除了使用飞行模式或完全关闭设备外,没有办法阻止设备发送探测请求。

Nexus S

Nexus S的结果如表3所示,测试结果与Galaxy S3非常相似。不过,有一个值得注意的行为是,即使Wi-Fi开关和位置选项关闭,每次选择“始终允许扫描“选项时,手机也会被自动切换。

5.jpg

如上面的列表所示,Nexus S手机在各种设置中生成的Wi-Fi活动都会提示用户位置选项已被激活。不过,当激活或停用“始终允许扫描”选项时,Nexus S就发出探测请求。

6.jpg

如上面的列表所示,在HTC野火的各种设置中生成的Wi-Fi活动中,“始终允许扫描”选项在此设备早期版本的Android中是不存在。

HTC 野火和Galaxy Spica

表4中列出的HTC 野火的测试结果并不奇怪。因为在早期版本中,不存在“始终允许扫描”选项,而且仅当Wi-Fi开关打开时,才会发送探测请求。三星Galaxy Spica的测试结果与HTC 野火非常相似,唯一的区别是Galaxy Spica在空闲模式或离开空闲模式时,没有观测到发送的探测请求。

Moto G5 Plus

联想Moto G5 Plus的结果如表5所示,它使用了一个定制的Android 7.0版本,且随机化行为令人惊讶,因为我观察到,Moto G5 Plus似乎仅在空闲模式下探测时随机化MAC地址。但只有当Wi-Fi关闭并允许“位置设置”使用时,该手机才会通过Wi-Fi设置访问“始终允许扫描”选项。

测试总结

当Wi-Fi被激活时,所有设备都会发送Wi-Fi帧,对于这一结果,想必大家都没有什么惊奇的。不过,当Wi-Fi停用时,设备是否会发送Wi-Fi帧,根据我的观察,这取决于取决于不同手机的Android的版本。在老旧版本(2.2.1和2.3.7)中,Wi-Fi关闭时,我是没有观察到发送的帧。而在最近的版本(4.3及以上)中,Wi-Fi活动取决于“始终允许扫描”的选项。

7.jpg

如上面的列表所示,Moto G5 Plus在各种设置中都会生成Wi-Fi活动。就算设备处于空闲状态,也会持续探测无线信号,不过由于MAC地址是随机的,否则使用的真实MAC地址就会被激活。 无论Wi-Fi交换机的状态如何,启用“始终允许扫描”即可启动Wi-Fi帧。 

所以,为了完全防止Wi-Fi帧的发送,需要禁用“Wi-Fi开关”和“始终允许扫描”选项。 我注意到,在OnePlus One上,“始终允许扫描”不可用,因此无法防止手机在不关闭或使用模式下发送Wi-Fi帧。

Wi-Fi信号的频率探测

频率探测因设备配置和运行情况而异,虽然这项测试的目的并不是为了审查这些行为差异,但仍然可以注意到,某些情况下可能会导致手机发送高频信号。在这种情况下,跟踪这些设备很可能违法。 例如,如果在Wi-Fi交换机或位置选项打开的情况下,OnePlus One会在Google Maps应用程序打开时,每5秒就发送一次探测请求。

进行位置激活的提示

在某些版本的Android上,如果手机的位置选项未被激活,则设备会立即提示用户是否启动Google地图的位置选项。例如,在HTC 野火上,用户会被重定向到相关的参数部分。在OnePlus One上,只需根据提示,点击“OK”就行。

如果用户忽略该消息,则以后的Google Maps将不再提示。 但是,如果用户点击位置按钮(下图右下角的顶部按钮),则会再次提示。 在Nexus S上,我注意到两种可能的结果(见下图):

•如果Wi-Fi开关被禁用,并且“位置开关”和“始终允许扫描”选项也被禁用,则设备将提示用户把这两个选项都激活。

8.jpg

•如果Wi-Fi开关已经被激活,同时“位置开关”和“始终允许扫描”选项被禁用,则设备只会提示用户激活“位置开关”,且保持“始终允许扫描”选项被禁用。

9.jpg

结论

在Android上,禁用Wi-Fi不一定能阻止设备发送WiFi帧,因为某些设备在Wi-Fi被禁用后仍然会生成Wi-Fi帧。因此,禁用Wi-Fi不足以逃避Wi-Fi跟踪系统对你设备的数据收集。

所以,为防止手机发送Wi-Fi帧,需要同时禁用设备上的两个功能:

1.必须禁用“位置开关”选项;
2.必须禁用“始终允许扫描”选项。

只有这样,才能完全禁用Wi-Fi帧的发送。不过,在某些设备上,“始终允许扫描”选项压根就不可用,这意味着用户无法阻止其手机发送Wi-Fi帧。

虽然Android的最新版本包括MAC地址随机化,但是还有一些不支持此功能的手机。 MAC地址随机化功能已在Android 6.0版本中引入,截至目前,54.2%的Android设备还在使用旧版本。此外,只要硬件支持Android 6.0版本,MAC随机化就会被激活。

源链接

Hacking more

...