App收集MAC地址合理吗?

2019年3.15晚会就曾爆料,不法商家会通过在便利店、商场等人流密集处安装一种叫做“探针盒子”的设备,获取周边人群手机的MAC地址,然后通过一系列第三方数据交叉匹配,获得其手机号码。这些号码随即被卖给房地产、汽车、金融、教育行业的营销中心,用于骚扰电话营销。借助拨号机器人,营销中心一天就能拨打出成千上万个电话。更甚者,如果接入更多第三方数据,商家甚至还能知道手机机主的姓名、性别、年龄、收入等详细信息,实现“大数据下的精准营销”。

这个案例中,“探针盒子”收集的MAC地址被用于关联了个人身份,从而发生了未经用户同意,滥用个人信息的现象。但是,MAC地址又作为网络通信所依赖的“必需品”,成为普遍收集的对象。

本文就以App收集MAC地址为主题,讨论收集MAC地址的原因、使用风险和平衡利弊的方法。

NO.1 MAC地址是什么?有什么特性?

通俗的说,每一个网络设备的接口(俗称网卡,包括有线、无线、蓝牙等)上都有一个出厂时即设定进硬件的(即硬编码的)一组编码,全称“介质访问控制”(Media Access Control)地址(48位),位于链接层中,即MAC地址。

换言之,手机或者其他终端要使用 Wi-Fi 上网,必须使用一个唯一的网络地址在网络上标识自己,这个地址就是Wi-Fi 的MAC地址,而App要使用WiFi联网,自然需要使用到MAC地址。

MAC地址最大的特点就是具备唯一性,且必须要被收集使用。MAC地址是由 IEEE组织向各厂商有偿分配,其设计用意是因为网络连接过程中需要对网络设备进行唯一性识别,如此才能保证网络通信行为不会出现“错位”,网络空间的正常秩序才得以正常维系。正因为唯一性特点,MAC地址也就和用户的手机等常用设备关联在一起,被称为“手机身份证”,而这个特殊的身份证必须对外开放并被收集使用,才能维持网络的正常通信。

以上两大特性,就带来了保护的难题,MAC地址既可以被用于标识设备,也可以被用作关联和追踪设备上的用户行为,那么MAC地址被收集后风险几何?

NO.2 MAC地址滥用有何风险?

以央视3.15晚会所曝光“探针盒子”为例,收集MAC地址的过程以及后续利用的逻辑如下图:

由于手机需要寻找可连接的Wi-Fi网络,则主动广播了MAC地址,探针盒子便轻易捕获周围设备的MAC地址。从风险角度分析,获取MAC地址不会直接带来风险,但是,由于上文所指出MAC地址具有唯一性,和用户的手机所绑定,如果某个第三方拥有包括个人行踪、消费记录、手机号、MAC地址在内的大数据资源,则可以利用MAC地址这个关联点串起来。简而言之,放置探针盒子的人员可以通过上图两个步骤,获知有哪些人(精确到真实身份和手机号码)的人来到自己附近,从而实现了对个人行踪的追踪,还可以进一步向其发送短信,以达到商业营销目的或其他目的。由于上述MAC地址的使用方式远超出用户仅希望进行上网的目的,无疑是会对个人隐私带来困扰,更严重的还可能会被用于恐吓、诈骗等恶意目的。

但是,必须明确的是,MAC地址的收集是否会对个人产生风险是与使用目的密切相关的,也就是说,MAC地址的收集使用,应当分情形去判定其是否被当做个人信息所收集使用,如果只是在网络链路层作为网络通信所必需使用的信息,显然并未作为个人信息被收集使用。如果在应用层被收集使用,则和IMEI、IMSI号等设备识别符的性质一样,如果进一步被用在了标识、关联个人账号、身份,则通常会被认为是个人信息。如果不加以区分对待,任何触碰MAC地址的行为都被当做收集个人信息看待,需要经过用户同意,但是试问,没有网络通信,又怎么去征得用户同意呢?

这种“内在”的矛盾,无疑加大了进行个人信息保护的难度,随着技术的发展,已经出现了可以有效解决该矛盾的措施。其中,“MAC地址随机化”就是既能保障网络正常通信,又能避免用户身份和行为被追踪的措施。

NO.3 MAC地址随机化有效性验证

为了降低因唯一性所带来的的MAC地址的敏感性,近年来,新版iOS和Android在操作系统层面也进行了一系列改进,具体情况见表1和表2。

表 1 Android系统在MAC地址随机化上的改进

时间

版本

MAC地址随机化的改进内容

2017年

Android 8

增加MAC地址随机化功能:探测新网络时,会使用随机分配的 MAC 地址。

