论文精读: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的数据(如微信小程序需要访问微信步数)和用户输入。
出于性能考虑,微信对单个小程序大小有限制,复杂操作可能需要多个小程序配合完成,例如购物小程序需要调起支付小程序。此时需要用到navigateToMiniProgram
API。
3.Example & Challenges
一个例子
这个例子中就包含了各种类型的数据流动,详见原文。
与Web Apps和Mobile Apps比较
在视图层,小程序不能操作DOM;小程序支持列表/条件渲染(wx:for/if
)。
在逻辑层,JavaScript是解释型、弱类型语言;而Java类似编译型语言、是强类型语言。
挑战与研究范围
为了检测小程序隐私数据潜在的泄露风险,有三类数据流目前还没有现有的污点分析技术解决:
WXML和JavaScript的互相作用,如行内逻辑wx:for/if/else
,wxs
代码块
异步回调:执行的顺序取决于外部系统,如用户的行为,无法预先知晓
跨页和跨小程序数据流动
本文只研究微信平台小程序。微信小程序体量大、微信也是最早提出“小程序”概念的。
4.Design
UDFG Generation
第一步是生成UDFG(通用数据流图,Universal Data Flow Graph
),这是论文提出的新概念:
UDFG包含两个重要结构:
Data Node
:数据流分析的最小粒度,可能是一个JS对象或WXML标签;生成方式是通过给每个页面JS文件生成AST,此过程会合并通过模块化导出/导入但最后组成同一页面的文件。
Event Group
:事件组有一个非常重要的性质,就是事件组的代码同步执行;同一个JS对象节点可以属于不同的事件组。
Data-Flow Propgation
这一部分论文用数学形式给出了追踪数据传播的过程:
先看Notations:
第一、二条很好理解,只是用符号表示了UDFG的两个重要结构;
第三条表示一条语句(原文是p-th JavaScript code statement
,但的数值并不重要)属于事件组,并且由于事件组同步执行,一定会存在一个语句被执行的次序;
第四条也好理解;
第五条描述的情况是,由微信官方架构所致,必然同步地在后执行,例如生命周期之间存在执行的先后顺序;
第六条表示事件组中有对的调用,并且调用的语句是,这就暗含了一个性质:事件组中执行次序大于的语句,会与事件组,这就暗含了一个性质:事件组中执行次序大于的语句,会与事件组异步执行。如果文字描述不够直观可以参考下面的例子:
这个例子中就是request
函数,后续的console.log
语句就是中执行次序大于的语句,它们会与异步执行。
然后是Rules:
第一、二条可以概括为“事件组的传递性”,第一条是官方架构所致的传递关系,第二条是间接调用导致的传递关系;
第三、四条描述了数据的同步传递;
后三条涉及一个关键思想,乐观地(原文是optimistically
)检测数据流动:对于不确定执行顺序的异步数据流,有可能性即视为可以流动。
关于第五、六条,为什么第六条多了一个的与条件,参考下面的例子:
在两条规则、分别和共四种可能的情况中,有一种情况是必然会有到的数据流动,两种情况是可能会有(取决于异步执行的情况),只有一种情况是不可能发生数据流动的;根据前面提到的乐观原则,仅将这一种情况排除在外(也就是第六条规则但的情况)。
第七条同样是乐观原则的体现:没有任何约束关系的事件组,执行顺序也是任意的,因此也存在数据流动的可能性,也要考虑这种数据流动。
Data-Flow Resolution
TaintMini的目标是分析污点源和污点汇。
5.Evaluation
数据集来源于爬取并经过查重后的238866
个小程序。精度方面,人工分析了100
个小程序作为Ground Truth,其中有0%
的FP
,5%
的FN
(由于用户使用了非官方 API,或直接从input
收集手机号)。性能方面,平均运行时间为3.73s
,检测出11.38%
存在敏感数据流。
6.Application
其中一个应用是检测恶意小程序。例如,研究团队发现了一个游戏小程序接收了其他小程序传来的位置信息,并且通过网络请求发送出去。认为该程序可能是恶意应用。
7.Discussion
研究的一些局限包括:
没有考虑隐式数据流(污点变量在条件分支中)
存在一些FN(可能要诉诸动态分析了)
可以拓展到其他平台
8.Related Works
略。
9.Conclusion
论文提出了静态污点分析框架TaintMini,可以检测微信小程序中敏感数据的流动。