2024年6月4日发(作者:)

高 新 技 术

2021 NO.11(上)

中国新技术新产品

基于静态污点分析的Android应用信息

泄露检测

李星政

1

黄晓昆

2

纪胜龙

3

覃铁伟

1

冯丙文

1

(1.暨南大学网络空间安全学院,广东 广州 510635;2.工业和信息化部电子第五研究所,广东 广州 511370;

3.奇安信科技集团股份有限公司,北京 100044)

摘 要:近年来,随着安卓市场的不断扩大,安卓系统的敏感数据泄露引起了越来越多的关注。为了解决安卓应

用程序可能存在的敏感信息泄露问题,该文利用静态污点分析设计了1个用于安卓应用程序敏感信息泄露的检测

方案,该方案基于Smali语言的语法特点构建针对应用程序的污点分析策略。通过构建污点流图来分析应用是否

存在信息泄露。同时,方案提出用双向分析的方法来提高检测效率。试验结果表明,该方案可以高效地检测安卓

应用中可能存在的信息泄露情况。

关键词:污点分析;静态分析;安卓

中图分类号:TP 309 文献标志码:A

0 引言

根据 Statcounte (2021)

[1]

研究显示,目前安卓以72%的

份额主导智能手机市场,远超其他移动智能操作系统。这样

庞大的市场引起大量攻击者的注意。尽管安全研究人员以及

相关公司不断地改善安卓系统,但是软件应用安全仍然是一

个严峻的问题,其中,敏感数据泄露尤为严重。因此,作为

数据检测主要手段之一的污点分析引起了极大的关注。在污

点分析

[2-3]

中,研究者通过污点分析过程中是否需要运行程

序将污点分析分为静态污点分析和动态污点分析。笔者采用

静态污点分析作为信息泄露的检测方案,静态污点分析指在

程序不运行的情况下,通过代码对程序进行分析,避免出现

路径覆盖不完整的问题。同时,该文提出通过构建双向污点

流图来加速信息泄露检测方案的检测效率。

况,这种方法无法达到一个较好的效果。张婕等人

[7]

提出

用FastDroid将污点分析和别名分析结合起来,从程序中抽

象提取污染变量关系图和潜在污染流,并对其进行验证,从

而提升检测效率。

2 检测方案的设计

为了检测Android工业App是否存在信息泄露的问题,

该文基于静态污点分析技术设计了1个信息泄露检测方案。

如图1所示,该方案主要分为3个模块,预处理模块、污点

分析模块和污点流验证模块。其中,预处理模块作为基础,

为方案的后续工作提供各种信息和配置,污点分析模块作为

方案核心,以完成系统信息泄露检测的工作,污点流验证模

块作为方案的增补,可以提高方案的准确率。该方案在预处

理模块中对待检测的软件应用进行分析,提取软件应用的各

种信息,同时配置系统的静态污点分析策略。在污点分析模

块中,根据预处理模块采集的软件信息并结合预设好的规则

对软件应用进行分析,从而构建污点流图。最后在污点流验

证模块中利用污点分析模块生成的污点流图提取软件的污

点流,在控制流图和调用关系图上进一步检查、证明污点流

的可行性。

1 相关工作

在安卓应用程序上,静态污点分析有多种应用方式

[4]

在早期的安卓安全研究中,Hu、Enck 等人

[5]

提出了几款轻

量级检测工具,这些工具基本都是通过分析请求的权限或调

用的API方法来判断安卓应用的安全性。这些方法仅对代码

进行了粗略分析,尽管这些工具的检测成本较低,但其检测

的精度也比较低,常常会出现误判和少判的情况,很难达到

一个较高的准确率。随着对信息泄露检测的重视,检测的方

[6]

案也不断进步,Arzt S等人

提出1个适用于上下文、流、

场和对象敏感的静态污点分析工具FlowDroid,它将前向污

点分析与后向别名分析结合起来,从而实现高效精确检测,

但是FlowDroid在一些大型应用程序中的运行成本较高。

