[论文翻译](2019)MalScan:通过社交网络中心性分析实现快速的市场范围内移动恶意软件扫描

"MalScan: Fast Market-Wide Mobile Malware Scanning by Social-Network Centrality Analysis"


摘要:期望对应用程序市场进行恶意软件扫描具有可扩展性和效力。然而,现有方法要么使用基于语法的特征,这些特征可以被变换攻击规避,要么使用基于语义的特征,通常需要执行昂贵的程序分析来提取。因此,在本文中,我们提出了一种轻量级的基于图的方法,用于执行Android恶意软件检测。与传统的繁重的静态分析不同,我们将应用程序的函数调用图视为社交网络,并进行社交网络中心性分析以表示图的语义特征。我们的关键见解是中心性为图的语义提供了简洁且容错的表示,特别适用于包含某些不准确信息(例如不准确的调用图)的图形。我们实现了一个原型系统MalScan,并在包含15,285个良性样本和15,430个恶意样本的数据集上对其进行评估。实验结果表明,在不到一秒的时间内,MalScan能够以高达98%的准确度检测Android恶意软件,这比两种最先进的方法MaMaDroid和Drebin快100多倍。我们还通过对超过300万个应用程序进行统计研究,展示了MalScan在市场范围内的恶意软件扫描的可行性。最后,在从GooglePlay应用市场收集的数据集中,MalScan能够识别出包括可以规避现有工具检测的恶意软件在内的18个零日恶意软件样本。


I. 引言

        Android设备和应用程序(简称应用)的爆炸性增长带来了多个Android市场,并催生了Android恶意软件的增长。来自各种应用市场的数百万应用程序已被全球Android用户安装。截止到2018年第三季度末,新的恶意软件应用数量较去年同期增加了40%以上1(Cyber attacks on Android devices on the rise (gdatasoftware.com))阻止恶意软件的传播主要依赖于应用市场的努力,因为它们是首批提供Android应用安装的地方。因此,市场范围内的移动恶意软件扫描可以成为阻止恶意软件快速传播的主要任务。

        Android恶意软件扫描依赖于检测Android恶意软件的技术。现有的移动恶意软件检测方法提取程序特征[1],[2],[3],[4]以区分良性应用和恶意软件。然而,许多这些技术可以通过混淆轻松规避,因为这些技术缺乏程序行为的语义和上下文信息。为了克服这一挑战,已经提出了几种系统,专注于将应用程序的程序语义提炼成图形表示,并通过匹配这些图形来检测恶意软件。然而,这些基于图形的技术,如DroidSIFT[5]和Apposcopy[6]存在两个主要限制。首先,图形匹配通常耗时,因为一个图形通常包含成千上万个节点。例如,分析一个应用程序的平均运行时间分别为175.8秒[5]和275秒[6]。此外,这些基于图形的系统基于与现有恶意软件图形的相似性进行图形匹配,这使得这些系统在新的恶意软件实例上表现不佳,因为Android恶意软件不断演化[7]。因此,这些基于图形的技术不具备市场范围内的恶意软件扫描的可扩展性和实际性。

        为了进一步提升最新技术,诸如MaMaDroid[8]等方法尝试使用更粗粒度的信息(例如使用包级信息而不是方法级信息)并将图形划分为子图(例如使用多个成对调用关系而不是表示所有调用关系的调用图)。它已验证了对抗Android恶意软件演化的稳健性,并增加了训练模型的寿命。然而,应用程序的平均运行时间为165.63秒(见表VIII和图7),这对于应用市场的恶意软件扫描是不适用的。此外,子图(例如成对调用)不能完全反映方法调用之间的依赖关系,因此这些方法缺乏区分某些恶意应用和良性应用的关键信息。此外,这种方法在执行分类时需要大量的内存,因为它通过提取所有成对调用来生成大量的特征集[8]。另一种用于恶意软件扫描的最新技术是MassVet[9],它将应用程序的用户界面抽象为一个有向图,其中每个节点是一个视图,每个边是一个关系描述。它已验证了在恶意软件扫描方面的高效性,但它只能检测重新打包的恶意软件,在应用程序是新的恶意软件时可能会导致假阴性。

        为了解决这些限制,本文提出了MalScan,这是一个能够在至少0.7秒内准确检测到恶意Android应用程序的语义保留市场范围内恶意软件扫描系统,平均时间不超过4.92秒(见表VIII和图7)。为了在对所有信息进行快速处理的同时保留程序语义信息,我们将函数调用图视为一个复杂的社交网络,并进行中心性分析[10],[11]以表示图的语义特征。调用图和社交网络都是表示动态行为的静态图。调用图表示程序行为,调用图的每个边可能表示多个函数调用。社交网络代表社交行为,社交网络的每个边可能表示多个社交交流。中心性度量了整个函数调用图中函数的“重要性”,并反映了图的结构属性/特性。由于其简洁的表示,中心性在具有不准确信息的图上表现良好[12],[13],[14],[15],使中心性成为代表从低成本程序分析(例如上下文和流无关分析)获得的图的理想候选项。通过对每个敏感API方法执行中心性分析,MalScan在抽象图细节以抵御混淆和保留语义信息以区分恶意软件和良性应用之间提供了平衡。(在提取图细节和保留语义信息上进行了平衡)

        我们从七个不同角度评估了MalScan,涵盖了从2011年1月至2018年12月的恶意软件,以更好地观察MalScan对Android恶意软件演化的稳健性。我们的前四个实验重点研究了恶意软件检测的有效性对抗Android应用演化的稳健性对抗性攻击的稳健性以及MalScan的运行时开销。此外,我们进行了一项统计研究,以调查MalScan在实际应用市场(例如Google Play)上的可扩展性。我们完全爬取了超过300万个应用程序的信息,分析结果表明MalScan能够扫描Google Play应用市场上的恶意软件。此外,我们利用并结合了对恶意软件检测中不同中心性的实验结果。实验结果表明,这确实可以提高Android应用程序分类的有效性。最后,我们展示了MalScan在检测现实世界零日恶意软件方面的能力。具体而言,在从Google Play应用市场收集的应用程序数据集中,MalScan能够识别出18个零日恶意软件,包括那些可以规避现有工具检测的恶意软件样本[16]。总之,本文的主要贡献如下:
        • 我们提出了一种新颖的轻量级方法,通过分析应用程序的函数调用图中敏感API调用的中心性来进行Android恶意软件分类。
        • 我们设计并实现了一个原型系统MalScan,这是一个新颖、自动化和高效的系统,可以对大规模Android恶意软件进行高精度分类。
        • 我们进行了全面的评估,使用了15,285个良性样本和15,430个恶意样本。实验结果显示,MalScan可以在平均0.7秒内完成对应用程序的分类,准确率高达98%。
        文章组织。本文的其余部分组织如下。第二节介绍了Android应用程序的度中心性的初步研究。第三节介绍了我们的系统。第四节报告了实验结果。第五节讨论了未来的工作。第六节描述了相关工作。第七节总结了本文。

