深圳幻海软件技术有限公司 欢迎您!

移动APP安全合规检测技术浅析

2023-03-01

1、监管机构及政策想要确保App安全合规,需要先了解相关政策法规。对于企业而言,App合规监管背后,主要涉及哪些监管机构?包括中央网信办、工业和信息化部、公安部和国家市场监管总局,由四部门在全国范围组织开展App违法违规收集使用个人信息专项治理活动。日常App开发中,主要是来自工信部的安全整改问题。

1、监管机构及政策

想要确保App安全合规,需要先了解相关政策法规。对于企业而言,App合规监管背后,主要涉及哪些监管机构?包括中央网信办、工业和信息化部、公安部和国家市场监管总局,由四部门在全国范围组织开展App违法违规收集使用个人信息专项治理活动。日常App开发中,主要是来自工信部的安全整改问题。

常见的法律法规包括《中华人民共和国数据安全法》、《中华人民共和国个人信息保护法》、《信息安全技术个人信息安全规范》、《常见类型移动互联网应用程序必要个人信息范围规定》等。

图1 移动安全相关法律法规

近几年,工信部不断开展推进App侵害用户权益专项整治行动,整治对象包括三大类,即App服务提供者(即应用软件,包括快应用和小程序等新应用形态)、软件工具开发包(SDK)提供者、应用分发平台。

下面是App典型违规问题分类:

  • 违规收集用户个人信息方面,包括“私自收集个人信息”、“超范围收集个人信息”;
  • 违规使用用户个人信息方面,“私自共享个人信息给第三方”、“强制用户使用定向推送功能”;
  • 不合理索取用户权限方面,“不给权限不让用”、“频繁申请权限”、“过度索取权限”;
  • 为用户账号注销设置障碍方面,即“账号注销难”。

2、检测手段

对App的安全合规检测手段除了工信部的定期抽查,自查手段包括人工检测、通过采购第三方的App漏洞扫描工具(目前第三方漏洞扫描产品有:爱加密、梆梆、360等),也有一些开源的第三方工具检测套件辅助使用。从技术形态上可以分为静态检测方案与动态检测方案,以下分别作简要介绍。

2.1 静态检测方案

静态检测方案基于反编译技术通过对移动应用的安装包反编译出代码文件,逐个扫描验证分析,主要对配置文件、源码文件、资源文件和so等文件进行静态扫描,检测移动应用中敏感权限申请及隐私相关API代码,生成精准可视化安全报告。

在该领域中,常用到以下工具:

✔ Apktool : 反编译安卓Apk,可以反编译资源,并在进行修改之后重新打包Apk。

✔ dex2jar : 将Apk反编译成Java源码(classes.dex转化成jar文件)。

✔ baksmali:dex文件转化成smali文件。

利用上述工具,开发者可以基于安全隐私规范,制定相应的安全检测项,利用脚本检测到存在的安全隐私问题。

下面是Android系统中典型的敏感API:

图2 Android典型敏感API

优点:检测速度快、通用性强、技术简单。

缺点:无法确定是否合规、加固后无法检测。

2.2 动态检测方案

通过抓包&Hook沙箱或操作系统沙箱技术,在APP运行的过程中,针对特定API进行埋点(可参考上文敏感函数),查看App是否执行了埋点的API,从而判断是否合规。

➪ 应用场景


  • 通过抓包的方式,在同意《隐私政策》之前查看流量中是否出现敏感数据。
  • 通过Hook技术,对敏感函数进行埋点,在同意《隐私政策》之前查看埋点的函数是否执行。

➪ 工具推荐


  • 抓包工具,burpsuite/charles/fiddler等
  • Hook框架,frida/Xposed框架等

优点:检测确认性高100%能检测(不会受加固影响)。

缺点:技术复杂、通用性差。

3、常态化&防劣化技术

常规的检测手段基于安装包,适用于第三方检测,在技术手段上受限,不能高效彻底的检测安全合规问题。人工抓包方式耗时长且覆盖率低,Hook系统方式往往前提是需要手机root,随着移动安全的发展,root手机已不再轻松,成本高,都不适用于常态化安全合规自查。

对于大型App而言,业务复杂,接入的第三方SDK众多,开发过程中难免踩雷。常规检测手段很难充分全量排查,且无法常态化(工信部、第三方机构检测次数有限)。相对基于APK的安全自查,开发者具有一个显著的优点,那就是拥有源码权限,可以自由在编译等各阶段插入自定义安全检测逻辑。基于此,App开发可以实现更加深入彻底的安全合规自查,切实保障用户隐私安全。

下面就在源码权限基础上提出了两种常态化深度安全合规自查方案。从技术形态依然可以分为静态检测及动态检测模式。

方案的静态检测能力基于Python脚本,实现App引用三方SDK的全列举,快速检测各个三方SDK中隐私权限、网络请求、隐私API和漏洞API调用情况。可协助工信部安全审查问题快速整改。整体实现思路:

1️⃣基于App依赖树,采用深度优先遍历算法,快速查找App引用全部SDK列表,以及各个SDK使用的AndroidManifest.xml、jar和so文件。

2️⃣使用反编译工具cfr将jar包转成java文件,同时使用dx工具将jar包转成dex文件。然后,使用baksmali工具将dex文件转化成smali文件。

3️⃣读取相关政策代码及隐私代码检测策略、策略说明建议等json配置 。逐个分析AndroidManifest.xml中声明的权限及相关包信息。基于java文件及smali文件,完成网络请求、隐私API和漏洞API调用情况分析。

4️⃣整合分析结果,输出对应检测报告,开发人员根据检测报告自查整改即可。

流程图及隐私策略配置见图3、图4:


图3 常态化静态安全检测流程


图4 隐私策略配置文件

本方案有两大优点,第一,可快速检测完App,输出安全检测报告,同时针对安全问题,有详细的路径说明,方便后续问题解决。第二,基于可变的隐私策略,支持json自定义隐私api、敏感api等,可扩展性强。

方案的常态化动态检测能力基于Gradle transform+ASM+Hook+动态代理编译插桩技术,最终以Gradle插件的形式应用于安全隐私检测,基于编译任务针对敏感API、隐私权限申请、网络请求实现全局插桩检测,同时输出调用堆栈,方便问题排查。此方法直接在源码编译阶段,通过ASM字节码操作框架对字节码进行修改,兼容性好,且可以全工程无缝Hook。下面是Hook敏感API “getDeviceId”的一个代码段示例。关于插桩技术末尾的参考文献有更详细的说明,这里不再细谈。

图5 Hook敏感API代码段




4、结语

大数据时代,每一个人在互联网中的画像都是“数据化”的。近年来,App成为个人信息监管的重点,工信部不断开展App侵害用户权益专项整治行动,开发者不仅要提高安全合规意识,还要一套完善的合规检测体系,切实保障用户信息安全,为App健康发展保驾护航。

参考文献

[1] https://mp.weixin.qq.com/s/rCfUAB_xqSdZ3P0x5kLNkw

[2] http://www.gov.cn/zhengce/zhengceku/2020-08/02/content_5531975.htm