在近几年的研究中,不少研究者针对安全检测的效

率和精度进行了改进,Cai等人通过减少对当前应用版本

与之前的版本中相同代码的检测来减少需要检测的代码数

量,以达到降低成本的要求,但是在没有旧版本记录的情

2.1 预处理模块

在预处理模块中,系统会根据软件应用以及预设的规则

收集应用的信息以及配置系统的检测规则。首先,系统利用

反编译工具对APK文件进行逆向处理,反编译出Dex文件等

一系列与软件相关的文件。其次,为了更好地对应用进行静

态污点分析和构建污点流图,系统会进一步根据一定规则将

Dex文件反汇编为可以被用户更好理解的Smali代码文件。再

次,系统利用词法分析算法和APK分析工具对软件应用进行

解析,从而构建与软件对应的调用关系图(Call graph,CG)

以及组件内的控制流图(Control flow graph,CFG)等分析信

基金项目:广东省重点领域研发计划项目(项目编号:2019B010136003);国家自然科学基金(项目编号:61802145,

61932010);广东省自然科学基金(项目编号:2019B010137005);广州市科技计划项目(项目编号:2);工

业App安全防护与测试服务平台(项目编号:TC200H01G)。

Copyright©博看网 . All Rights Reserved.

- 15 -

中国新技术新产品

2021 NO.11(上)

高 新 技 术

污点分析模块

预处理模块

Dex等文件

反编译

APK文件

Manifest

文件

APK分析

构建

关系图

Smali

文件

分析结果

权限过滤

污点流验证模块

CG和

CFG图

图1 检测方案

污点分析

构建污点流图

提取污点流

污点流检验

息,这些软件应用信息可以为静态污点分析模块检测软件应

用信息泄露情况提供帮助。最后,系统将预先设置好的静态

污点分析的规则与软件应用的权限申请进行匹配,根据应用

申请的权限情况对之后的信息泄露检测的规则进行配置,如

果应用申请的权限涉及敏感信息,系统便对该权限对应的规

则进行配置,反之则不配置该权限的污点分析规则,例如应

用如果存在申请外部文件读写权限的情况,系统就会增加针

对外部文件泄露检测的规则,这样避免了对应用进行不必要

的完全检测。如果应用并没有申请短信权限,但系统依旧对

应用进行的短信泄露敏感信息进行检测,就会导致浪费大量

的资源。同时,该配置可以达到有针对性检测的效果,这样

可以满足信息泄露检测的需求,从而加快检测速度。

在预处理模块中,对一个待检测的应用软件进行反编译

后会得到一些对应的Smali文件,这些Smali文件具有良好

的结构以及可读性,可以通过这些文件较好地对应用软件进

行静态污点分析。同时,通过对应用软件的静态分析,构建

该软件对应的CG图和CFG图,这些CG图和CFG图在污点

分析模块和污点流验证模块上可以较好地为函数内执行顺

序以及软件调用关系等提供帮助。最后通过过滤应用申请的

权限得到有针对性的静态污点分析策略,这个策略在后续的

模块中缩小了检测的范围,减少了不必要的工作。

关系图查询调用该函数的函数。如果发现该污点数据来自函

数返回,则根据调用的函数继续向前追踪。如果发现该污点

数据来自与Source无关的新数据,则结束该污点流。系统通

过反复函数内外的污点分析直到完成整个应用代码检测或

者检测到信息泄露的存在,即Source到Sink存在一条或多

条未经过无害化处理的信息流传播路径,则这条信息流传播

路径可能是造成敏感信息泄露的路径。

在污点分析模块中,静态污点分析作为模块中的核心功

能,其主要功能是通过分析软件构建Source到Sink的污点

流图,这些污点流图中包括Source到Sink所有的信息流传

播路径。这些污点流图将在之后的污点流验证模块中通过检

测这些路径的正确性来进一步获取更准确的污点流图,从而

得到软件的检测结果。

2.2.2 双向分析