II. 中心性的初步研究

        社交网络是由一组社交行为者(如个体或组织)、一组二元联系以及行为者之间的其他社交互动组成的社会结构2。应用程序的源代码由一组函数组成,它们之间存在多个调用关系。如果我们将函数视为行为者,将调用关系视为社交互动,那么应用程序的函数调用图可以被视为一个社交网络

        中心性概念最初是在社交网络分析中发展起来的,用于量化网络中节点的重要性,并有潜力揭示网络的结构模式。中心性度量在网络分析中非常有用,已经有很多工作提出使用中心性度量在不同领域,如生物网络[12]、合著网络[13]、交通网络[14]、犯罪网络[15]、隶属网络[17]等。已经提出了许多不同的中心性度量,例如度中心性[10]、katz中心性[11]、亲近中心性[10]、谐波中心性[18]、介数中心性[19]、渗透中心性[20]、跨团中心性[21]、基于不相似度的中心性[22]。        

        一方面,中心性度量可以指示网络中节点的重要性,有潜力揭示结构模式和行为。另一方面,恶意软件通常调用敏感API调用来执行恶意活动。因此,我们进行了初步研究,以调查一个问题:

        敏感API调用的中心性能否反映良性应用和恶意应用之间的差异?换句话说,良性应用和恶意应用中的敏感API调用的中心性是否存在显著差异?

   

为了回答这个问题,我们首先从AndroZoo [23]中随机选择了500个良性应用和500个恶意应用,然后使用静态分析提取了调用图。给定一个调用图,我们只针对表示安全敏感方法的节点(使用安全敏感方法列表[24])执行中心性分析。然后,我们进行了初步的频率分析,以检查中心性是否确实可以提示良性应用和恶意应用之间的固有差异。我们选择了前10个频繁调用的敏感API调用作为测试对象。由于页面的限制,我们只展示了图1中部分结果。从图1中呈现的结果中,我们发现敏感API调用的度中心性在良性应用和恶意应用之间可能存在显著差异。为了获得更明确的结果,我们应用方差分析(ANOVA)[25]来研究这些中心性值在良性应用和恶意应用之间的差异。在这里,零假设H0是敏感API调用的中心性在良性应用和恶意应用之间是相似的,它们的均值没有显著差异。我们应用单因素方差分析来测试我们是否可以拒绝或接受零假设。P值是在进行统计检验后零假设H0为真的概率,具有预先确定的概率α(我们在测试中选择了α = 0.05)。如果计算出的p值低于α,那么我们将拒绝零假设H0。表I显示了对图1(a)中的中心性值执行单因素方差分析的总结结果。如表I所示,恶意应用中ConnectivityManager.getActiveNetworkInfo()的度中心性的平均值为0.001504,而良性应用中为0.000474。特别地,表I中的p值为5.3E-117,远远小于0.05,因此我们可以拒绝零假设H0。换句话说,接受了备择假设H1(即ConnectivityManager.getActiveNetworkInfo()的度中心性在良性应用和恶意应用之间存在显著差异)。我们还在图1的其他数据集上应用了单因素方差分析。然而,由于页面有限,我们只在表II3中显示了p值。从表II中显示的结果,所有p值都远远小于0.05,这表明敏感API调用的度中心性可以反映良性应用和恶意应用之间的固有差异。因此,基于这一观察,我们建立了一个模型,并通过分析调用图中敏感API调用的中心性提出了一个轻量级的Android恶意软件检测系统。

