USENIX Security '15 - UIPicker: User-Input Privacy Identification in Mobile Applications
论文链接:https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-nan.pdf
会议 PPT:https://www.usenix.org/sites/default/files/conference/protected-files/sec15_slides_nan.pdf
本篇论文一作南雨宏博士毕业于复旦大学,现在正在普渡大学进行博士后研究。对他的研究方向感兴趣的话可以访问他的个人主页
主要内容
随着移动应用的不断普及,移动应用的隐私问题也不断涌现。已有的工作在从静态分析、动态分析、访问控制等多个维度对隐私问题进行了深入的研究,但有一类非常重要的隐私被忽视了,那就是输入类型的隐私。不同于 GPS 这类的隐私可以用 getLastKnownLocation()
等 API 获取,用户输入型的隐私,比如身份证号,银行卡号等,不存在直接对应的 API,但对用户的重要程度不亚于 GPS 这类隐私,更令人可惜的是,这类隐私并没有得到很好的保护。
为了对安卓上隐私输入类型的隐私展开深入的研究,作者设计了 UIPicker,一款能对 Android App 进行大规模的用户输入型隐私检测的工具。UIPicker 依赖 App 的资源文件和 UI 界面中跟隐私相关的描述来定位用户输入型的隐私,其主要原理是利用一批已经标记的数据进行训练,然后使用训练得到的分类器对 App 的资源文件进行识别,定位出用户输入型的隐私。此外,UIPicker 还会通过静态分析技术,结合代码,定位那些真正相关接受用户输入型隐私的界面元素,过滤可能的误报,比如说某些隐私相关的弹窗警告。
利用 UIPicker,作者在 Google Play 的 17425 个 app 中发现了共有 35.46% 的 app 会要求获取用户输入型的隐私。在随机挑选的 200 个 app 中,UIPicker 的准确率和召回率分别达到了 93.6% 和 90.1%。基于 UIPicker,作者还设计实现了一款运行时的隐私保护机制,当包含被 UIPicker 标记的隐私的请求以不安全的形式从设备发出时,会及时提醒用户可能的隐私流失。
设计实现
UIPicker 整体架构如下,该框架主要分为两个部分,模型训练部分和隐私识别部分,具体又分为 4 个阶段:
- Stage 1: Pre-Processing
- Stage 2: Privacy-related Texts Analysis
- Stage 3: UIP Data Element Identification
- Stage 4: Behavior Based Result Filtering
Stage 1: Pre-Processing
第一步就是提取 UI 相关的描述性文本以及布局的描述性信息,比如前者一般定义在 /res/values/strings.xml
,而后者一般定义在 /res/layout/
的各个资源文件下。通过对这些提取后的文本进行处理,比如说分词、去除冗余词、词干提取后,可以得到最终的文本。
Stage 2: Privacy-related Texts Analysis
在第二步,作者使用了卡方检验来提取特征词,大致步骤就是先选去了一堆关键词比如说 username
,password
,location
作为种子,然后根据页面布局和隐私的相关性,将 Registration.xml、SignUp.xml、Login.xml 等高度相关的划分为正样本;而 Activity_main.xml、Download.xml、category_item.xml 等无关的划分为负样本,最后得到隐私相关的文本集合。
Stage 3: UIP Data Element Identification
第三步,作者使用 SVM 来训练关于用户输入类型隐私的分类器,而训练的数据主要来自上一阶段获得的隐私相关的关键词以及人工标注的一些关于财务相关的隐私信息。
Stage 4: Behavior Based Result Filtering
针对识别出的可能的用户输入型隐私,UIPicker 还会根据代码行为来进行过滤,保证最终发现的隐私来自用户输入且确实会被应用代码获取,以下图为例,由于 IB.getText()
确实获得了用户输入的信用卡号,所以这里可以确认获得了用户输入型的隐私。
Runtime Security Enhancement with UIPicker
作为 UIPicker 的补充部分,作者还提出了增加用户安全机制的方法,即将 UIPicker 发现的隐私作为 source,利用 FlowDroid 和 MalloDroid 来判断这些隐私是否有通过不安全的方式流出设备的可能性(比如 HTTP 明文,或者不安全的 SSL 传输)。
实验评估
在 Google Play 的 17425 个应用中,UIPicker 成功找到了 6179 (35.46%) 个应用包含用户输入型隐私。不同的分类和占比见下表,可以看到 35 个分类中共有 9 个分类会有超过半数的 app 收集用户输入型隐私。
如下表,经过实验可以发现用户输入型的隐私和通过系统 API 获得的隐私存在着一定的重合,但用户输入型的隐私还是覆盖了 API 所覆盖不了的比如财务信息相关的隐私。
总结
UIPicker 创新性地将用户输入型的隐私囊括到了隐私分析的范围内,有效地弥补了之前工作在这方面的空白,并且提出了一款有效的识别机制与保护机制。不过该工作也存在着一定的局限性,比如不能处理 webview 以及动态生成的页面等,在移动端开发技术趋于成熟的 2020 年,在工具的适用范围可能极大的缩小。此外 UIPicker 关注的隐私种类也较为简单,只关注了用户属性类型的输入隐私,比如姓名、手机号;经济类型的相关隐私,比如银行卡号等,其他相关的输入型隐私比如兴趣爱好、教育经历等都可以考虑在后续的工作中进行拓展。