首页
社区
课程
招聘
[翻译]基于资源消耗的Android恶意代码家族分类(增订版)【上】
2017-11-2 22:14 3853

[翻译]基于资源消耗的Android恶意代码家族分类(增订版)【上】

2017-11-2 22:14
3853

摘要


    现在绝大多数的移动恶意软件都是针对Android设备的。这推动了过去几年Android恶意软件分析的研究工作。恶意软件分析的一个重要任务是将恶意软件样本分类到已知的家族中。众所周知,静态分析恶意软件缺乏针对改变恶意软件的静态特性的技术(e.g.代码混淆),而动态分析已被证明是有效的对抗这种技术的。据我们所知,Android上的恶意软件家族分类完全基于动态分析的,最著名的是droidscribe。关于DroidScribe,我们的方法更容易重现。我们的方法只使用公开可用的工具,不需要对模拟环境或Android操作系统进行任何修改,并且可以从物理设备收集数据。后者是一个关键因素,因为现代移动恶意软件可以检测模拟环境并隐藏其恶意行为。我们的方法依赖于从文件系统中获得的资源消耗度量。特点是通过消除趋势波动分析和相关提取。最后,利用支持向量机对恶意软件进行分类。我们提供从数据的恶意软件样本实验评估,我们得到了82%的分类精度,证明了我们的方法达到的精度媲美droidscribe。此外,我们还开发了公开可用的软件,以减轻结果的重复性。

1.介绍
    智能手机销量的持续上涨,在我们的日常生活中普遍的增长促进了移动设备的恶意软件的发展,Android OS是扩散平台的移动设备[ 7 ],它的源代码是公开的,而且,大多数安卓设备仍然运行于versions1。这些因素结合在一起使得Android智能手机对几个恶意软件的作者有吸引力[ 25 ]。由于这些原因,大多数移动恶意软件的目的是攻击Android。According to F-Secure, 79% of mobile malware in 2013 were designed to attack this OS [6]. 仅在2015,赛门铁克观察到恶意Android增加230%。与去年有关的应用程序,并注意到移动恶意软件利用逃税技术的增加,以避免基于签名的安全产品的检测[ 23 ]。这些技术包括移动应用程序混淆和虚拟环境检测。特别是,采用混淆技术促进了已经变体的传播。已知恶意软件,2015的增长率为40%。混淆技术修改应用程序的包和/或源代码,保存应用程序的原始功能,并允许恶意软件作者创建语义相似的应用,从对方的语法结构不同(如相同的木马程序可以是完全不同的两个有害软件的幌子下分布式)。结合先进的混淆技术把反恶意软件产品的危害从95%降到40% [ 19 ]。

  针对恶意软件的发展,恶意软件分析领域也沿着不同的方向进化[ 13 ]。除了恶意软件检测,还需要分类软件样本是良性的还是恶意的,其他相关的研究方向也出现了。其中最有趣的是恶意软件家族分类,包括把恶意软件分到不同的家族里。属于同一家族的样品表现出类似的行为,比如,利用相同的漏洞并且有相同的目标,因此家族分类可以用来快速检查一个应用程序是已知的另一种的一个变种。而赛门铁克注册的Android移动恶意软件的变种增长显著,他们还没有辨认在新发现的恶意软件的数量相同的趋势:只增加6%,2015以上前一年,2016年度只有1%个[ 24 ]。这样的趋势建议在创新明显放缓移动恶意软件的发展,它可以利用通过与家庭的使用分类分析技术。事实上,自动的恶意软件家族分类—技术允许恶意软件分析师及时了解无论是恶意应用程序可能是一个变种已知的恶意软件(即,它属于一个已知的家庭)或者如果是一个新的恶意软件(也就是说)。不属于任何已知的家庭)。这使得分析师专注于真正全新的恶意应用程序只,不浪费时间和精力的样品类似于在过去已经分析了别人。鉴于新的移动恶意软件的大量产生一天,使用家庭分类过滤掉什么应用程序应该得到更详细的分析成为基础。在实践中,恶意软件分析可以执行两不同类型的分析:静态和动态。静态二值得注意的是,在家庭中对恶意软件进行分类是不同的。从它们的类型分类(例如滴管或木马):作为一个例子,可以有不同的家庭滴管执行相同的一般任务(即,安装实际的任务)目标系统中的恶意软件),但以不同的方式(例如,你可以从网上下载恶意软件,另一个可以包含恶意负载并在需要时解密),因此,他们的行为会正确地产生不同的结果。方法不需要在分析和揭示所有样本的执行路径。然而,它们不是很有效。反混淆技术,广泛在[ 19 ]的证明,而无法跟踪在运行时产生的网络流量和修改—FIC的痕迹[ 25 ]。动态技术克服这些在受控环境中执行示例的局限性。

  本文主要研究恶意代码家族分类。我们提出了一种依赖于动态分析的方法。还提出了一种实现它的软件架构。这个体系结构自动执行在沙箱环境中的Android应用程序,生成模拟用户输入。在每一次运行时,它从proc文件系统和进程,通过趋势波动分析(DFA)[ 18 ]和皮尔森相关[ 16 ]。在写作的时候,最重要的Android恶意软件家族分类工作,在动态分析的基础上,是droidscribe [ 5 ]。我们比较我们的方法,droidscribe进行广泛的实验评价在同一数据集为droidscribe。结果表明,我们的方法达到了相当的精度,但是(i)易于复制和(ii)收集的数据可以聚集在物理装置上。事实上,我们的方法只使用公开可用的工具,不需要对模拟环境的任何修改或Android操作系统。相反,droidscribe依靠copperdroid,这是不公开的,它是唯一的。通过联机服务访问。然而,它不适合批量实验,因为它需要在输入中只使用一个示例和提交过程不能自动的,因为它需要通过一个反机器人回避反应测验。在写作时,服务不分析自七月入队程序2015。此外,不同于copperdroid,我们方法可以收集物理设备上的数据好.这是一个关键因素,因为现代移动恶意软件可以检测模拟环境并隐藏他们的恶意行为。据我们所知我们的方法是第一个只基于资源的方法。消费度量与DFA [ 25 ]。

  本文的剩下部分结构结构是这样的,第2部分讨论了相关的工作。第3部分提出了方法论和架构。使用DroidScribe做的实验性的评估和对比放到第4部分,第5部分呢,总结了这个论文,描述了接下来要做的工作。