III. 系统架构

A. 系统概述

        如图2所示,MalScan的操作经过三个主要阶段:静态分析、中心性分析和分类。
        • 静态分析:这个阶段旨在基于静态分析提取应用程序的函数调用图,其中每个节点都是一个可以是API调用或用户定义函数的函数。
        • 中心性分析:在获取应用程序的调用图之后,我们然后计算图内敏感API调用的中心性。这个阶段的输出是特征向量。
        • 分类:在最后一个阶段,根据特征向量,我们可以使用机器学习分类器准确、高效地将应用程序分类为良性或恶意。

B. 静态分析和中心性分析

        在本文中,我们旨在提出一个基于图的市场范围内恶意软件扫描系统,该系统需要在应用程序处理和图分析方面具有高效性。因此,我们进行了低成本的程序分析(例如上下文和流无关分析),以基于Android反向工程工具Androguard [26]提取简明的函数调用图。由于API调用被Android应用程序用于访问操作系统功能和系统资源,因此它们可以用作Android应用程序行为的表示。特别是,Android恶意软件通常调用一些与安全相关的API调用来执行恶意活动。例如,getDeviceID()可以获取手机的IMEI,getLine1Number()可以获取手机号码。因此,为了描述恶意行为,我们关注这些与安全相关的API调用,即基于PScout [24]的结果所报告的敏感API调用,其中包括21,986个敏感API调用。

        在中心性分析中,我们着重提取敏感API调用的中心性。在社交网络中,已经提出了几种中心性的定义,例如:
        • 节点的度中心性[10]是它连接到的节点的分数。度中心性值通过除以简单图N中可能的最大度数来归一化,其中N是图中的节点数。
          CD(v)= deg(v)/(N −1)
          注意,deg(v)是节点v的度数。
        • Katz中心性[11]是度中心性的一种泛化。度中心性测量直接邻居的数量,而Katz中心性测量可以通过路径连接的所有节点的数量,同时对远程节点的贡献进行惩罚。让A是所考虑图的邻接矩阵。
          CK (i)= ∞ ∑ k=1 n ∑ j=1 α(Ak )ij
  上述定义使用了Ak位置(i, j)的元素,反映了节点i和j之间k度连接的总数。衰减因子α的值必须选择得比A的最大特征值的绝对值的倒数小。
        • 节点的亲近中心性[10]是节点与图中所有其他节点之间最短路径的平均长度。其标准化形式通常由前一个值乘以N -1给出,其中N是图中的节点数。
  CC (v)= N−1 ∑ y d(t,v)
  注意,d(t, v)是节点v和t之间的距离。
        • 和谐中心性[18]颠倒了亲近中心性定义中的总和和倒数运算。
  CH (v)= ∑ t=v 1 d(t,v) N −1
  注意,d(t, v)是节点v和t之间的距离,N是图中的节点数。
        • 介数中心性[19]量化了一个节点在两个其他节点之间的最短路径中充当桥梁的次数。
  CB(v)= ∑ s=v=tV σst (v ) σst
  注意,σst是节点s到节点t的最短路径的总数,σst(v)是通过v的那些路径的数量。介数可以通过除以不包括v的节点对的数量来标准化,对于有向图是(n-1)(n-2),对于无向图是(n-1)(n-2)/2,其中n是图中的节点数。

        给定一个调用图,然后我们计算敏感API调用的中心性。一些未包含在此调用图中的敏感API调用在特征向量中表示为0。我们选择了总共四种不同的中心性度量,它们是度中心性Katz中心性亲近中心性和谐中心性,以开始我们的实验。由于介数中心性在中心性分析上效率较低,需要大约71秒才能完成对调用图中心性的提取,而节点数为11,240,因此我们排除了介数中心性。此外,通常通过组合多个中心性度量来测量社交网络中节点的重要性。因此,我们构建了另外两种中心性类型,一种是计算前四种中心性度量的平均值(平均中心性),另一种是连接前四种中心性度量(连接中心性)。图3显示了这两种中心性的构建方式。在我们的实验中,四种单独中心性度量的特征向量的维数是PScout [24]报告的敏感API调用总数,即21,986。因此,如图3所示,平均中心性和连接中心性的特征向量维数分别为21,986和21,986*4=87,944。

