本页目录

论文精读:TAINTMINI: Detecting Flow of Sensitive Data in Mini-Programs with Static Taint Analysis (ICSE 2023)

相关链接:

1.Introduction

小程序市场发展迅速,已有的针对Mobile Apps的污点分析技术在以下情况存在一些不足:

多语言(WXML/JavaScript)

大量的异步event handler(例如生命周期onLaunch/onReady

跨页数据流动

跨小程序数据流动

针对这些不足,TaintMini会追踪如下数据流:

WXML视图层 ~ JavaScript逻辑层

events ~ events

page ~ page

Mini-Program ~ Mini-Program

论文的主要贡献是:

提出了一种新的污点分析技术,拓展ODG(Object Dependency Graph)为UDFG(Universal Data Flow Graph)

实验评估,238866个小程序中有11.38%出现了隐私数据流;

实际应用,检测恶意应用。

2.Background

小程序主要有app.json/JavaScript/WXML/WXSS四个部分,其中WXSS不包含数据流;通常敏感数据的来源是需要申请操作系统权限的操作(如定位、蓝牙)、来自host-app的数据(如微信小程序需要访问微信步数)和用户输入。

出于性能考虑,微信对单个小程序大小有限制,复杂操作可能需要多个小程序配合完成,例如购物小程序需要调起支付小程序。此时需要用到navigateToMiniProgramAPI。

3.Example & Challenges

一个例子

img

这个例子中就包含了各种类型的数据流动,详见原文。

与Web Apps和Mobile Apps比较

img

在视图层,小程序不能操作DOM;小程序支持列表/条件渲染(wx:for/if)。
在逻辑层,JavaScript是解释型、弱类型语言;而Java类似编译型语言、是强类型语言。

挑战与研究范围

为了检测小程序隐私数据潜在的泄露风险,有三类数据流目前还没有现有的污点分析技术解决:

WXML和JavaScript的互相作用,如行内逻辑wx:for/if/elsewxs代码块

异步回调:执行的顺序取决于外部系统,如用户的行为,无法预先知晓

跨页和跨小程序数据流动

本文只研究微信平台小程序。微信小程序体量大、微信也是最早提出“小程序”概念的。

4.Design

UDFG Generation

第一步是生成UDFG(通用数据流图,Universal Data Flow Graph),这是论文提出的新概念:

img

UDFG包含两个重要结构:

Data Node:数据流分析的最小粒度,可能是一个JS对象或WXML标签;生成方式是通过给每个页面JS文件生成AST,此过程会合并通过模块化导出/导入但最后组成同一页面的文件。

Event Group:事件组有一个非常重要的性质,就是事件组的代码同步执行;同一个JS对象节点可以属于不同的事件组。

Data-Flow Propgation

这一部分论文用数学形式给出了追踪数据传播的过程:

img

先看Notations:

第一、二条很好理解,只是用符号表示了UDFG的两个重要结构;

第三条表示一条语句(原文是p-th JavaScript code statement,但的数值并不重要)属于事件组,并且由于事件组同步执行,一定会存在一个语句被执行的次序

第四条也好理解;

第五条描述的情况是,由微信官方架构所致,必然同步地在后执行,例如生命周期之间存在执行的先后顺序;

第六条表示事件组中有对的调用,并且调用的语句是,这就暗含了一个性质:事件组中执行次序大于的语句,会与事件组,这就暗含了一个性质:事件组中执行次序大于的语句,会与事件组异步执行。如果文字描述不够直观可以参考下面的例子:

img

这个例子中就是request函数,后续的console.log语句就是中执行次序大于的语句,它们会与异步执行。

然后是Rules:

第一、二条可以概括为“事件组的传递性”,第一条是官方架构所致的传递关系,第二条是间接调用导致的传递关系;

第三、四条描述了数据的同步传递;

后三条涉及一个关键思想,乐观地(原文是optimistically)检测数据流动:对于不确定执行顺序的异步数据流,有可能性即视为可以流动。

关于第五、六条,为什么第六条多了一个的与条件,参考下面的例子:

img

在两条规则、分别共四种可能的情况中,有一种情况是必然会有的数据流动,两种情况是可能会有(取决于异步执行的情况),只有一种情况是不可能发生数据流动的;根据前面提到的乐观原则,仅将这一种情况排除在外(也就是第六条规则但的情况)。

第七条同样是乐观原则的体现:没有任何约束关系的事件组,执行顺序也是任意的,因此也存在数据流动的可能性,也要考虑这种数据流动。

Data-Flow Resolution

TaintMini的目标是分析污点源和污点汇。

5.Evaluation

数据集来源于爬取并经过查重后的238866个小程序。精度方面,人工分析了100个小程序作为Ground Truth,其中有0%FP5%FN(由于用户使用了非官方 API,或直接从input收集手机号)。性能方面,平均运行时间为3.73s,检测出11.38%存在敏感数据流。

6.Application

其中一个应用是检测恶意小程序。例如,研究团队发现了一个游戏小程序接收了其他小程序传来的位置信息,并且通过网络请求发送出去。认为该程序可能是恶意应用。

7.Discussion

研究的一些局限包括:

没有考虑隐式数据流(污点变量在条件分支中)

存在一些FN(可能要诉诸动态分析了)

可以拓展到其他平台

8.Related Works

略。

9.Conclusion

论文提出了静态污点分析框架TaintMini,可以检测微信小程序中敏感数据的流动。