2.相关工作

安卓恶意软件家族分类在字面上是一个广为人知的问题,而且考虑到最后的分析的客观性,它也迥异于恶意软件的检测。这大大影响了采用什么具体的技术实现,尽管它们都有大体相似的思路。例如,虽然二进制分类器通常用于恶意软件检测(比如,一个样本是良性的或恶意的),但多类分类器通常用于家族分类(即一个家庭的一个类),但所提取的特征集可以非常相似。据我们所知,我们是第一个利用资源消耗度量来解决家家族分类问题的。

Karbab等人使用动态分析和自然语言处理(NLP)来检测和分类安卓恶意程序,在一个沙盒中执行移动app生成一份他们行为的报告,后期用NLP技术处理。通过这些技术,作者能够生成签名,来标识和分类恶意app。Reina等人实现了CopperDroid,这是一个执行安卓app并收集系统调用信息的框架。CopperDroid在Android上的恶意软件家族的分类工作最为著名,纯粹基于机器学习的动态分析,这和我们的目标一致。

和我们的成果相似,Shehu等人根据资源使用情况来给每个分析的移动app创建一个指纹,然而,他们解决的是一个不同的问题,即检测混淆恶意软件变种。此外,他们的方法是在一个物理设备上的七个恶意程序的小集合中手动测试的。与此相反,在本文中,我们将整个恶意软件的家族分类过程自动化并且在一个更大的数据集上测试我们的结果。

其他的研究利用了资源消耗指标或能耗来检测Android恶意软件,Liu等人,kim等人看移动设备的耗电来检测恶意软件,总之,这些研究都是基于已经淘汰的移动平台,而且这种类型的分析只能在设备上测量能耗指标,在模拟器上是没有意义的。Amos等人实现一个自动执行框架来收集资源消耗相关特性来满足不同的机器学习算法。他们评估准确性的测试集只有47个应用程序。Canfora等人利用资源消耗指标检测Android恶意软件。然而,这些作品不解决家族分类。

终于,Mutti等人开发了BareDroid,这是一个高效的Android设备上的恶意软件分析系统。设备分析在对模拟器逃脱技术有很大的优势但更耗时,因为物理设备需要更多的时间被重置到一个干净的状态相对于对一个模拟器。作者实验显示,BareDroid允许这段时间减少4.44因素。

三.方法论


正如已经讨论的,本文的重点是恶意软件家族分类。也就是说,任务是输入恶意软件样本,然后对其进行分类。我们假设Android恶意软件的家庭的集合F是固定的和先验已知的。

我们的方法可以概括如下。在先前的训练阶段,我们收集了一组已知的恶意软件M,其中每个样本已经被标记为它所属的家族。F.的每个成员在我们的实验中,我们采用drebin集[ 2 ]。每个样品的∈我们跑到控制仿真环境和收集一些运行指标随着时间的推移,所以
为了获得每个度量的时间序列。特别是,我们的方法只依赖于监控资源消耗度量,这些度量可以从程序文件系统中获得。然后,我们处理这些度量。
以便以后详细提取指纹。最后,我们用生成的指纹集对分类器进行训练(用相应的家庭标记)。每当输入一个新的恶意软件s s时,我们将s运行到我们控制的模拟环境中。
我们建立指纹。然后,我们用新生成的指纹来填充分类器,然后再输出s族。