C. 分类

        我们的最后一个阶段关注于分类,即将应用程序标记为良性或恶意。为此,我们选择了三种不同的分类算法:1-最近邻(1-NN)、3-最近邻(3-NN)和随机森林来完成分类。这三个分类器是使用Python库scikit-learn [27]实现的。对于随机森林,我们采用默认参数开始我们的实验4。每个模型都是使用从训练数据集中获得的特征向量进行训练,然后在测试数据集上执行分类。所有的实验结果都是通过在我们的数据集上进行10折交叉验证来呈现的,详细结果将在第四节中展示。 

IV. 实验评估

        在本节中,我们进行了七个实验来检验MalScan在检测Android恶意软件方面的能力。

  1. 具体来说,我们首先通过对同一年开发的数据集进行分类来评估MalScan的有效性
  2. 然后,我们以两种方式检查了MalScan的稳健性:第一种方式是使用旧数据集训练的模型对新样本进行分类,第二种方式是检测通过对抗性攻击制作的对抗性样本
  3. 接下来,我们展示了MalScan的运行性能。
  4. 然后,我们验证了MalScan在市场范围内恶意软件扫描中的可行性。
  5. 最后,我们介绍了MalScan的不同中心性度量的组合对恶意软件扫描的影响,并展示了检测零日恶意软件的能力。

