编者按:

由于 Android 操作系统本身具有开放性,其丰富的编程接口给开发人员提供了极大的便利,不同的手机厂商可以定制不同的手机系统,同时也使得 Android 平台上的应用在调用系统权限、收集终端用户数据过程中具有更大的开放性。虽然自 Android10 系统后,普通应用软件将不能获取 IMEI 等不可变更的唯一标识符,但仍然存在应用在获取权限后过度或频繁采集数据的风险。对此,多家 Android 手机厂商在其操作系统内新增了“照明弹”功能,即可以对手机中的各个应用调用权限、收集数据的情况进行监控,并可以提示用户或供用户对相关应用行为进行查询。为行文之便,本文将该类检测功能统称为“照明弹”功能,该统称不代表本文针对任何特定操作系统。

Android 手机厂商所定制的类似软件调用权限与收集数据行为监控的功能在保护用户隐私方面做出了积极贡献,但也存在着检测功能不完善,无法对应用调用权限或收集数据行为进行准确识别,甚至出现应用并未调用权限或收集数据而被误报为频繁请求权限或收集数据的情形,导致应用的正当处理活动被该类功能判定频繁密集调用权限、收集数据。

基于当前“照明弹”功能存在的问题,本文结合“照明弹”功能的工作机制入手,对当前误报情况进行分析,并结合相关问题提出照明弹功能的法律规制建议。

本文作者为字节跳动数据法务负责人田申、字节跳动数据法务谷元坤、字节跳动安全风控高级工程师杨骁涵。

1.“照明弹”功能的技术实现方式

Android 操作系统对软件行为的监控主要是通过其对系统 API 的调用进行检测分析来完成的,检测分析有系统调用劫持、共享库注入、Binder 通信监控等不同实现方式。其中,常用的方式是共享库注入,其主要任务是将自己编写的共享库文件装载到目标应用程序进程地址空间中,从而对目标应用程序调用权限与收集数据情况进行监控。

方法一:系统调用劫持

该方式主要是先通过内核编译技术来解决一般 Android 系统不支持自定义内核模块的动态加载问题。然后通过对应用程序系统调用过程进行劫持,运用包含 log 功能的自定义模块对原始系统调用模块进行替换,进而通过 log 功能对应用程序调用 API 的详细过程进行记录与输出,从而实现对应用程序行为的内核级监控。

方法二:共享库注入

Zygote 是 Android 系统上所有应用程序进程的父进程,每个应用程序被打开时,fork() 函数被调用,并生成一个新的子进程,该子进程拥有 Zygote 进程所拥有的所有资源。故而本方法通过将共享库文件注入 Zygote 进程中的方式实现,每当新的子进程启动时,该子进程就会自动拥有共享库文件。共享库功能主要是对 Dalvik 虚拟机中一些敏感 API 进行劫持,并重定向到自定义函数中,自定义函数通过 log 功能对应用程序调用 API 的详细过程进行记录与输出。

方法三:Binder 通信监控

Binder 机制是Android 平台上来实现进程间通信的新的 IPC 机制,其采用 Client-Server 通信方式。一般而言,应用发出某个请求时,会首先向ServiceManager 发出 getService 请求,获取提供相应服务的进程的 Binder 引用,然后通过这个 Binder 引用来对相应的服务进行访问操作。其中,被请求的服务要先检查发送请求的应用程序是否有相应权限。该方法就是在 Android 权限访问控制基础上为需要监控的服务增加了一个访问控制模块。这样,一个应用程序的访问请求就会首先通过新增的访问控制模块,然后再转发到对应的后台服务模块,以此完成对 Android 软件行为的监控。

注:Zygote 是一个 Native 应用程序,是孵化虚拟机实例的虚拟机进程,它在 Android 系统启动的时候就会产生,实现虚拟机的初始化,库的加载、初始化等操作。每当系统接收到一个 Android 应用程序执行请求时,Zygote 就会 fork()出一个 Zygote 子进程,该 Zygote 子进程会复制父进程的资源,如 Android 应用框架使用的类和资源等,然后 Zygote 子进程会动态加载并运行 Android 应用。

2.“照明弹”检测造成的误判情形

(1)照明弹功能自身 bug 导致误判

某手机操作系统增加了 App“读取相册”和“读取社交应用文件”披露功能,在该系统上运行 App 时,如果用户拒绝了“相册”或“社交应用文件”访问权限时,系统会弹出“已禁止XXXApp 读取社交应用文件”的通知,同时在该系统的应用行为记录中也会记录了“XXXApp 访问了社交应用软件”。

当前,在相关 App 并未“读取社交应用文件”时,该系统也会向用户提示"App 读取社交应用文件",而导致这一问题的原因在于代码逻辑存在问题,即:只要用户关闭“社交应用权限”开关,即使访问路径与社交应用文件不匹配,也会导致一直出现提示“已禁止 xxx 访问社交应用文件”的弹窗。

(2)照明弹功能与App兼容问题导致误判

某手机操作系统增加了 App“后台调用摄像头”披露功能,在该系统上运行 App 时,如果App 在后台时仍调用摄像头权限,系统会提示用户“App 在后台拍照或录像”。