3.1。指纹的生成

对于一个恶意软件样本S,指纹生成的第一阶段是在我们控制的模拟环境中执行s。在执行过程中,我们使用预设的输入事件来激发恶意软件。输入事件是由我们的仿真程序自动模拟的。(参见第3.3部分)。为了使输入事件在不同执行中保持一致,我们总是生成相同的随机事件序列。在我们监控并收集从proc文件系统执行的在采样间隔τ。在我们的实验中,我们监测到n = 26的指标在4赫兹的采样频率(τ= 0.25s)。我们监视一组系统范围和特定于应用程序的度量,包括CPU、内存和网络使用。因此,在执行结束时,我们获得一个时间。
系列XI(t)为每个XI单位。每次执行后,仿真器都会重置为原始映像,以便每个新的执行都在同一个运行时环境中启动。然后,对采集到的时间序列进行处理,提取特征向量F=G(X1(t)),。..,xn(t))=(F1,。..特征是恶意软件家族(G是特征提取算法)。特征向量F表示恶意软件样本的指纹。在指纹识别阶段,在指纹中包含一组适当的特征,详见第3.2节。

3.2 分类和训练

为了对恶意软件家族进行分类,我们给定一个能计算前面章节中所描述的指纹的向量机(SVM)分类器。SVM必须在一组样本指纹上训练过后,再用相应正确的恶意软件家族来标记。
训练阶段有两个主要目的:(T1)确定一组要包含在指纹中的特征,还有(T2)训练分类器。第一个任务定义分类器的特征空间。确定适当的特征集是正确分类的基础。

  这两个任务都需要一个训练数据集。训练阶段的第一步是收集这样的数据集。我们在的模拟环境执行每个恶意软件样本的s ∈ M,我们像如3.1节所述那样来收集监测指标。对于每个恶意软件样本,我们执行q运行。q值越大,噪声数据和离群值对分类器训练的影响越小(在实验中q=2)。在这个步骤的结尾,我们得到了时间序列x I=(X1),。..,xn(t))对于每一次运行1,。..,问每个样本的s ∈ M.
为了达成目标(t1),我们首先处理每个向量x =(X1),。..,xn(t))通过DFA。我们选择了DFA,代替了类似的方法,因为它没有调整参数,因此允许自动方法。特别是,每个时间序列xi(t),我∈[ 1 ],我们计算DFA指数α也支持我们的直觉,DFA指数可能是恶意软件的分类的一个重要的特点,我们进行了一些实验表明这样的参数的稳定性时,应用到Android应用程序资源消费指标(见4.3节)。除了DFA指数外,我们还计算了X1(t)的相关矩阵,。..,xn(t),使我们得到一个皮尔森相关系数Rij表示每对不同的度量兮,XJ。因此,我们结束了最初的一组n(n+1)2=351的功能,包括在n = 26的DFA指数和N(N−1)2 = 325的相关系数。

  这个初始集可能包含冗余的特性,可能不利于识别恶意软件家族,甚至误导分类器。因此,我们执行特征选择,以确定满足分类器的适当子集。为了达到这个目的,我们采用了包装器方法[ 9 ],即我们利用分类器本身来评估特定子集的特性。给定一个候选的特征子集,我们用这个集合来训练分类,我们使用的训练精度(即,在训练过程中获得的验证集的准确性)作为衡量。最后,我们保留能达到最佳精度的子集。

  特征的候选子集构造如下。对于所有特征的初始集合中的每个特征f,我们计算f的所有样本的分布和标签(例如,恶意软件家族)的相应分布之间的互信息[ 4 ]。互信息函数为我们提供了一个系数,量化多少了解的特点为一个通用的恶意软件样本的价值,给我们的直观的家庭信息,价值较大的互信息为一个给定的功能,最重要的是认识到恶意软件家族。我们考虑特征的子集,使得每个特征都有一个互信息值,其最大值小于获得的最大值。我们产生的每个问∈{ 10, 15, 20,25, 30, 35这样的数据,40, 45, 50 }。此外,我们通过主成分分析(PCA)[ 10 ]对每个特征子集进行处理,进一步减少特征空间。

  我们训练一个支持向量机的每个子集,最后保留的子集,产生最佳的训练精度的功能。这些特征是形成特征向量的特征,即指纹,完成任务(t1)。这也会导致任务的完成(T2)。事实上,相应的训练SVM成为分类器。

3.3。实施
  在本节中,我们描述了使用我们的方法在实验中的实现。