2018年

Android 9

启用一个开发者选项(默认处于停用状态),使设备在连接到 WLAN 网络时使用随机分配的 MAC 地址。

2019年

Android 10

提供完整的随机化功能:默认为客户端模式、SoftAp 和 WLAN 直连启用随机分配 MAC。

表 2 iOS系统在MAC地址随机化上的改进

时间

版本

MAC地址随机化的改进内容

2014年

iOS 8

增加MAC地址随机化功能:探测新网络时,会使用随机分配的 MAC 地址 (Unassociated PNO Scans, Unassociated ePNO Scans)。

2018年

iOS 9

增加了随机分配MAC地址的场景(Unassociated PNO Scans, Unassociated ePNO Scans,Location Scans, Auto Join Scans)。

2019年

iOS 14

iOS 14 提供完整的随机化功能:默认开启;每24小时更新一次随机的MAC地址。(注:前期beta版本24小时更新,后期beta版本随机MAC地址随SSID变化而变化)

简单来说,手机操作系统在真实MAC地址的基础上,生成了一个虚拟、可重置的MAC地址,以保证既满足了网络通信的需要,又避免被关联手机用户的其他信息。那么,这种随机化措施效果如何,让我们一探究竟。

3.1 iOS 系统:验证App能否获取真实MAC地址

从iOS系统中打开MAC地址随机化选项(图1),苹果手机对外通信使用的MAC地址将为随机化后的地址。

图1 iOS系统中MAC地址随机化功能选项

针对App是否能获取用户手机的真实MAC地址这一问题,iOS 7系统之后,苹果已经禁止App获取用户手机的MAC地址。如果某些App利用私有API获取MAC地址,这类App将无法通过苹果商店的审核,苹果商店将禁止此类App上架。因此,苹果商店下载的App不太可能获取用户手机中真实MAC地址。

3.2 Android系统:验证MAC地址随机化的有效性

由于Android系统8之前未采用随机化,因此以下分析验证主要针对Android 8及之后的系统版本。首先打开MAC地址随机化功能,以Android 9版本为例,打开开发者选项后选择MAC地址随机化功能(图2)。

图2 Android系统中MAC地址随机化功能选项

针对不同Android版本,从实际获取MAC地址API函数、所需权限、获取结果等方面验证MAC地址随机化的有效性,具体结果见表3。

表 3 MAC地址随机化验证结果

版本

Android 9

Android 10

使用的系统接口函数

java.net.NetworkInterface getHardwareAddress()

java.net.NetworkInterface getHardwareAddress()

所需权限

需要添加权限:

<uses-permission android:name="android.permission.INTERNET"/>

需要添加权限:

<uses-permission android:name="android.permission.INTERNET"/>

实验结果

获取成功:获取的是随机化后的MAC地址。截图如下:

真实MAC地址截图:

获取成功:获取的是随机化后的MAC地址,截图如下:

真实MAC地址截图:

上述分析表明,打开MAC地址随机化后,使用Android自带的接口获取到的MAC地址为随机化后的MAC地址,符合MAC地址隐私保护的预期。但是,并非真实的MAC地址绝对就能完全避免被获取,曾有专业人员分析过利用“Karma 攻击”和“控制框架攻击”等利用漏洞的方法获取MAC地址的方法,当然这种方式技术成本高且漏洞很快就会被修复,不会造成太大影响。

那么,我们从另外一个角度来探讨,除系统漏洞方法外,App还能否有能力绕过限制,通过访问真实MAC地址的接口获取数据?从Android源码和开发者文档分析,结论如下:

1. Android 10及更高版本设备中,只有属于设备所有者的App(如处理企业使用场景的情况),才可以获取真实MAC地址(图3),获取函数是getWifiMacAddress(图4)。

图3 Android 10及更高系统中获取MAC地址API函数

图4获取真实MAC地址API函数的说明

2.检索Android开发者文档和Android源码,确认获取真实MAC地址需要是设备所有者或者资料所有者(图5)即Device Owner 或者 Profile Owner。

图5 Android源码中获取真实MAC地址函数的说明

3.如何开发设备所有者/资料所有者的App,可以参见Android官方文档,设置设备所有者只能在初始化时进行配置(图6)。

图6 Android开发文档设置设备所有者需要重置手机

以上说明中可以看出,普通的Android应用没有接口可以获取真实MAC地址,只有属于设备所有者的App才可能获取真实MAC地址。而一般的App无法成为设备所有者,那么有没有不通过重置手机的方式成为设备所有者呢?小编编写Android 代码,利用私有命令尝试获取设备所有者权限,运行在Android 8,9和10系统的结果为获取真实MAC地址失败,获取的MAC地址为默认值02:00:00:00:00:00(图7),而Android 9之后已经弃用该API(图8),申请设备政策控制器已经停止注册(图9)。

