December 26, 2019

隐私政策保护中第三方sdk问题

随着法律法规的完善,个人隐私的重视程度不断得到重视,APP中的隐私政策要单独成文,展现给用户授权,在未得到用户的同意的情况下是不得擅自收集用户信息,且不得强制用户授权。

个人信息中,常用于收集的设备与环境信息包括:设备型号与序列号、设备 MAC 地址、已安装的app列表、唯一设备识别码(如IMEI/android ID/SIM卡/IMSI信息等)、GPS以及定位、传感器数据等,这些数据也通常是第三方sdk所采集的热点数据,针对这点,在实际开发中,开发者在关注自身代码中是否合规的同时,仍需要注意留意所集成的第三方SDK没有“后门”或超采行为。

服务条款

在往期的文章《监守自盗成常态?揭弊APP加固厂商盗取个人信息》 (传送门:https://blog.trustlook.com/secrets-of-android-app-bundle/ )中,我们针对第2家的加固服务做了更为详细的分析,发现了其隐蔽的数据收集行为,在该加固平台中进行加固时,未明确其“反盗版”功能为SDK的形式集成在APP中,仅要求在开发者使用服务时,勾选其“平台服务协议”即可,但针对用户隐私的收集说明却隐藏在长篇的条款中:

极其容易被忽略。

因此在使用第三方服务组件或集成SDK时,一定要小心并仔细的阅读官方所包含的协议,例如该收集隐私数据的服务是包含在“加固基础服务”中的,且强制开启,无法手动关闭,使用该服务的同时表明已同意其条款,因此也要注意将其协议添加到APP的隐私政策中。

应用权限

Android应用的权限由系统统一管理,在未授予对应的权限时,如“读取手机状态和身份”,拥有本权限的应用即可获取用户的网络状态,通话状态,IMEI/MEID/IMSI等,被打包的SDK共享宿主APP的权限,因此也具备了收集该类信息的能力,我们假定除涉及资金交易以及财产安全的应用需要获取用户的唯一设备状态码作为标识,而需要用户识别码的权限以外,可以考虑不申请本权限,这样一些sdk即便拥有收集代码,也会因无权限而无法完成收集,此外“读取/写入外部存储”在支持高版本安卓设备上也应考虑停止使用,外置存储常用于存储用户私人照片、视频、文档等涉及用户的敏感隐私,最初申请此权限通常用于访问外部存储卡以节约设备的存储空间,但随着硬件的不断升级,以及安卓系统的虚拟分区功能的实现,不必再担心内部存储空间容易被耗尽,且部分包含热更新的组件可能会使用外部存储来存放或热加载Dex可执行文件,如果该路径可被其他应用读取写入,并且组件自身没有对所加载的Dex文件做完整性校验的情况下,很可能带来安全隐患,因此合理的使用系统权限也是保护用户隐私安全的方式之一。

网络流量

通过分析APP启动时对服务器所进行的网络请求来大致判断是否有不必要的数据传输,对于HTTP/HTTPS流量,可设置系统代理,以及web调试器(如fiddler),在数据未加密或简易编码的情况下(如base64编码),来检查sdk的网络请求。

被明文传输的设备数据

此方式可以用于粗略的判断sdk所上传的数据,但并非所有流量都会通过系统代理,对于绕过系统代理以及加密过的请求是无效的,此时可尝试将设备连接到主机的共享热点下,并使用wireshark对无线网卡进行流量分析,在过滤器中输入“http || tls”进行过滤,即可看到全部的网络流量:

其中tls为加密流量,但仍可通过请求的目标来以及payload的大小来猜测流量的含义。

代码分析

对于开源的sdk我们可以通过阅读或搜索代码的方式,寻找敏感的API调用,而闭源的sdk,可以通过反编译工具获取大致的源代码或伪代码来分析,例如免费开源的jadx(https://github.com/skylot/jadx)反编译工具,载入apk或jar包后,便可查看其代码。

这里我们随机寻找了一份样本,并在字符串搜索功能中输入“imei”,工具也很精准的帮我们定位到了相关代码:

其中getIMEI的代码如下:

显然易见,这里通过系统组件TelephonyManager来获取用户的imei信息,同样的,我们可以尝试搜索另外一个系统组件:ConnectivityManager,并找到了如下代码:

很明显,代码的意图为获取网络状态。

逆向分析第三方代码通常会比较困难,容易遇到各类技术上的对抗反向工程,因此建议寻找经验丰富的高级开发者或专业人士来完成第三方代码的审查工作。

沙盘分析

在没有专业的技术人员支持下,开发者或应用市场可尝试使用一些自动化的分析平台,通常使用静态分析和动态分析的方式辅助分析Android软件行为,如上文提及的加固后的应用,通过Trust Look自主研发的app insight进行扫描,其流程极为简单,只需要上传APK,等待扫描完成,查看基于静态/动态以及AI智能评估引擎的分析结果即可。

我们可以看到整体的报告中已经包含了读取各类设备信息,使用危险权限的证据,在动态行为分析一栏,我们可以查看更详细应用运行时分析,其收集行为在沙盘分析中清晰可见:

如读取手机号,MAC地址,应用列表,socket模拟HTTP协议上传收集的数据等信息全部一览无余。

在法律法规不断的完善,用户个人信息安全,隐私保护越来越重视的今天,APP开发运营时所需要考量的东西也会越多,及时做好安全可以有效的防止运营期间业务受到不必要的影响,在审计好APP自身问题的同时,也要对接入的sdk所带来的第三方数据安全有所了解,发现超出约定或权限外的行为要及时停止接入。