3.3.1 架构

  图1显示了我们的方法和预期工作流的体系结构。体系结构的核心是模拟器,它执行运行恶意软件示例的Android实例,以及相关的控制器,负责处理与模拟器的任何交互。首先,当一个新的恶意软件样本提交给系统(在一个APK格式)的控制器,在安装应用程序到Android充电和启动它的仿真。在执行过程中,应用程序通过安装在Android中的输入事件模拟器组件,通过一系列随机输入事件来刺激应用程序。在输入刺激阶段,度量收集器组件通过控制器访问Android仿真实例的程序文件系统。每一个采样间隔τ,度量器请求访问proc文件系统通过控制器,读取的资源消耗指标,并将它们存储在一个本地文件。当组件通知控制器所有的输入事件被模拟时,后者将停止应用程序的执行,并将模拟器重置为初始条件。最后,指纹生成器分析包含收集的度量的文件,以提取所提交的应用程序的特征并生成指纹。然后,该指纹被输入到SVM分类器,该分类器输出恶意软件样本的家族。

3.3.2 第三方工具
  为了实现提出的体系结构,我们采用了几种公开可用的第三方工具。在讨论如何将它们集成起来构建体系结构之前,我们简要地介绍了每一个模型。
virtualbox3是一个开源的虚拟机管理程序。它允许虚拟客户操作系统的物理机器上运行不同的操作系统成为可能。
genymotion4是一个Android模拟器,利用虚拟环境的创造中。genymotion提供所有真正的移动设备的特点,它可以控制和监视使用VirtualBox的命令行界面。
Android调试bridge5(ADB)是一个命令行工具使操作系统与模拟的Android设备的交互和访问所有资源。ADB还处理安装以及启动和终止应用程序。
用户界面/应用锻炼monkey6是一个程序在Android设备可以通过命令行运行通过ADB。它通过模拟包括触摸、移动、点击、系统事件和活动启动在内的各种输入,生成对Android仿真器上运行的应用程序的刺激。动力系统的非线性措施(排)是一个Python包,包括一维时间序列分析,不同的算法包括DFA、样本熵和Hurst指数。
numpy8是科学计算的Python包。我们用它来计算相关矩阵。Scikit-learn[ 17 ]是一个Python包,包括几台机器监督和无监督学习算法的学习,包括SVMs。

3.3.3。工具集

  我们的体系结构的核心,即模拟器,通过genymotion实现。它处理模拟器中的应用程序的安装,并且可以通过适当的命令启动和停止应用程序。用户界面/应用训练Monkey运行在Android并且可以在任何运行的应用程序的模拟输入事件。与Monkey的互动由ADB处理。可以要求Monkey生成一系列随机事件。序列是由一个单一确定的可重复的种子。在我们的方法中,我们让Monkey总是生成相同的随机输入事件序列。它实现了IES组件。我们的体系结构的度量收集器组件是通过与周期性地与ADB交互的Python脚本实现的。当所有输入事件都由Monkey模拟时,应用程序停止,虚拟机也停止。另外,Android的虚拟机的原始图像是通过VirtualBox的命令行工具恢复。该指纹生成器被另一个Python脚本中实现,它处理包含收集的度量和计算指纹的文件。通过对排和NumPy包适当的函数计算的特点。最后,建立和训练的分类器,通过Scikit-learn包。上面描述的整个工作流是完全自动化的,并通过适当的Python脚本处理。需要重现实验的所有材料已经在GitHub repository9提供。

4 实验评价

  我们进行了广泛的实验评估来验证我们的方法。在本节中,我们将讨论实验的细节,并给出结果。

4.1 数据集

  我们在在Drebin集合执行我们的实验[ 2 ]。这是一个可以用于研究目的的恶意软件样本的公开集合,其中包含来自179个不同家族的5560个恶意应用程序。Drebin数据已广泛应用于相关文献[ 8, 3, 5,11, 22 ]。我们比较我们的解决方案和droidscribe,在我们的实验中,我们选择了同一家庭的droidscribe。

4.2 实验装置

  我们的实验在一个8核Intel  Xeon CPU和内存16 GB的物理主机。所有的软件,包括模拟器(genymotion和VirtualBox)和Python脚本控制本机上运行的实验流程。模拟器运行一个未修改的安卓4.0案例。我们选择了这个版本的Android是因为它发布在drebin数据集的样本收集期间。我们实现了我们的方法,如第3.3节所述。在每次执行中,我们通过Monkey生成模拟输入事件的随机序列。此外,我们配置Monkey以相等的概率生成每个事件类型。在所有实验中,我们生成s=10, 000个输入事件。这个数字已经在关于生成输入事件数量增加的DFA指数稳定性的初步研究后确定。这一分析结果将在下一节讨论。应用程序的资源消耗度量之间的皮尔森相关系数的稳定性已经在[21]进行了研究。每个实验都是独立进行的,因为每次执行后我们都重置模拟器。


***本文很长,分为两部分翻译,后半部分会很快放上来***

翻译:(看雪翻译小组)Daemind

[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

收藏
免费 1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回