图7 利用私有命令获取真实MAC地址失败

图8 Android官方文档:停止申请设备政策控制器

图9 Android官方文档:设备管理概览

总之,目前手机操作系统提供的MAC地址随机化措施是可靠的,随机化的MAC地址可以有效切断其与个人手机号、设备号、乃至身份及个人行为的联系,达到保护用户隐私的目的。

于是,有一个问题值得考量,App收集的MAC地址到底算不算个人信息,App在一打开后立即上传了个人信息意味着什么?

NO.4 如何看待App收集MAC地址行为

App收集MAC地址行为是当下一个普遍性现象,除上文所述其应用面的广泛外,还有一个原因是其不受用户控制,可以直接通过调用相关操作系统API获取。关于App收集MAC地址的行为,有以下的分析及建议:

一是,收集的MAC地址是随机化的,应如何看待?

现如今,MAC地址随机化已经逐步普及,据不完全统计,几乎全部的苹果手机用户使用的为iOS 8及以上版本系统,Android 8及以上版本系统使用比例也占到80%以上,可以预见未来比例还会增加。那么,App所收集MAC地址如果是随机化的,已经失去了关联个人的特性,则理应排除在个人信息范畴之外。

只不过,由于Android 8的开源特性及各手机厂商的定制化操作系统导致的差异,很多厂商将随机化功能默认关闭或者隐藏,用户无法打开这个功能,那么真实MAC地址仍可能被收集。针对该问题有以下建议:

——给手机厂商的建议:使用MAC地址随机化功能,同时在系统设置中向提供用户开启和关闭选项,并默认开启随机化。

——给用户的建议:将手机操作系统升级到最新版本,并在系统设置中打开MAC随机化功能(操作方法:iOS 14版本见图1和Android 9版本见图2)。

二是App在浏览/游客模式下收集了MAC地址,意味着什么?

顾名思议,浏览/游客模式下,用户不需要注册即可使用App的基本功能,其实是一种体验好且最小化收集信息的良好实践。部分App在浏览模式下,为了向用户展示历史浏览、搜索、查询等记录,会将MAC地址作为标记设备的方式,以避免使用更为敏感的IMEI号、手机号、账号等。而现在,很多App为满足“未经用户同意收集用户个人信息”的合规要求放弃了一打开App即可友好访问的浏览/游客模式,采取开屏即弹窗的方式,要求用户点击同意隐私政策,不点击同意不让用App任何功能,最终用户只能点同意,MAC地址照样还是被收走了不光如此,被收走的还有可能包括了隐私政策中所列出的其他信息。

一个是直接使用浏览/游客模式,有可能被收走MAC地址,一个是必须先同意隐私政策,点了后收走的除了MAC地址还有其他信息。在MAC地址日趋随机化的发展过程中,哪种方式更有利于收集个人信息最小化,孰优孰劣恐怕非常清楚。

当然,浏览/游客模式下,如果收集的MAC是真实的,还是伴随着用户被追踪的风险。针对该问题有以下建议:

——给App运营者的建议:

其一,浏览/游客模式下如果要标记用户行为,增加使用体验,可以将MAC地址或其他设备信息进行技术处理后形成临时标识使用,如使用哈希函数方式,既保证了后续使用,又能降低关联风险。

其二,用户行为的记录可保留在本地,或仅在服务器上做限期保存(如1月),除非用户明示同意,定期清除记录,或为用户提供清除记录的功能。

以上分析可见,如果是对App收集MAC地址的行为进行专业检测和分析,则必须要顾及以上两方面要素。在发现App打开便收集了MAC地址后,不宜直接得出App未经同意收集个人信息的行为的判断,还需具体分析其使用目的和安全机制。否则,当倒逼App开屏弹窗隐私政策成为“合规之举”时,事实上带来的反而是用户隐私体验的下降。

结语

之所以在能不能收“MAC地址”这个看似细枝末节的问题上较真,原因有二。一是个人信息滥用问题如需要扼制,收集的最小化是个实际的抓手,每一种个人信息类型都必须过问,缺一不可;二是,即使是MAC地址这样一个短短的字符,收集或者不收集,利如何,弊如何,都将对App的形态、产业生态产生不小的影响,现有的解决方案是否是解决问题的最优解必须考量。MAC地址的收集问题恰似个人信息保护与发展平衡问题的缩影,见微方可知著,值得密切关注,值得深入研究,值得细致考量。

声明:本文来自App个人信息举报,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。