因为在传统的静态污点分析过程中常常会随着分支语

句的出现导致分析的数据越来越庞大,最后出现检测效率降

低的情况,所以为了提高污点分析的效率,系统提出了一种

新的污点流图构建方法。该方法是通过Source和Sink同时

双向展开静态污点分析,从而减少单向分析造成多分枝的情

况,进而实现减少一个需要分析的数据流传播路径的方法。

具体来说,它首先在Source和Sink的相关Smali语句处同时

展开静态污点分析,之后根据系统预定义的污点传播规则同

时向后和向前遍历相关的Smali语句,以检测污点值及其别

名的传播,并在多次污点传播迭代后构造应用的污点流图。

如果污点流图中的Source和Sink中能够形成一条通路,则

2.2 污点分析模块

2.2.1 静态污点分析

污点分析模块主要根据配置的污点分析策略对敏感的

数据进行追踪分析,并根据信息流传播路径来判断该数据是

否存在泄露的可能性。Smali代码相较于应用原生代码更容

易被人理解和分析,因此该文针对安卓的Smali代码进行分

析,从而实现静态污点分析模块,该模块设计的污点分析过

程如图2所示。

首先,系统根据预处理模块配置的策略选择对应的

Source和Sink,并构建静态污点分析的入口点函数。其次,

通过匹配入口点函数相关的Smali语句对可能涉及的污点数

据进行标记。最后,结合预处理模块的控制流图和预设的污

点分析规则在函数内进行语法分析和污点数据追踪,如果发

生函数间的调用情况,则根据污点分析规则结合调用关系图

进入下一个函数继续进行污点分析。以外部文件泄露的Sink

点作为入口点为例,系统先将写入外部文件的数据作为污点

数据,之后定位该相关Smali语句,用该语句结合控制流图

向前分析。如果发现该污点数据来自函数参数,则通过调用

污点分析

Source和

Sink点

定位Smali

文件语句

入口函数

匹配

污点流图

CFG图

函数内污点

分析

函数调用

函数间污点

分析

图2 污点分析

- 16 -

Copyright©博看网 . All Rights Reserved.

高 新 技 术

说明该应用存在信息泄露问题。以获取位置的Source点和写

入外部文件的Sink点为例。首先,系统定位获取位置的函

数的Smali语句和写入外部文件的Smali语句。其次,根据

预设规则标记它们涉及的数据作为污点数据。最后,Source

点的污点数据向后分析,Sink点的污点数据向前分析,2种

分析交替进行,直到它们相遇或某个方向完成分析。该方法

可以更快地检测到软件信息泄露的可能性,大大减少了检测

所需要的时间。

2021 NO.11(上)

中国新技术新产品

录该工具检测应用程序所需要的运行时间,见表2。

表1 运行时间测试

检测到敏感数据写入外部文件

