背景
知乎非常重视用户隐私数据的保护,安全团队一直在为此提供各种保护机制;另外国内外一些知名的 Android 商店,如 Google Play 等也会针对用户隐私数据进行一系列的上架审核,一旦出问题会被严重警告甚至下架。为全面保护用户的隐私数据,同时避免被商店拒审或下架的风险,Android 移动平台团队建立了一套敏感代码扫描机制,取名为 FindDanger。
FindDanger 简介
在 App 开发过程中,对于自己的代码中涉及用户隐私的部分很容易约束,但对于 App 中引用的第三方库是否会有此类行为就无法知晓了。对于这种情况,FindDanger 机制应运而生,FindDanger 是一套敏感代码扫描机制,主要用于扫描第三方库是否存在获取用户隐私之类的高风险行为。
PS :有兴趣的加入Android工程师交流QQ群:752016839 主要针对Android开发人员提升自己,突破瓶颈,
相信你来学习,会有提升和收获。
机制介绍
整个机制的运行过程如下图所示:
image.png
由于我们使用 GitLab + Jenkins 进行代码管理和持续集成,所以普通的工程师也可以很快上手,具体的流程如下:
首先,工程师提交检测 jar 包的 merge request 后,会触发 Jenkins 上的扫描任务,扫描结束将报告链接发送给 GitLab 的 merge request 页面,如下图所示:
image.png
然后,点击页面中的链接打开报告,如下图所示:
image.png
最后,移动平台的工程师对报告进行分析,并给出使用意见。
规则支持
目前 FindDanger 支持下列检测规则,其中危险级别的数值越大越危险:
- StealAPPListClazz 读取设备已安装的 App 列表 10
- StealRunningList 读取设备正在运行的 App 列表 10
- RuntimeCommand 通过 Runtime 接口执行终端命令 10
- StealAddressList 读取通讯录信息 10
- StealAccount 读取设备账号信息 9
- StealBluetoothInfo 读取设备的蓝牙信息 5
- StealNFCInfo 读取设备的 NFC 信息 5
- StealSensorInfo 读取设备的传感器信息 5
- StealTelephonyInfo 读取设备的电话信息 5
- StealWifiInfo 读取设备的 WIFI 信息 5
FindDanger 原理之自定义 Lint 规则
从生成的报告可以看出,FindDanger 是利用 Android Lint 进行代码扫描的,而这之中最关键的就是如何自定义 Lint 规则以满足我们的需求。
Android Lint 规则会打包到一个 Jar 包中,所以自定义规则主要有五