随着个人信息保护法的实施和用户隐私意识的提高,深入理解小程序隐私信息使用情况刻不容缓。我们开发了MiniTracker,是一款专门针对小程序的自动敏感信息流跟踪工具,旨在提高小程序的数据处理透明度和安全性。目前该工作已发表于安全领域顶级期刊TDSC (CCF-A)。
一、研究背景
检测隐私泄露的一个主要方法是静态污点流分析,即追踪数据流从敏感的源点(source)流向不受信任的汇聚点(sink)。然而,小程序以下的特点,给静态污点流分析提出了独特的挑战:
- 小程序的主要特点是它与用户有大量的交互,这带来了两个挑战
- C1:需要追踪小程序渲染层和逻辑层之间的数据流。这里的难点在于跨语法数据流的追踪。渲染层的语法类似于HTML,如微信的WXML;而逻辑层由JavaScript编写。许多敏感信息,如用户输入,可以从HTML元素流向JavaScript对象。
- C2:处理异步数据流。小程序非常依赖异步执行来确保流畅的用户体验,例如等待GUI事件或网络请求来产生结果。许多敏感API,如“getLocation”,都是异步调用的。
- 小程序的另一个特点是它由JavaScript开发,这个分析数据流带来了2个挑战
- C3: 识别JavaScript对象的属性链。属性链是由点连接起来的一系列属性,例如“a.b.c”。由于JavaScript的动态和反射特性,在小程序中跟踪对象的属性,很难平衡精度和效率。
- C4: 识别函数别名。小程序的模块化结构允许将API封装到模块并存储到单独的文件中。因此,函数别名可以跨文件并分配给不同对象。
二、MiniTracker
为了解决这些挑战,本文提出了污点分析工具MiniTracker
来追踪小程序的隐私泄漏。如上图所示,它包含3个部分:taint tracker
、util analyzer
和page analyzer
taint tracker
是核心组件,它在JavaScript对象粒度上应用基于属性链的分析,较好地平衡了分析的精度和效率(C3)。具体来说,taint tracker
首先构建赋值流图(assignment flow graph),然后使用一个worklist算法来跟踪污染流。- 为了识别由模块化结构引入的函数别名(C4),
util analyzer
递归地识别封装起来的source和sink。 - 为了检测渲染层和逻辑层之间的数据流(C1),
page analyzer
显式地将与HTML文件关联的数据流集成到每个页面的JavaScript流中,并合并每个页面的流以检测跨文件的隐私泄漏。 - 为了解决异步数据流的调整(C2),
MiniTracker
理解异步流并将其等效地转换为同步流,以便进行统一分析。
三、实验验证
本文通过一个包含了65个测试小程序的Benchmark,以及156490个微信和百度的小程序对MiniTracker进行了验证。
在Benchmark上的研究
- 本文根据前人构建benchmark的原则,设计了65个小程序测试用例,其中54个包含一个隐私泄露,11个没有隐私泄露。评测套件中的小程序根据类别被分成了13个子类。
- 本文选择CodeQL和TaintMini做baseline。CodeQL是一个流行的商用污点流分析工具,TaintMini是一个专门针对小程序的静态污点分析工具,发表于2023年软件工程顶级会议 ICSE。
- 实验结果如下表所示,结果表明: MiniTracker的召回率比CodeQL高34.3%,比TaintMini高63.0%,说明MiniTracker能有效地捕捉小程序的数据流。
在微信和百度的小程序上的大规模研究
我们的主要发现有:
- source的特点:微信和百度小程序的主要source API来自开放API类。这类API能够访问存储在手机应用中的用户信息,如果它们被利用,将构成重大的隐私风险
-
sink的特点:微信和百度小程序中的top sink分布是相似的,网络请求是主要的泄漏。
-
污点流的复杂性:污点流表现出高度的复杂性,其特征是大量的异步流以及对封装的source和sink API的利用。
- 小程序行为与隐私策略不一致。大多数小程序缺乏正式的隐私政策,即使有,它们的政策也经常与数据收集行为不一致。在我们研究的小程序中
- 86,407个(占81.6%),并未具体说明隐私政策,而是含糊地引用了微信的隐私指南。这些指南并不构成正式的隐私政策,提供的信息很少。
- 超过1%的小程序(1,439个)声称不收集私人信息,但 MiniTracker 检测到其中604个实际上进行了数据收集,主要泄露的数据包括图片、文件和用户信息。
- 其余17,512个(占16.5%)小程序提供了正式的隐私政策,这些政策是通过填充微信提供的模板制定的。我们设置了规则来提取关键词,并将它们映射到源API。我们的工具检测到其中8,300个小程序至少有一处未在隐私政策中声明的数据泄露。
其他
论文链接:https://ieeexplore.ieee.org/document/10197457
代码和benchmark链接:https://github.com/flyboss/MiniTracker/
不明觉厉