Android应用的静态分析:系统文献综述外文翻译资料

 2022-11-24 16:02:09

英语原文共 5 页,剩余内容已隐藏,支付完成后下载完整资料


Android应用的静态分析:系统文献综述

Li Lia,TegawendeF Bissyandea,Mike Papadakisa,Siegfried Rasthoferb,Alexandre Bartela,Damien Octeauc,Jacques Kleina,

Yves Le Traona

卢森堡卢森堡大学安全,可靠性和信任的跨学科中心(SnT)bFraunhofer SIT,德国达姆施塔特斯康星大学和宾夕法尼亚州立大学

摘要:

上下文:静态分析利用分析程序源代码或字节码的技术,通常遍历程序路径来检查某些程序属性。针对不同的任务提出了静态分析方法,包括评估Android应用程序的安全性,检测应用程序克隆,自动生成测试用例,或发现与性能或能源相关的非功能性问题。因此,文献提出了大量的作品,其中每个作品都试图解决程序分析器在处理Android应用程序时面临的一个或多个挑战。

目标:我们的目标是提供静态分析Android应用程序的最新作品的清晰视图,从中突出静态分析方法的趋势,确定焦点所在的位置,并列举关键方面未来的研究仍然需要。

方法:我们进行了系统文献回顾(SLR),其中涉及过去5年(2011年1月 - 2015年12月)在软件工程,编程语言和安全场所发表的124篇研究论文。该评价主要在五个方面进行:该方法所针对的问题,作者使用的基本技术,所考虑的静态分析敏感性,所考虑的Android特性以及所执行评估的规模。

结果:我们深入的检查导致了几个主要发现:1)静态分析主要用于揭示安全和隐私问题; 2)Soot框架和Jimple中间表示是最常用的基本支持工具和格式; 3)污点分析仍然是研究方法中应用最多的技术; 4)大多数方法支持多种分析灵敏度,但很少有方法考虑路径敏感性; 5)没有提出任何单独的工作来解决与Android编程有关的静态分析的所有挑战;和6)只有一小部分最先进的作品已经公开提供他们的文物。

结论:为了实现稳定和高度精确的静态分析器,研究界仍然面临着构建隐式流,动态代码加载特性,反射调用,本机代码和多线程的方法的许多挑战。

一 简介

自2008年9月首次发布商业版本以来,Android手机操作系统在制造业,移动用户和软件开发社区得到了稳步采用。仅仅几年之后,在2015年,每月有超过10亿的Android用户,而其官方市场(Google Play)列出了超过150万个应用。由于Android在2014年第三季度占移动设备销售量的83.1%[1],导致发展社区向地方转移的势头增加Android作为“优先”目标平台[2]

由于Android应用程序现在覆盖所有用户活动,因此设计不当和恶意应用程序已成为严重威胁,可能导致各种严重程度的损害(例如,应用程序崩溃,恶意软件发送溢价短信所带来的财务损失,声誉受私人数据影响泄漏等)。来自反病毒供应商和安全专家的数据定期报告Android生态系统中恶意软件的崛起。例如,G DATA报告说2015年第二季度收集的560,671个新的Android恶意软件样本比同年第一季度发布的恶意软件增加了27%[3]。为了解决上述威胁,研究机构研究了Android开发的各个方面,并提出了大量的程序分析来识别语法错误和语义错误[4,5],以发现敏感性数据泄露[6,7],以发现漏洞[8,9]等。在大多数情况下,这些分析是静态执行的,即在没有实际运行Android应用程序代码的情况下,为了不仅确保定位时的可伸缩性成千上万的商店应用程序,但也保证遍历所有可能的执行路径。不幸的是,Android程序的静态分析并不是一件小事,因为必须考虑到Android的几个特定功能,以确保分析的完整性和完整性。设计和实现高性能工具的常见障碍包括需要支持Dalvik字节码分析或翻译,缺少启动调用图构造的主要入口点以及对整个Android程序所通过的事件处理程序进行说明的约束作品。除了这些特定的挑战之外,Android为分析Java程序带来了诸多挑战,例如如何解决Java反射语句的目标以及处理动态代码加载。因此,尽管社区做出了很多努力,但最先进的工具仍然受到缺乏对某些分析功能支持的挑战。例如,最先进的FlowDroid [6]污点分析器不能跟踪组件间的数据泄漏,因为它不知道Android的组件间通信(ICC)方案。更多最近关注ICC呼叫的工具可能不会考虑反射呼叫。