A. 数据集和指标

        用于评估MalScan的数据集共包括30,715个样本,可在github5(https://github.com/malscan-android/malscan.)上获取,研究人员可以进行可重复的实验。我们从AndroZoo [23]中爬取了这些APK文件,AndroZoo目前包含超过900万个APK文件,每个文件都经过VirusTotal [16]中多个不同的杀毒产品的检测。我们的最终数据集包括15,285个良性应用程序和15,430个恶意应用程序。此外,我们的数据集时间跨度从2011年1月到2018年12月,通过这一时间跨度,我们可以进行更详细的评估,以验证MalScan对Android应用程序变化的稳健性。表III列出了我们数据集的摘要。

        为了评估MalScan,我们使用数据集进行了10折交叉验证的实验。此外,我们使用如表IV所示的广泛使用的指标来衡量MalScan的有效性。请注意,所有实验都与以下两种最先进的Android恶意软件检测系统进行了比较:MaMaDroid和Drebin。
        • MaMaDroid [8]:一种最先进的Android恶意软件检测系统,利用从调用图中获取的抽象函数调用序列来构建行为模型,并使用它提取特征进行分类。
        • Drebin [4]:一种最先进的Android恶意软件检测系统,对应用程序进行广泛的静态分析,从应用程序中提取尽可能多的特征,并将它们嵌入到联合向量空间中以分类恶意软件。

B. 检测有效性

        我们首先通过使用在同一年开发的样本进行训练和测试来评估MalScan检测恶意软件的能力。为此,我们在八个数据集上进行了实验,如表III所示,通过进行10折交叉验证。表V分别呈现了MalScan、MaMaDroid和Drebin在每个数据集上的检测结果。

        结果包括每个实验的F值和准确度。为了验证不同中心性度量在检测Android恶意软件方面的有效性,我们首先进行了四个单独的中心性实验。此外,通常通过结合多个中心性度量来衡量社交网络中顶点的重要性。因此,我们添加了另外两个实验,通过集成前四个单独的中心性度量,如图3所示。总之,我们通过每年在每个数据集上进行六个实验来评估MalScan。

        如表V所示,我们可以看到,对于每个数据集,MalScan可以在所有六个实验中保持高的F值和准确度,都在95%以上。此外,检测性能根据选择的中心性度量而异。例如,当我们选择度中心性在2015数据集上进行分类时,F值为98.1%,而当我们选择卡兹中心性时,F值为97.4%。这主要是因为所选的中心性度量之间的定义不同。特别地,连接中心性的结果通常比其他中心性好,这是因为连接中心性具有更全面的特征(图3)。

        与MaMaDroid相比,MalScan在准确性方面在所有数据集上都表现更好。至于F值,除了2014数据集外,它在大多数数据集上优于MaMaDroid。当我们使用度中心性度量在2014数据集上进行分类时,F值为95.6%,而MaMaDroid可以获得95.9%的F值。然而,在MalScan的六个实验中,最大的F值和准确度都超过了MaMaDroid。这样的结果表明,当在同一年的数据集上进行分类时,MalScan可以获得比基于抽象方法更好的性能。这是因为API调用的抽象化可能会导致一些误报,例如,API调用TelephonyManager.getDeviceId()和SmsManager.sendTextMessage()可以被抽象成相同的包和家族,分别是android.telephony和android。

        通过表V中的结果,我们可以看到,另一种比较的Android恶意软件检测方法Drebin的F值和准确度都占据了97.4%,几乎与MalScan在2013数据集上的最大F值和准确度相同。然而,在大多数数据集上,它的性能不如MalScan。总的来说,MalScan在2014年至2018年的数据集上可以获得更高的F值和准确度。特别是,在2017年和2018年的数据集上,它明显优于Drebin。此外,MalScan在所有数据集上的六个实验中的最大F值和准确度都高于Drebin。MalScan表现更好是合理的,因为MalScan考虑了程序的结构语义,而Drebin忽略了这些语义。

        综上所述,通过使用在同一年开发的样本进行训练和测试,MalScan在检测恶意软件方面的性能优于MaMaDroid和Drebin。

C.对Android演化的鲁棒性

        为了测试MalScan在Android应用程序演变中的韧性,我们创建了四个情景,并在每个情景下进行了实验,MalScan、MaMaDroid和Drebin的F值和准确度如图4所示。

  1. 在第一个情景中,每个系统都使用2011年的数据集进行训练,然后对2012年到2018年的样本进行分类。
  2. 在第二个情景中,我们使用从2012年之前的数据集(即2011年和2012年的数据集)随机选择的样本作为训练数据,并测试从2013年到2018年的样本。
  3. 与之前的情景类似,第三个情景中的训练样本是从2013年之前的数据集中随机选择的,测试样本是从2014年到2018年的。
  4. 我们的最后一个情景包括从2014年之前的数据集中随机选择的训练样本,并对2015年、2016年、2017年和2018年的样本进行分类。

        为了在图表中更清晰地显示,我们只在图4中呈现了MalScan的平均和连接实验结果。

        

        在情景一中,如图4(a)和4(e)所示,当测试2012年和2013年的数据集时,MalScan的F值和准确度都高于MaMaDroid和Drebin。然而,当测试数据集的年份增加到2015年时,MalScan和Drebin的F值和准确度都大幅下降。这是因为2011年至2015年数据集之间的敏感API调用差异很大,而MalScan和Drebin都是基于敏感API调用的分析。(什么意思啊)

        在情景二中,如图4(b)和4(f)所示,当测试2013年数据集时,所有方法都可以在F值和准确度上取得高水平的表现。Drebin能够在2013年到2016年的数据集上保持最佳性能。

        在情景三中,当测试数据集的年份从2014年增加到2015年时,MalScan和Drebin的F值和准确度都大幅下降。原因与情景一相同,例如,恶意软件样本调用的敏感API调用在训练数据集和2014年数据集之间的重叠比率为80%,而当测试数据集的年份增加到2015年时,降至56%。换句话说,2015年数据集中几乎一半的恶意软件样本中的敏感API调用不在训练数据集的恶意软件样本中出现,这可能导致高误报。

        在最后一个情景中,MalScan和MaMaDroid都可以比Drebin获得更好的性能,MalScan的连接实验的F值和准确度在所有测试数据集上都高于MaMaDroid和Drebin。

表 VI:MalScan、MaMaDroid 和 Drebin 通过训练旧数据集对新样本进行分类的 f 测量值和准确率均值

四年意思是如果训练是2011、12,那么测试集是2016的F1、A.   然后最后取平均。      

(这里没有看明白实验的意思)为了研究在使用旧数据集进行训练的情况下检测新样本的整体性能,我们呈现了MalScan、MaMaDroid和Drebin在检测时间跨度从一年到四年的新数据集时的F值和准确度的平均值,如表VI所示。就F值而言,当测试数据集和训练数据集之间的时间跨度相差一年时,MalScan能够保持最佳性能。然而,当时间跨度增加到两年、三年和四年时,MaMaDroid稍微优于其他方法。这主要是因为API调用的抽象化对Android应用程序的演变更具韧性。至于准确度,MalScan可以在使用旧数据集进行训练的情况下,在检测新样本时获得更好的性能。总的来说,与MaMaDroid和Drebin相比,MalScan可以在使用旧数据集检测新样本时获得接近良好的效果。(就f值看的话,MaMaDroid更好,就准确率看的话MalScan更好)

 D.对抗攻击的鲁棒性

        为了研究MalScan对对抗性样本的韧性,我们利用最新的、最先进的对抗性攻击工具[28]来完成我们的评估。它可以计算扰动,修改源文件,并重建修改后的APK文件,以制作Android恶意软件的对抗性样本。由于所有数据集和MaMaDroid、Drebin和MalScan的算法都是开源的,攻击者可以访问所有数据集。至于机器学习模型(即分类器),它们可以通过重新实现相应论文中提出的算法来获得。因此,在本节中,攻击场景是攻击者知道所有数据集,还可以访问目标检测器作为黑盒子。具体而言,我们选择2011年的数据集作为我们的测试对象来开始评估。此外,我们选择的攻击算法是修改后的JSMA [28],它使用分类器的前向导数来制作对抗性示例。正如[8]中所描述的,当MaMaDroid采用随机森林来检测恶意软件时,它可以取得更好的性能。至于MalScan,我们发现1NN在检测恶意软件时能够保持更好的效果。因此,MalScan、MaMaDroid和Drebin的机器学习分类器分别选择1NN、随机森林和SVM。表VII总结了这些攻击的细节。

        图5呈现了制作的恶意软件样本对MalScan、MaMaDroid和Drebin的规避率(即FNR)。可以看出,所有三个系统都很容易被这些制作的对抗性样本规避。这是因为[28]发起的攻击是一种定制的攻击,根据分类器实现的不同算法,它可以对攻击步骤进行相应的更改,直到制作的对抗性样本可以被检测器错误分类或达到设定的阈值时退出。然而,Drebin的攻击成本最低,因为它只提取语法特征,攻击者只需要添加包含所需特征(例如受限制的API调用)但从不被调用或执行的代码。至于MaMaDroid和MalScan,攻击者需要更多的成本来完成攻击,因为它们考虑了程序语义。例如,添加的特征不是简单的受限API调用,而是来自某些调用者到某些被调用者的调用。此外,当攻击者攻击平均或连接中心检测器时,攻击成本更高,因为它们是由四种个体中心性度量构建的。因此,攻击者必须考虑四种不同的中心性提取算法来制作对抗性样本。总之,面对定制的对抗性攻击,MalScan、MaMaDroid和Drebin都不够韧性。

E.运行时开销

        在这一部分,我们通过使用从我们的30,715个样本中随机选择的一个数据集来估算MalScan、MaMaDroid和Drebin的运行时开销,该数据集由3,000个良性应用程序和3,000个恶意应用程序组成。这3,000个良性样本和3,000个恶意样本的平均节点数分别为17,669和12,991。

对于一个新的应用程序,MalScan包括三个主要阶段来分析它:(1)函数调用图提取,(2)特征提取,和(3)分类。这三个主要阶段的运行时开销如表VIII所示。

对于给定的APK文件,构建调用图平均需要0.67秒。在特征提取中,运行时开销根据所选的中心性度量而异。平均来说,提取度中心性需要平均0.03秒,远远低于其他三个中心性度量。要提取节点在图内的平均中心性和连接中心性,我们首先需要获得四个个体中心性值(图3)。因此,构建平均中心性和连接中心性的特征向量平均需要约4.26秒。给定一个特征向量,我们可以使用已训练的机器学习模型进行分类。如表VIII所示,分类的运行时开销不仅根据所选的中心性度量而异,还根据所选的分类算法而异。至于中心性度量,连接中心性的运行时开销高于其他五种中心性度量。这是因为连接中心性的特征向量维度是其他五种中心性度量的四倍

此外,如图6所示,处理一个应用程序的总运行时间通常与应用程序的函数调用图的大小正相关。调用图中的节点越多,运行时间越长。总的来说,对于一个新的应用程序,如图7所示,当我们选择度中心性构建特征向量和随机森林作为分类模型时,MalScan可以在平均0.7秒内将其分类为良性或恶意

我们还评估了MaMaDroid和Drebin在检测应用程序时的运行时开销。对于MaMaDroid,它包括三个主要步骤来完成分类。在第一步中,为了构建一个更精确的应用程序的调用图,MaMaDroid执行了重量级的程序分析,以确保上下文和流程得以保留。因此,平均每个应用程序提取调用图需要163.18秒。然而,完成特征提取步骤平均需要2.46秒。在最后一步中,使用随机森林进行分类是最快的:平均0.0007秒。因此,如图7所示,总的来说,当我们选择随机森林作为分类模型时,MaMaDroid对于来自我们的6,000个样本中的一个应用程序的完整分类大约需要165.63秒。//至于Drebin,一方面,它不仅从反汇编的代码中提取特征,还从清单中提取特征。另一方面,这些特征包括一些复杂的特征(例如,网络地址),提取的特征数量超过90,000个。因此,平均每个应用程序提取特征需要约82.38秒。给定一个特征向量,Drebin通过使用SVM分类器大约需要0.31秒来标记它是良性还是恶意。

总之,与MaMaDroid和Drebin相比,MalScan在处理恶意应用程序时更具可扩展性和效率。(可扩展性可以在这个实验中表现出来吗????)

F.全市场案例研究

表九:从 Google-Play 应用程序市场收集的应用程序数量和平均大小

为了验证 MalScan 对 Google-Play 规模的 Android 应用程序商店进行恶意软件扫描的可行性,我们从 AndroZoo [23] 中对 Google-Play 应用程序市场中的应用程序大小进行了统计研究。我们收集了 Google-Play 应用市场中应用程序的一些信息,包括 sha256、软件包名称、apk 大小和 dex 日期。如表九所示,这些应用程序的时间段为 2011 年 1 月至 2018 年 12 月,Google-Play 应用程序市场中收集到的应用程序总数为 3 537 595个。(所有收集到的这 3,537,595 个应用程序的信息均可在以下网站获取:https://github.com/malscan-android/malscan。)

表九列出了不同年份收集到的应用程序的平均大小,可以看出,随着时间的推移,应用程序的平均大小会越来越大,总共 3 537 595 个应用程序的平均大小为 7.73 MB。

我们还介绍了这些应用程序在 Google-Play 应用程序市场和我们随机选择的 6000 个应用程序中的大小的累积分布函数(CDF)。如图 8 所示,一般来说,Google-Play 应用程序市场中的应用程序比 MalScan(随机抽取的 6000 个应用程序)中的应用程序略大。因为 MalScan 是基于图的恶意软件扫描系统,而处理一个应用程序的总运行时间一般与应用程序函数调用图的大小呈正相关(图 6)。因此,我们从收集到的 3,537,595 个应用程序中随机抽取 6,000 个应用程序,并进行静态分析以提取函数调用图。获得 6000 个函数调用图后,我们将收集这些图的大小。

表十:Google-Play 应用程序市场和 MalScan 使用的应用程序的平均大小,使用随机森林对这些应用程序完成分类的平均运行时间开销,以及 Google-Play 6000 和 MalScan 6000 之间的比例大小

具体来说,从表 X 中显示的结果来看,Google-Play 应用市场中应用程序的平均图形大小约为 MalScan 中的 1.44 倍。此外,MalScan 在 Google-Play 6000 和 MalScan 6000 上完成分类的平均运行时间之比几乎都在 1.44 左右。这一结果也表明,MalScan 处理一个应用程序的总运行时间一般与应用程序函数调用图的大小呈正相关。因此,当我们采用 MalScan 对 Google-Play 应用程序市场进行恶意软件扫描时,当我们选择度中心性来形成特征向量时,处理一个应用程序的平均运行时间开销可能在 1 秒左右。如此高的效率表明,MalScan 可以对 Google-Play 规模的安卓应用市场进行频繁的全市场扫描。

G. 中心度量的组合

图 3:平均中心度和连接中心度的构建示意图

在本节中,我们将结合不同的中心度量来检测安卓恶意软件。正如前面的实验所讨论的,我们完全选择了四种单独的中心性度量,并添加了另外两种中心性度量(图 3)。实际上,这六种实验结果可以互补,例如,我们可以使用多数票来标记一个应用程序是良性的还是恶意的。换句话说,当一个应用程序被六个中心性实验中的一个或多个实验报告为恶意时,我们就将其视为恶意软件。

为了测试 "多数票 "的可行性,我们对第 IV.C 节(C.针对安卓系统演进的鲁棒性)中的场景一(在第一种情况下,每个系统都使用 2011 年的数据集进行训练,然后对 2012 年至 2018 年的样本进行分类。)进行了实验。我们利用 2011 年数据集训练了一个模型,并分别在 2012 年至 2014 年的数据集上进行了测试。在我们的实验中,将应用程序标记为恶意的阈值分别为 1(投票 1)、2(投票 2)、3(投票 3)、4(投票 4)、5(投票 5)和全部(投票 6)。

表十一:MalScan 采用多数投票法、MaMaDroid 和 Drebin 对 2012-2014 年数据集进行分类(使用 2011 年数据集进行训练)后的 f 测量值和真阳性率 (TPR)

如表 XI^{12}(12由于篇幅有限,其他详细结果见网站:https://github.com/malscan-android/malscan。) 所示,当我们选择 "2 "作为将应用程序标记为良性或恶意的阈值时(即当六个中心性实验中有两个或更多实验报告应用程序为恶意时,我们就将其视为恶意软件),f-measure 是所有实验结果中最高的。特别是,当我们采用多数投票法检测恶意软件时,真阳性率(TPRs)显著提高。当我们使用 2011 年数据集训练模型并对 2012 年数据集进行分类时,如果我们选择串联中心性来形成特征向量,真阳性率最多为 89.40%。但是,如果我们采用多数票来标记应用程序是良性还是恶意,则真阳性率可提高到 96.90%。换句话说,在 2012 年的数据集中,如果采用多数票制,我们最多能检测到 96.90% 的恶意软件。此外,在进行六个中心性实验时,并行处理是一个可行的选择。因此,多数票表决的运行时间开销只比中心性连接实验稍长。

H.检测零时差恶意软件

为了验证 MalScan 检测真实世界零日恶意软件的能力,我们使用 2018 年的数据集,采用 1NN 算法训练分类器(根据六种不同的中心性度量,我们总共获得了六个分类器)。

接下来,我们从 Google-Play 应用市场抓取 5,000 个应用程序,并将其输入训练有素的分类器。我们利用多数投票法将应用程序标记为良性或恶意,当六个中心性实验中的两个或更多实验报告应用程序为恶意时,我们就将其视为恶意软件。在这些应用程序中,有 22 个被 MalScan 报告为恶意程序。为了调查这 22 个应用程序是否为恶意软件,我们将它们上传到 VirusTotal [16],逐一进行分析。在这 22 个应用程序中,有 17 个被至少一个杀毒软件扫描仪报告为恶意软件。我们对其余 5 个应用程序进行了人工检测。人工检测结果显示,这 5 个应用程序中有 1 个存在高度可疑行为,它包含 28 个危险级权限,读取设备内存和 CPU 信息,并将许多敏感数据写入多个日志文件。为了进行更深入的检查,我们利用了最先进的安卓应用程序分析系统,该系统结合了静态和动态分析,可报告详细的风险行为[29]。从报告结果中,我们可以看到该应用程序执行了 shell 代码,这可以证明它确实是一个恶意软件。

总之,MalScan 能够在 5,000 个 Google-Play 应用程序中发现 18^{13}(13 详细信息请访问以下网站:https://github.com/malscan-android/malscan。)个零时差恶意软件,其中 1 个未被现有工具报告为恶意软件[16]("Virustotal - 免费在线病毒、恶意软件和网址扫描仪",https://www.virustotal.com/,2019。)。

V.讨论

在我们的工作中,我们完全选择了四个单独的中心性度量,并添加了另外两个中心性度量来对安卓应用程序进行分类。我们计划测试更多不同的中心性度量在检测安卓恶意软件方面的能力。虽然 MalScan 对定制对抗性攻击的鲁棒性较低,但由于其扫描恶意软件的效率高,因此可用作第一道防线。在过滤大部分恶意软件后,可以使用其他计算密集型和鲁棒性更强的方法作为第二道防线。这样,我们可以节省更多时间和资源。此外,由于大多数安卓恶意软件检测系统都是闭源的,因此我们只将 MalScan 与两个开源系统(即 MaMaDroid 和 Drebin)进行比较。我们将在今后的工作中对更多系统进行详细的比较分析。

VI.相关工作

有许多关于安卓恶意软件检测的方法都依赖于语法特征[1], [2], [3], [4], [30], [31], [32] 或程序语义[5], [6], [8], [33], [34], [35], [36], [37], [38], [39], [40], [41], [42]。Drebin [4] 使用广泛的静态分析从应用程序中提取尽可能多的特征,并将其嵌入联合向量空间对恶意软件进行分类。不过,它只搜索特定字符串的存在,如一些受限的 API 调用,而不是考虑程序语义。因此,它很容易被语法特征攻击所规避 [28], [43]。DroidAPIMiner [2] 通过频率分析来识别恶意软件常用的某些 API 调用,然后执行简单的数据流分析来提取特征以完成分类.遗憾的是,由于它无法概括其特征空间,因此存在特征爆炸的问题。

DroidSIFT [5] 基于静态分析提取加权上下文 API 依赖关系图来解决恶意软件变形问题。Apposcopy [6] 利用静态分析提取应用程序的数据流和控制流属性,以识别其恶意软件家族。然而,DroidSIFT[5]和Apposcopy[6]都存在严重的运行时开销问题,它们分析一个应用程序分别需要175.8秒和275秒。

MaMaDroid [8] 利用从调用图中获取的抽象函数调用序列建立行为模型,并利用该模型提取特征进行分类。这种方法更能适应 API 的变化,也更能适应 Android 应用程序的演进。然而,它也存在一些局限性,一是很容易被自定义的包规避,这些包看起来与 Android、Google 或 Java 的包相似[28];二是由于其特征集和调用图的提取量较大,分类时需要相当大的内存[8]。

与前人不同的是,为了避免图匹配的繁重计算开销,MalScan 将应用程序的函数调用图视为一个复杂的社交网络,然后提取敏感 API 调用的中心性来构建特征向量。给定一个特征向量,MalScan 就能准确地将其标记为良性或恶意。

VII.结论

本文提出了一种基于敏感 API 调用中心性分析的轻量级安卓恶意软件检测方法。我们实现了一个自动安卓恶意软件检测系统 MalScan,并在 30,715 个应用程序的数据集中进行了全面评估。实验结果表明,MalScan 能够在平均 0.7 秒内检测出安卓恶意软件,准确率高达 98%,比 MaMaDroid 和 Drebin 这两种先进方法快 100 多倍。我们还通过对 Google-Play 应用市场上的 300 多万个应用程序进行统计研究,证明了 MalScan 对全市场移动恶意软件扫描的可行性。此外,在从谷歌-Play 应用市场收集的数据集语料库中,MalScan 能够识别出 18 种零日恶意软件,其中包括能够逃避 VirusTotal [16] 中现有工具检测的恶意软件样本。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值