当前,这一功能可能由于应用适配问题,导致 App 仅在毫秒级未释放权限的情况下,仍然向用户提示“App 在后台拍照或录像”。经过分析后发现,造成该问题的原因在于该功能系通过 CameraService 实现对相机操作的监控实现,CameraService 记录了摄像头释放的时间,回传给 AppOps 产生的日志。此时,如果摄像头释放的时刻大于应用切换到后台的时刻(即使为毫秒级),也会被记录并通知用户。后经过在安卓原生系统测试,原生系统仅会在日志中对这一活动进行记录,并记录未释放权限的毫秒级时间而不会对进行通知。由于 App 在拍摄后通过不同的导航退出时,相应的释放时间差会有很大不同,且毫秒级的未释放权限对用户几乎无损害。因此,考虑到技术所限和用户体验,APP 通常很难做到零延迟释放摄像头权限。

(3)照明弹功能检测细粒度较粗导致误判

某手机操作系统增加了 App“调用地理位置”披露功能,在该系统上运行 App 时,如果App 持续调用地理位置信息,该功能将记录或告知用户。

当前,在相关 App 在做网络性能优化时,网络切换会调用 getConnectionInfo 以获取 WIFI 连接状态信息,网络质量探测模块也会调用这个接口获取 wifi 信号强度(RSSI),用来评估网络质量。APP 调用 getConnectionInfo 的 API 接口时,如果用户已授权精确地理位置权限(ACCESS_FINE_LOCATION)时,getConnectionInfo 返回的 WifiInfo 对象中会包含有真实值的 SSID、BSSID;但当用户未授权精确位置权限时,则 SSID、BSSID 两个字段为空,但不影响 WifiInfo 对象中的其它字段,包括 RSSI 等。

由此,每当进行网络信号状态判时,由于调用了 getConnectionInfo 的 API 接口,可能导致每次判断网络状态时,都被照明弹功能记录为“App 调用地理位置”。而实际上,如果该功能可以进一步精细化判断权限组和对应接口获取参数的问题,可以在一定程度上缓解类似误报情形。

3.“照明弹”功能与App的适配及法律规制

“照明弹”功能无疑为用户提供了对应用软件收集设备信息的直观了解方式,对于用户实现数据保护意识起到了积极的作用。因此这一功能是增强数据处理“透明度”的重要技术抓手,同时也是中国手机等终端设备厂商重视用户隐私保护理念的技术落地方案。

当然,从前文中我们也看到,由于技术条件所限“照明弹”功能可能还有很多不甚完善之处,其中还可能造成用户的误解甚至恐慌,也可能给 App 开发者带来很大程度的舆情压力。因此,为了保障“照明弹”这一隐私保护框架能够促健康和可持续发展,需要形成厂商、应用开发者、行业监管以及用户的共同参与机制,进一步细化相关规则,避免徒增“隐私焦虑”,进而撕裂社会成员间的信赖利益,并且避免手机厂商落入“诋毁商业信誉”的法律风险之中。

(1)细化照明弹功能对敏感 API 监控的粒度

将应用对敏感 API 调用的监控粒度尽量细化,避免对所有涉及敏感API 调用的事件进行统一忽略或统一拒绝。对于暂时难以做到细化的,需要在提示敏感功能被调用时,对可能造成的原因向用户进行提示或说明,以避免对 App 的处理活动造成误伤。

(2)对拦截Binder 监控信息进行分析研判

通过拦截 Binder 信息监控应用的方法,需要对访问控制模块中拦截的信息进行分析过滤,判断传递的消息是否真正侵犯用户权益。根据 Binder 信息传递机制,某些系统服务启动、注册等不会对用户个人信息造成侵害的应用行为也会调起 Binder 机制,若将这些行为统一认定为侵犯用户信息从而传递给用户,将对应用开发者在用户方面的信誉造成一定程度上的侵害。

(3)建立照明弹功能“沙盒测试”机制

在照明弹新增功能正式上线测试前,为开发者(可以加白名单)提供测试环境以验证相关监控功能的准确率是否在容错范围之内,避免新监控功能上线后导致大规模非真实违规行为被错误认定。同时,这一机制也有助于应用开发者更好完善自身应用调用数据的规范性。在这一机制下,手机厂商有义务听取并记录应用开发者反馈意见,对于不采纳的意见应当予以说明并记录。应用开发者也有义务对于在测试中发现的不合理的调用权限、数据处理等行为进行修正。

(4)建立照明弹功能有效性评估标准

对于照明弹透传信息是否科学合理,可以建立有效性评估标准,例如前述案例中的“后台调用摄像头”监控活动,是否对于毫秒级的暂时调用行为做到仅记录而无需提示,待相关高风险行为达到一定时间阈值后,再向用户进行提示并记录在照明弹看板中,供用户查阅。由此,建立一套相关记录、提示的标准化规则,以实现安全与业务发展的平衡。

(5)建立用户反馈联合说明机制

目前囿于技术所限,照明弹功能仍会在一定程度上造成误伤并导致用户投诉相关应用。在因照明弹功能可能引起的误伤事件中,应用开发者和手机厂商应当协同解决用户疑虑,以共同维护基本的信赖关系,避免隐私舆情误导公众,徒增社会公众隐私焦虑。

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