由于Android应用程序的静态分析中存在各种各样的问题,因此对于已经生成大量方法和工具的领域来说,重要的是要反思已经完成的内容以及还需做什么。尽管最近一项关于Android安全性的调查提到了一些众所周知的静态分析方法,但是目前的一些重要内容已经被忽略。此外,该研究仅关注Android安全性研究的一般方面,忽略了所使用的静态分析的基本特征,并且缺少对某些Android特定功能(如XML布局或ICC)的支持的深入分析。

本文旨在满足对Android应用程序进行静态分析的综合研究需求。为了达到我们的目标,我们对这些方法进行了系统文献回顾(SLR)。在彻底识别出相关研究出版物集之后,我们进行趋势分析,并详细概述Android应用程序静态分析的关键方面,例如静态分析的特性,Android特有的功能,解决的问题(例如安全或能源泄漏)以及一些基于评估的实证结果。最后,我们总结了目前Android应用程序静态分析的局限性,并指出了潜在的新的研究方向。

本文的主要贡献是:

我们构建了一个全面的,可搜索的研究工作库3,用于处理Android应用程序的静态分析。这些作品按照与支持通用分析特性以及Android特定问题有关的几个标准进行分类。

我们详细分析了静态分析的关键方面,以总结研究工作和达成的结果。

我们进一步列举了目前静态分析方法(Android)的局限性,并提供了潜在的新研究方向的见解。

最后,我们提供该研究领域的趋势分析,以报告关键分析问题的最新焦点以及成熟度水平。

该文件继续如下。 第2节解释了静态分析和Android系统的必要背景。 第3节介绍了我们为文献回顾所遵循的方法。 第4部分介绍我们从主要选择的论文中提取的数据,第5部分利用我们提取的数据回答提出的研究问题。 在第6节和第7节中,我们分别讨论了我们的发现和对本研究有效性的潜在威胁。 第8节讨论相关工作,第9节结束本文。

二 有关Android和静态分析的背景信息

我们现在向读者提供初步的细节,这些细节对于理解我们已经审查过的各种研究工作的目的,技术和关键问题是必要的。 主要是,我们总结了第2.1节中的静态分析的各个方面,然后再回顾第2.2节中的Android编程模型的一些细节。

2.1 静态程序分析的概念

静态程序分析通常涉及一个自动化工具,它将一个程序的源代码(或某些情况下的目标代码)作为输入,检查此代码而不执行它,并通过检查代码结构,语句顺序以及变量值通过不同的函数调用进行处理。静态分析的主要优点是对所有代码进行分析。这不同于动态分析,其中部分代码只能在分析阶段无法满足的某些特定条件下执行。典型的静态分析过程开始于根据分析目的将分析的应用程序代码呈现给一些抽象模型(例如,调用图,控制流图或UML类/序列图)。这些抽象模型实际上提供了一个简化的接口,用于支持上层客户分析,例如污点分析。也可以收集其他信息,例如在CFG的不同语句处的变量值(例如,从常数值传播),以允许静态分析支持更深入的验证,例如通过数据流分析。

我们现在简要总结静态分析的关键概念,包括主要分析技术(2.1.1节),调用图的构造(2.1.2节)和调用图浓缩相关技术(2.1.3节)。有关更多细节,我们鼓励感兴趣的读者参考本文献综述的共同作者Alexandre Bartel的博士论文[11]

