原文作者:Luca V erderame, Davide Caputo, Andrea Romdhana, Alessio Merlo
原文标题:On the (Un)Reliability of Privacy Policies in Android Apps
原文链接:https://arxiv.org/pdf/2004.08559.pdf.
原文来源:Proc.of the IEEE International Joint Conference on Neural Networks (IJCNN 2020)
笔记作者:CJRTnT@SecQuan
摘要
该论文将静态分析、动态分析和机器学习三者相结合,以验证安卓apps是否:
(1)包含符合Google Play隐私指南的隐私政策
(2)仅在用户接受该政策时才访问隐私敏感信息
介绍
应用程序为了增加用户黏性,需要持续“监控”用户的偏好和需求,但是这样的“监控”往往涉及到隐私和敏感信息,Google Play Store也在2020年发布了有关安卓应用隐私指南的详细文件——强制要求安卓应用提供隐私政策来通知用户该app如何收集、使用、共享和处理这些信息。
目前已有的(检测安卓apps隐私政策合规性与应用行为一致性的)方法的缺陷:
(1)仅使用静态分析,很难识别到真正侵犯隐私的样本
(2)仅对应用程序上传在Google Play Store上的隐私政策页面进行分析,这样的隐私政策页面可能与apps运行时实际提示给用户的隐私政策不同
(3)不能判断apps是否在用户接收隐私政策后才对个人敏感信息进行访问
背景
安卓apps取得隐私信息的方法
当前安卓apps取得用户个人隐私信息的方法主要有:
(1)安卓平台的API。这些API是与应用权限相关联的,API的调用被限制在具有所需权限集的应用程序中,且安卓应用程序必须通过在它们的AndroidManifest.xml文件中一个名为uses-permission的特定标签中声明权限以请求权限
举例:如果一个应用程序希望从联系人列表中读取数据,它必须在AndroidManifest.xml文件中声明“android.permission.READ _ CONTACTS”权限,以便被允许调用相应的API(例如getPhoneNumbers)。然后,应用程序第一次尝试访问应用程序接口时,会提示用户权限授予请求。如果用户接受,此后应用程序可以调用该应用程序接口。
应用权限—PSI(personal and sensitive information)—API的对应关系如图1所示:
图1
(2)嵌入apps的第三方库。如:analytics libraries、Ad Network libraries,图2展现了InMobi库的API-PSI对应关系:
图2
谷歌隐私指南
Google Play隐私指南中的技术要求(TR1~6)和内容要求(CR1~2)如图3所示:
图3
评估app隐私政策的合规性的方法
该论文提出了一种基于静态分析、动态分析和机器学习技术相结合的新方法,总体框架如图4所示:
图4
A. PSI Mapping——实现方法:使用MongoDB数据库存储PSI、API、Android权限和第三方库之间的映射
该数据库包含收集、使用或处理PSI的各种API(如图1、图2)。
B. App Analyzer——实现方法:基于Androguard的方法
反编译一个APK,并提取
(1)应用程序请求的权限列表
(2)应用程序中包含的第三方库列表
然后,该模块查询PSI Mapping以确定权限或库是否是隐私敏感的,如果是,它会请求PSI和相关的API的列表。之后,将PSI列表发送给CR Checker、将API列表发送给PAPI Monitor。最后,触发动态测试环境并进行动态分析。
C. DTE(Dynamic Testing Environment)——实现方法:在基于Android 6.0并具有root权限的仿真设备上执行,并使用了Frida动态代码检测工具
该模块负责在设备模拟器中安装和执行应用程序,执行应用程序后,通知PAPI Monitor和Privacy Policy Page Detector (3P Detector)开始分析。
D. Privacy Policy Page Detector(3P Detector)——实现方法:使用UI Automator工具提取app界面的XML;使用NLTK库预处理文本;使用TensorFlow库的基于多层感知器(MLP)的文本分类器来识别政策页面
该模块负责搜索、识别安卓应用程序内部的隐私政策页面,其总体算法如图5所示:
图5
row5:取得app当前界面的XML内容
row6-8:确定提取的页面的文本内容是否包括隐私政策-使用了基于机器学习的文本分类算法(多层感知器分类器),包含了预处理和分类两个步骤。
row9-11:如果检测到隐私政策,则退出循环
row12-13:如果检测出不是隐私政策,便向app发送指令(例如滑动或点击命令)以到达下一个页面
row14:将所有进行过的指令进行记录并形成到达该页面所需的指令列表,该列表会被发送到TR Tester,以评估是否符合图3的要求
row16-18:如果成功检测到隐私政策页面,便会将隐私政策文本、XML文件和指令列表返回
由于app需要满足图3中的TR2,因此期望在一个阈值的指令数量内到达隐私政策页面;如果该模块在输入指令的最大限制内找不到隐私政策页面,则此应用被标记为不合规。
E. Privacy API Monitor (PAPI Monitor)
在用户明确接受隐私政策页面之前,该模块验证应用程序是否调用了任何与PSI相关的 API。
F. Technical Requirement (TR) Tester——实现方法:DTE模块和UI Automator
该模块负责检测app是否满足图3中的所有TR,使用的算法如图6所示:
图6
row1-3:检测是否有明确的用户接受隐私政策的元素(如复选框等)
row4:检测上一步获得的页面(政策页面)是否在阈值内过期或自动关闭,以验证图3中的TR6
row8-10:为了验证图3中的TR5,在上一步的基础上首先按下home键,再重新打开app,如果不再显示政策页面,则该app认为离开政策页面是一种接受该政策的行为,便是不符合规范的
row11-13:退回并重复实验
G. Content Requirement (CR) Checker——实现方法:NTLK库将隐私政策拆分为句子;使用多个模型识别句子中的PSI
由于在App Analyzer中已经获得了app的PSI列表,该模块则负责验证隐私政策页面是否按照CR1成功声明了app请求的所有PSI。
(1)识别其中的PSI集合
(2)检查句子是否为肯定的(如“我们访问您的联系人”或“我们不访问您的联系人”)
(3)验证PSI是否被第三方库访问
该模块使用机器学习的方法,为每个PSI识别最有意义的关键字,并创建两个不同的集合——第一组用于预处理政策文本,并提取包含至少一个关键词的所有句子,这些关键词与正在验证的PSI的数据类型相关联(如对于位置PSI,我们使用“位置”或“GPS”等术语)。之后,CR Checker使用第二组关键词来构建unigram和bigram features,这些关键词指的是给定PSI可用的行为(如对于位置PSI,我们使用“共享”等术语)。之后,提取出的特征用于对政策进行分类,最后确定PSI的所有部分是否都包含在政策中,结果如图7所示:
图7
实验结果
实验结果如图8所示:
图8
图8显示只有5.5%的apps符合Google Play隐私准则。其中,4.6%是不访问任何PSI的apps,因此不需要隐私政策。
模型性能如图9所示:
图9
其他
此论文的相应代码(3PDroid)已开源,见https://csec.it/3pdroid/
安全学术圈招募队友-ing, 有兴趣加入学术圈的请联系secdr#qq.com
本文始发于微信公众号(安全学术圈):On the (Un)Reliability of Privacy Policies in Android Apps
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论