PrivacySentry——隐私合规检测工具分析

PrivacySentry——隐私合规检测工具分析
 引言 
01


1.1 APP 违规收集使用个人信息现象频发


随着移动互联网的兴起,在移动智能设备上安装移动APP成为了人们享受服务提供商提供服务的主要方式之一。但厂商无论是出于任何的目的,或多或少都在 APP 上存在强制授权、过度索权、超范围收集个人信息的现象,违法违规使用用户个人信息的问题十分突出。

为切实加强用户个人信息保护,为人民群众提供更安全、更健康、更干净的信息环境,国家工业和信息化部开展了《纵深推进APP侵害用户权益专项整治行动》,以及发布了《App违法违规收集使用个人信息行为认定方法》(以下简称《认定方法》)。《认定方法》对“未公开收集使用规则”、“未明示收集使用个人信息的目的、方式和范围”、“未经用户同意收集使用个人信息”、“违反必要原则,收集与其提供的服务无关的个人信息”、“未经同意向他人提供个人信息”和“未按法律规定提供删除或更正个人信息功能”或“未公布投诉、举报方式等信息”六大类行为违规行为做了定义,对APP 收集使用个人信息做了明确规范。

为了落实应用商店主体管理责任,加强应用上架审核,督促APP负责人及时整改消除违规行为,从2021年4月13日00:00开始,所有提交上架到各大应用市场的 APP,都需要经过隐私合规性检测,只有通过该检测且没有其他违反审核规则内容前提下,APP才可以正常上线。对于已经上架的 APP,如果存在违规收集使用个人信息的情况,那么将被下架处理。于是,APP 隐私合规整改就冲上了各大媒体的热搜,大家也能够发现,自从 2021年4月以来,不少 APP 都更新了版本,其中大多数的版本更新说明中,都包含了隐私政策更新等关键词。同时,APP 隐私合规检测工具和检测平台也突然有了很大的市场。


1.2 个人信息定义APP可直接访问信息


2018年5 月开始实施的国家标准《信息安全技术-个人信息安全规范》(GB/T 35273—2017)对个人信息进行了定义,包括:个人基本资料、个人身份信息、个人生物识别信息、网络身份标识信息、个人健康生理信息、个人教育工作信息、个人通信信息、联系人信息、个人财产信息、个人教育工作信息、个人上网记录、个人位置信息、个人常用设备信息和其他信息。其中个人设备常用设备信息包括:硬件序列号、设备 MAC地址、软件列表、唯一设备识别码、设备 MAC 地址、软件列表、唯一设备识别码(如IMEI/android ID/IDFA/OPENUDID/GUID、SIM 卡IMSI信息)等在内的描述个人常用设备基本情况的信息。

一般情况下,APP 出于各种目的,会在安装或运行时申请相应的隐私权限,这些权限包括:读取设备常用信息、访问相册、访问相机、访问通讯录等。上述这些信息是 APP 在用户授权下能够进行访问到的。尽管绝大多数的敏感信息都需要用户授权才能够访问,但由于大多数用户对个人信息安全缺乏一定的认识,经常会在 APP 诱导下授权过多的隐私访问权限,最终导致隐私被侵害.

1.3 APP 隐私合规检测工具


所谓 APP 隐私合规检测工具,就是通过自动或手动的方式记录 APP 在使用过程中所请求或调用的敏感权限的次数。再根据 APP 中的隐私政策进行对比来判定是否存在违规收集使用个人信息的情况。而检测平台就是提供这些自动化 APP 隐私合规检测工具的平台。

在 GitHub 开源社区开源的 PrivacySentry 项目,就是一个功能较为完备的APP 隐私合规检测工具,该工具通过修改 ASM 字节码的方式来 Hook 安卓平台上调用设备信息、获取敏感权限等操作来记录 APP 收集和使用个人信息的记录。并将其记录汇总输出 xls 文档,由于其开源且功能强大,非常适合个人开发者及一些初创公司用来进行 APP 隐私合规自我审查。

本文首先以一个 Demo APP 来介绍 PrivacySentry 的使用方法,然后深入 PrivacySentry 的项目代码,分析其 ASM 字节码修改和 hook 技术。


PrivacySentry——隐私合规检测工具分析
 PrivacySentry 项目演示 
02


2.1 Demo 演示


首先下载项目代码,将其拖入 Android Studio后,经过 Gradle 编译,运行,效果如图 1所示:

PrivacySentry——隐私合规检测工具分析

图1,隐私 Demo 项目演示


对模拟器中的提供的功能按钮进行逐一操作,如:测试 IMEI、测试 IMSI、测试 MAC 地址等设备信息读取操作,然后滑到最底部点按“结束当前检测-导出结果”按钮,通过 adb 工具读取APP 目录下的 demo.xls 文件,文件如图 2 所示:

PrivacySentry——隐私合规检测工具分析

图2,Demo 个人信息收集记录


PrivacySentry——隐私合规检测工具分析
 PrivacySentry 项目分析 
03


3.1 Privacy Sentry 技术思路


PrivacySentry 作为一款供开发者自行使用的隐私合规检测工具,与传统的 hook 方案有所不同,它在Gradle编译期对需要 Hook 的 function 或类加注解。再使用ASM结合Transform对已经注解的 function 进行编译插桩。具体如图 3所示。

PrivacySentry——隐私合规检测工具分析

图3,Privacy Sentry 技术思路


所以这里面有个很重要的概念,就是 ASM 字节码修改。关于ASM 字节码修改,一起来看下一小节。


3.2  什么是ASM

根据 ASM 官网的介绍,ASM 是一款通用的JAVA 平台字节码修改和分析框架。ASM 能够被用于直接在二进制层面修改现有的或生成新的class 文件。ASM还提供了一些常用的字节码转换和分析算法,可以用于构建自定义、复杂的转换和分析工具。当然,ASM 还有其高性能、使用简单等特点,使其非常适合在动态系统或动态分析中使用。ASM 由于上述的功能和特点,被众多开发者用于在 JAVA 应用程序中进行埋点、插桩和对控件的监控。


ASM 的核心包是 org.objectweb.asm,该包定义了ASM Visitor API,提供了ClassReader和ClassWriter类来读写编译后的Java class文件。ClassReader 用于访问class 文件的结构,ClassWriter可以用来生成新的 class 文件。


3.3  什么是Transform

前文提到的 ASM 技术是用于字节码修改的框架,那么应该在何处以及何时进行字节码修改还是个问题,所以需要引入Transform。Gradle 1.5.0 以后开始提供 Transform API, Transform 是提供开发者在项目构建时期用来修改 class 文件的一套标准 API,用于将输入的 class文件转换为目标字节码文件。用户可以自定义 Tranform 来实现自己的字节码处理逻辑。


Transform 提供了获取所有class 文件集合的方法,所以可以在 Gradle编译过程中,引入 Transform, 让 Transform 接管从 class 文件生成到目标字节码的工作,接管以后,就能够获取到所有的 class 文件,而再通过 ASM 字节码修改,就能够完成 Hook 操作。


3.4  PrivacySentry 框架结构

3.4.1 注解插件 privacy-annotation

privacy-annotation 是对 java.lang.annotation 的一个封装。其存在的意思主要是为了给需要 Hook 的function 增加注解,对不同的属性构建了不同的注解类,对于需要注解的类命名为 PrivacyClassProxy,对于需要注解的method 命名为 PrivacyMethodProxy。


3.4.2 Tranform插件 plugin-sentry

plugin-sentry 的工作主要使用 Gradle 编译时插件 Tranform 的运用,首先使用 Transform 接管 class 文件转目标字节码的工作,然后使用 ASM 的ClassReader 解析class 文件的结构,收集带有privacy-annotation注解的类和 method。再次使用Transform,运用 ClassReader 修改字节码。


3.4.3 Proxy插件 privacy-proxy

privacy-proxy 主要工作是,定义 hook 规则以及设置代理方法。即需要 hook 的 method,只需要在在privacy-proxy 中增加,并且设定其代理方法即可。针对个人信息或设备信息的收集主要包括三大类,第一类是获取设备信息 API的拦截PrivacyProxyCall类,一般需要拦截的 API有:getRunningTasks(获取当前运行的任务)、getRecentTasks(获取最近运行的任务)、getInstalledPackages(获取设备已安全程序列表)、getPrimaryClip(获取剪贴板内容)、getSSID(获取 wifi名称)、getDeviceId(获取设备 id)、getImei(获取设备 IMEI )、getMacAddress(获取 MAC 地址)等等;第二类是获取用户个人信息,主要是针对联系人,通讯录,日历等等,该类为PrivacyProxyResolver类;第三类是获取设备传感器数据,名为PrivacySensorProxy类。


3.4.4 控制业务代码 hook-sentry

hook-sentry 是整个程序的业务层代码,主要包括日志管理、调用栈导出管理、各插件的联动管理、检测工具初始化等。

       

原文始发于微信公众号(山石网科安全技术研究院):PrivacySentry——隐私合规检测工具分析

版权声明:admin 发表于 2022年11月14日 上午11:22。
转载请注明:PrivacySentry——隐私合规检测工具分析 | CTF导航

相关文章

暂无评论

暂无评论...