请注意,在本节中,我们将主要关注详细的静态分析调用图,而不是其他表示,如UML类/顺序图。这种强调调用图的主要原因是,据我们所知,大多数相关的研究工作对面向对象的程序(例如,Android应用程序)进行程序间分析时,都会在分析中利用调用图。这个观察结果也被这张单反相机选择的主要出版物所证实。尽管其他表示(例如,基于UML的而不是调用图)也可以用于促进静态分析的过程,但是调用图在社区中被更广泛地使用。这种趋势的一个可能的原因可能是许多静态方法(静态分析Android应用程序)在众所周知的框架(如Soot [12]和WALA [13])之上实现,默认情况下它们提供现成的调用图构造设施,使调用图构建成为进行程序间静态分析的共同步骤。

      1. public class My Ojbect {
      2. public static void main ( String [] args) {
      3. My OtherObject o = new My OtherObject ();
      4. if ( args. length == 2) {
      5. o. method1 (2);
      6. } else {
      7. o. method2 (' hi!');

8 }

9 }

10 }

11

  1. public class My OtherObject {
  2. int a = 0;
  3. public My OtherObject () {
  4. this. a = 3;

16 }

  1. public void method1 ( int i) {
  2. this. a = i;

19 if ( i == 55)

20 this. method1 (55)

21 }

  1. public void method2 ( String s) {
  2. this. a = s. size ();

24 }

  1. public void method3 ( int j) {
  2. this. method2 ( j);
  3. this. method2 ( j);

28 }

29 }

(a)一个Java程序

main

lt;initgt; method1 method2

size

(b)相应的调用图

图1 一个两类Java程序的源代码及其从主方法生成的调用图。

2.1.1 分析技术

控制流分析。控制流分析是一种技术,用于显示给定程序中控制层次的流程是如何排序的,从而使程序的所有可能的执行路径都可以被分析。通常,控制序列表示为控制流图(CFG),其中每个节点代表基本的代码块(语句或指令),而每个直接边指示两个节点之间可能的控制流。

数据流分析。数据流分析[14]是一种在程序中的每个点上计算一组可能值的技术。这组数值取决于使用数据流分析必须解决的问题类型。例如,在到达的定义问题中,我们想知道每个程序点可以达到的定义集(例如,诸如int x = 3;之类的语句)。在该特定问题中,程序点P处的可能值的集合是达到P的定义的集合(即,该变量在到达P之前未被重新定义)。

要点分析。 要点分析包括计算指针表达式(或者变量)在程序运行时指向的所有数据的静态抽象。

2.1.2呼叫图建设

由于Android支持使用Java语言的面向对象编程方案,在本节的其余部分中,我们将重点讨论面向对象程序的分析。这些程序由类组成,每个类表示一个概念(例如汽车),并包含一组表示其他对象(如车轮)的字段和一组包含操作对象的代码的方法(例如,向前驾驶汽车)。方法中的代码可以调用其他方法来创建对象的实例或操作现有对象。

程序通常以Java中引用的单一入口点作为主要方法开始。快速检查主方法的代码可以列出它调用的方法。然后,在被调用方法的代码上进行这个过程导致构造有向图(例如见图1),通常称为程序分析中的调用图。尽管调用图的概念在静态分析方法中是标准的,但不同的问题(如精度要求)可能会影响用于构造程序调用图的算法。对于Java程序,已经提出了许多流行的算法,包括CHA [15],RTA [16],VTA [17],Anderson [18],Steensguard [19]等等, - 对程序执行的不同属性很敏感。我们详细介绍了下面的一些主要属性,以便在文献中的研究工作之间做出明确的区分。这些特性在图2中用示例代码片段和对应的调用图在属性保持不变的情况下提取。

流动灵敏度。流程敏感的CG是知道程序语句顺序的CG。在图2a的说明性示例中,首先创建人类实例并由动物参考a引用。然后,在a上调用方法walk。在执行时,此时仅调用Human.walk方法(第3行)。随后,程序将变量a关联到Cat的新实例。在CG的构建中,我们感兴趣的是在方法调用之间构建一个有向图,即我们的例子中的flowSensitivity(行1)和walk(行3)。当CG是流动敏感的时候,它包含一个单独的边缘,因为在第3行,a只能指向一个人类对象。如果

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[22545],资料为PDF文档或Word文档,PDF文档可免费转换为Word

您需要先支付 30元 才能查看全部内容!立即支付

发小红书推广免费获取该资料资格。点击链接进入获取推广文案即可: Ai一键组稿 | 降AI率 | 降重复率 | 论文一键排版