invoke-virtual{p2,v2,v4,v3}, Ljava/io/FileOutputStream;->write([BII)V

......

invoke-direct{p0,p1,p2},Lcom/baidu/mapsdkplatform/comapi/NativeLoader;->a(Ljava/

io/InputStream;Ljava/io/FileOutputStream;)V

invoke-static{v0,p1},Lio/jenetics/jpx/GPX;->write(Lio/jenetics/jpx/GPX;Ljava/io/

OutputStream;)V

表2 运行时间测试

测试对象

APK1

APK2

APK3

APK文件大小/MB

44

91

111

测试运行时间/s

45.86

134.49

145.58

2.3 污点流验证模块

系统中1个构建完成的污点流图必定存在1条或多条

Source到Sink的数据传播路径,可以将这些数据传播路径看

作未确认的污点流。而在污点分析模块中构建污点流图的过

程中可能会因为一些执行语句顺序上的错误产生一些错误

的判断,从而导致发现的数据传播路径是1条虚假污点流,

这种虚假污点流尽管也可以在Source和Sink中形成1条通

路,但这条路径可能在到达Sink之前就对来自Source的污

点数据进行数据替换或进行数据加密等无法找回原有数据

的操作,该情况并不会造成数据泄露。因此,系统添加1个

污点流验证模块来检测污点流是否是正确的污点流,这个污

点流验证模块对整个系统检测数据泄露的准确性起到至关

重要的作用,能够大大减少系统对应用误判的情况,提高系

统整体的准确率。

首先,在污点流验证模块中,系统通过抽取污点流图中

Source到Sink的污点值流转路径作为待验证污点流。其次,

通过结合软件的调用关系图以及控制流图来检测该污点流

是否符合软件的调用过程和执行次序,如果污点流中的污点

值流转次序不符合软件的执行次序,则判断该污点流是虚假

的污点流。最后,系统将检测为正确的污点流作为结果呈现

给用户。

从表2中可以看出,该检测工具的运行时间主要与APK

文件的大小有关,通常APK文件越大,其检测时间越长。

目前,市面上大多数的信息泄露检测工具都需要人工的

帮助来完成检测,这些检测时间周期大多为几十分钟到几天

不等。该文所提出的自动化信息检测工具从具体的执行时间

结合生活实际使用的应用来看,应用检测时间小于10 min,

完全可以满足实际工作中对时间的需求。

4 结论

该文针对安卓应用的敏感信息泄露情况提出了一个高

效的检测方案,与以往的检测方案不同,该检测方案更专注

于Source到Sink的情况,减少对应用全局的检测,从而提

高检测效率。一系列试验结果表明,该方案具有更高效的检

测效率以及更高的准确率。在未来工作中,将在该方案的基

础上提高检测的灵活性,配置更全面的检测面。

参考文献

[1] operating system market share worldwi

de[EB/OL].(2021-10-01)[2021-10-20].unter.

com/os-market-share/mobile/worldwide.

[2]任玉柱,张有为,艾成炜.污点分析技术研究综述[J].计算

机应用,2019,39(8):2302-2309.

[3]王蕾,李丰,李炼,等.污点分析技术的原理和实践应用[J].

软件学报,2017,28(4):860-882.

[4]蔺凤池,高见.Android App数据泄露的静态污点分析方法

研究[J].中国人民公安大学学报(自然科学版),2015,21(4):

34-37.

[5]胡英杰,张琳琳,赵楷,等.基于静态污点分析的Andro-

id隐私泄露检测方法研究[J].信息安全学报,2020,5(5):

144-151.

[6]ARZT S, RASTHOFER S, FRITZ C, et al. Flowdroid: Pre-

cise context, flow, field, object-sensitive and lifecycle-aware taint

analysis for android apps[J].Acm Sigplan Notices, 2014, 49(6):

259-269.

[7]张捷,田聪,段振华.基于污染变量关系图的Android应

用污点分析工具[J].软件学报,2021,32(6):1701-1716.

3 试验及分析

为了对所提出的检测方案进行验证,该文实现了一个自

动化的检测工具,同时通过该信息泄露检测工具对大量APK

进行检测,以验证其有效性。在检测工具中,笔者对设备的

敏感信息(例如位置信息、图片、设备信息和联系人等)是

否在短信、网络、蓝牙、邮件以及设备存储等渠道发生信息

泄露情况进行检测。

3.1 检测结果

在试验中,笔者通过检测一款读取用户位置信息,并把

位置信息存储为gpx文件的应用程序来测试该工具是否可以

成功的检测应用的信息泄露情况。

检测结果见表1,该工具成功地检测出安卓应用中存在

将位置信息泄露存储到内部文件的情况。同时,从检测结果

来看,该自动化检测工具可以清晰地展示应用可能造成的敏

感信息泄露的信息流传播路径,可以较好地为之后的应用修

复提供参考,具有较好的实际应用场景。

3.2 运行时间分析

为了更好地分析该方案的运行时间,笔者选择了3个生

活中不同大小、真实使用中的APK文件进行检测,同时记

Copyright©博看网 . All Rights Reserved.

- 17 -