Machine Learning for Malware Detection


此文章为恶意软件检测的阶段性学习内容


一、恶意软件检测知识基础

恶意软件识别模块根据收集到的数据判断某个对象是否构成威胁。

数据获取的两个阶段

(1)预执行阶段:在不执行文件的情况下了解文件的任何信息。这可能包括可执行文件格式描述、代码描述、二进制数据统计、文本字符串和通过代码仿真提取的信息以及其他类似数据。

(2)执行后阶段:数据传输有关系统中流程活动导致的行为或事件的信息。

安卓操作系统架构

在这里插入图片描述

(1)修改过的Linux内核:安卓提供的核心系统服务是基于Linux系统的,如安全、电源管理和驱动程序。作为硬件和软件之间的抽象层,修改 后的Linux内核隐藏了硬件层的细节,并向上层提供服务以减少耦合。

(2):Android库层中基于Linux的进程沙盒机制是整个安全设计的基石之一。依靠修改过的Linux内核层来实现线程管理和内存管理等基本功能,Dalvik虚拟机是通过优化来建立的,可以在有限的内存中同时有效地运行多个虚拟机实例,每个Android应用都作为一个Linux进程与Dalvik虚拟机的一个实例来执行。

(3) 系统运行时:从整体架构的角度来看,开发者只对系统运行时层 和它上面的结构有主动控制权,所以对安卓恶意软件的检测也应该集中在同一位置。它可以分为系统库和安卓运行时。Android运行时的核心库提供了大部分的API,如Android OS、Android.net和Android.media。

(4) 应用框架层:安卓有一个应用框架层,为安卓开发提供各种API。 开发人员可以自由地使用这些API来构建他们的应用程序,但要遵守框 架实现的安全限制。

安卓应用程序的关键组成部分

(1)活动:活动为用户提供了一个图形化的操作窗口,如按钮、文本块、输入块等。用户通过点击这些元素与应用进行交互。活动通常作为 用户和应用程序功能之间的中间层,负责传达用户的意图。

(2)服务:服务经常被用来在后台进行耗时的逻辑处理,因此许多恶意行为都与服务有关,因为它对用户是不可见的。该服务不在一个单独的进程中运行,而是依赖于创建该服务的应用程序进程。

(3)广播接收器:作为一种广泛使用的在应用程序之间传输信息的机制,广播接收器通常被恶意软件开发者用来监控与敏感信息有关的各种事件。广播接收器过滤、接收和响应传出的广播。广播接收器允许安卓 应用对外部事件作出反应,如手机开机、收到短信或电话。

(4)内容提供者:内容提供者有可能帮助安卓恶意软件实施恶意行为,以获得共享数据的权限。内容提供者支持在多个应用程序中存储和读 取数据,作为应用程序的数据库执行,因此它允许恶意软件开发者访问暴露的数据,如联系簿和信息。

所需的权限和安卓应用中使用的四个组件中的每一个都需要在AndroidManifest.xml中注册。因此,分析AndroidManifest.xml可以对应用程序的功能和恶意行为有一个概览。AndroidManifest.xml文件通常被作为辅助指标,配合其他分析方法进行检测。

特征选择

特征选择通过消除Android恶意软件检测中的冗余和不相关特征来提高恶意软件检测效率(Babaagba 和 Adesanya [2019])。根据使用静态特征、动态特征或两者的特征提取方法,Android恶意软 件检测技术可以分为动态分析、静态分析和混合分析。


(1)动态分析:动态分析是一种在沙盒环境中运行程序,跟踪程序的API调用序列、系统调用、网络流量、CPU数据等行为,监测程序运行过程中的数据流,从而揭示出更接近实际情况的程序处理的真实行为。 但由于大量的资源和程序运行时的检测速度较慢,所以没有得到广泛的应用。

(2)静态分析:静态分析是通过分析安卓文件并提取信息,如请求的权限、操作码序列和API调用等。静态检测在安卓恶意软件检测领域被 广泛使用,因为许多可选特征很容易提取。

(3)混合分析:动态和静态分析的结合可以使Android恶意软件检测更加准确和高效。(Onwuzurike 2018)比较了基于从API序列构建的马尔可夫链的相同行为模型上的静态和动态分析之间的检测性能。结果表明,动态代码加载在自由条件下对数据具有更好的性能。

此外,API通常用于在静态特征分析和动态特征分析中检测Android恶意软件。在处理完 API 序列或函数调用图,并将其馈送到 RNN 后,可以发现软件的行为路径,这与良性软件不同。巨大的重复API序列的问题可以通过API的信息熵的大小来解决(Lu等人。2019).部分研究人员(高2019(范等人)2018)将从敏感的函数调用图中获得的频率关系矩阵转换为向量,并结合其他特征来检测Android恶意软件。

原始特征数据预处理

从特征提取阶段获得原始特征后,数据预处理是必不可少的,该阶段通常涉及以下阶段。

(1)数据清洗:数据清洗通过特征提取获取原始数据后,直接去除不相关的特征。例如,应该清除良性和恶意Android应用程序拥有的不相关权限。

(2)数据整合:数据集成是指集成提供的两个或多个特征的信息以进行全面检测。在检测阶段,当多源特征组合成为分类器的输入时,有必要使用有效的数据融合方法。

(3)数据缩减:数据缩减主要是指对涉及复杂算法的数据进行降维的过程,试图解决Android特征向量维度过大的问题。

(4)数据转换:数据转换是将数据从一种形式转换为另一种形式。最常用的研究方法是将提取的特征转换为图像,并将其馈送到深度神经网络中。

在数据清理阶段,会清理一些原始数据,以满足下一个数据处理步骤的要求。例如,无法分析的数据被删除以进行后续的N-Gram处理。此外,一些论文删除了多余的原始特征,以生成仅包含与恶意行为相关的特征的矢量地图。

在数据集成阶段,静态特征和动态特征可以组合在一起,以获得更好的性能。多源特征通常是神经网络一个分支的输入,所有分支的输出组合在一起形成全连接层的输入。

在数据缩减阶段,采用了特征加权、进化遗传算法、自然语言处理等机器学习模型等多种算法来降低特征向量的维数。同时,一些研究使用图像嵌入方法技术来表示特征并降低图形维数。

在数据转换阶段,许多研究人员将提取的特征转换为音频文件,有向图,灰度图像,彩色图像等,以利用神经网络来处理此类数据。

有效特征子集的选择

(1)基于过滤器:与恶意软件分类器的结果无关,筛选器模型根据特征的一般特征选择有效的特征子集。由于独立于分类结果且时间效率高,因此在特征子集选择中得到了广泛的应用。

(2) 基于包装器的方法:基于包装器的方法使用恶意软件分类的准确性来估计生成的特征子集的效率。通过恶意软件分类的准确性来评估生成的特征子集的效率,包装方法可以获得更好的性能,但与基于过滤器的方法相比,包装器方法更复杂,计算成本更高。

最近,很少有研究利用Android恶意软件检测中分类器准确性的反馈。虽然基于过滤的算法中的计算开销较小,但忽略了从不同特征之间的分类器获得的有价值的相关性信息,因此在处理高维特征向量时可以选择大量冗余特征。为了在恶意软件检测分类器的效率上取得突破,应该解决以前基于包装器的方法中所选有效子集中取之不尽用之不竭的特征组合问题。

(3)特征子集选择中的机器学习:使用机器学习模型来选择Android特征的关键是利用其预测能力来计算特征的权重或基于评估指标获得特征之间的相关性。此外,基于包装器的特征选择还可以应用机器学习模型来对优化算法选择的有效特征子集进行评分。

对于在分类任务(如 SVM 和 DT)上表现良好的机器学习模型,这些模型具有合适的分离功能,因为它们与任一类中的点保持最大距离。对于神经网络,可以采用从输入特征的 softmax 权重总和派生的分数作为评估指标来选择有效的特征子集。

检测方法

(1)基于签名:基于模式匹配,基于签名的检测会维护一个恶意软件签名库,其中包含每个已知 Android 恶意软件的唯一签名。恶意软件签名库包括不同的属性,如文件名、内容字符串或字节,这些属性由专家手动识别或自动生成。它通过测试库中是否存在匹配的恶意软件签名来检测 Android 示例。该技术由于其检测速度快,精度高,是最方便和最普遍使用的。可以正确检测到恶意软件库中记录的所有Android恶意软件。但是,缺点是恶意软件签名库的维护非常耗时,并且不适用于检测新的恶意软件。

(2)基于启发式:启发式检测(也称为基于异常和基于行为的检测)强调识别未知恶意软件的能力。此方法将未知样本的特征与已知的恶意软件家族进行比较,每个恶意软件家族由一组规则表示,这些规则被定义为挖掘软件的常见经验和知识。当检测到的样本的特征符合一个恶意软件系列的规则时,它被视为恶意软件。已知规则集包括软件结构功能、API 调用、操作代码序列和多视图集成规则等属性。基于启发式的检测技术具有自我发现未知恶意软件的能力,并提倡使用多种方法来确定恶意和良性软件之间的区别。它弥补了传统检测的不足,还可以识别未知的恶意软件,但零日恶意软件的错误率较高。

(3)基于机器学习:机器学习通过调整参数来训练学习者,以做出最佳预测。现有的研究表明,机器学习是检测Android恶意软件的有效且有前途的方法。近年来,许多恶意软件检测工作都试图利用机器学习来寻求未知Android恶意软件检测的突破。以下小节将详细介绍基于机器学习的检测技术。

二、基于机器学习的安卓恶意软件分类

监督学习

标有类别的训练数据是监督学习中机器学习模型的输入。当监督学习对各种事物进行离散预测时,它是一种分类任务,当监督学习对连续值进行预测时,它是一种回归任务。监督学习包括两个阶段:训练模型和将模型拟合到可用的训练数据。将训练模型应用于新样本并获得预测。在训练阶段,当我们搜索最佳模型时,该模型将为给定特征集X的以前未看到的对象生成正确的标记Y。在恶意软件检测的情况下,X可能是文件内容或行为的一些特征,例如,文件统计和使用的API函数列表。标签Y可以是恶意软件或良性软件,甚至是更精确的分类,例如病毒、木马下载程序或广告软件。

无监督学习

只得到一个数据集,而没有任务的正确答案。目标是发现数据的结构或数据生成的规律。聚类是一项任务,包括将数据集拆分为多组相似对象。另一项任务是表示学习——这包括基于对象的低层描述(例如,自动编码器模型)为对象构建信息特征集。

半监督学习

结合监督学习和无监督学习,只有部分训练数据被标记在半监督学习中(Zhu和Goldberg)2009).它学习数据的内部结构,然后合理地组织数据以进行预测,只有几个标记的数据集(Engelen和Hoos)。2020).

强化学习

强化学习可以应用于选择Android功能,使用输入数据的分类结果作为对分类模型的反馈,其原则是代理优化其下一步操作以最大化奖励价值。

用于Android恶意软件检测的三种主要类型的模型和算法如下:第一种(1)-(6)是传统的机器学习模型,第二种是神经网络和深度学习(7)-(8),第三种使用集成学习(9),它结合了多个分类器来检测Android恶意软件。

(1)线性模型:使用Android功能作为输入的简单且高度可解释的线性函数用于提供恶意软件预测。典型的线性模型包括逻辑回归和线性回归,区别在于逻辑回归是解决分类问题,而线性回归处理回归问题。(张磊等.2019)通过构建专门的线性模型来局部近似黑盒模型生成的异常评分,从而提供了诊断异常的间接方法。

(2)支持向量机:它显示了使用支持向量机(SVM)有效监控运行Android恶意软件的资源消耗的重大改进。SVM是找到一个超平面(Boswell)2002),将 n 维数据完美地分为两类。(法伊兹、侯赛因和马尔尚)2020)使用从Android权限,广播接收器和API中提取的功能应用SVM来检测Android恶意软件,personaCateg-SVM实现了98.55%的最高分类准确率。

(3)朴素贝叶斯:基于贝叶斯定理,朴素贝叶斯(NB)假设属性值对给定类的影响独立于其他属性的值(Leung2007).(Alqahtani,Zagrouba和Almuhaideb)2019)提供了对机器学习检测器的回顾,详细总结了在Android恶意软件检测中应用的NB,SVM和DNN。

(4) 决策树:作为归纳推理中最常用的监督学习模型之一,决策树(DT)从训练数据构建了一个类似流程图的树结构。(拉什卡里等人。2018)应用RF,KNN和DT作为Android恶意软件检测分类器进行比较,每个机器学习算法都使用相同的选定功能进行训练,测试和评估。

(5) K 最近邻:作为监督学习模型,K最近邻(KNN)可以通过测量不同特征值(Ray)之间几何空间中的欧氏距离来获得Android恶意软件分类结果。2019).

(6) K 均值聚类:K-means聚类算法是一种无监督学习算法,通常应用于Android恶意软件家族分类(Ilham,Abderrahim和Abdelhakim)2018).给定一组 N 个数据点Rd和一个整数K在实数D维空间中,它是在N个数据点中找到中心点,从而最小化每个数据点到其最近中心的平均平方距离(Kanungo等人。2002).

(7)神经网络:神经网络(NN)由大量连接的人工神经元组成,使用神经元来反射接收到的信号,并使用权重来表示信号的强度(Gershenson2003).最常用的神经网络算法是感知器神经网络、霍普菲尔德神经网络和自组织映射。

(8)深度学习:通过组合非线性模块获得多个级别的数据表示,这些模块将表示级别转换为更高,更抽象的表示级别(LeCun,Bengio和Hinton)2015),深度学习起源于NN(Du等人。2016)如图所示(邱2020).它通常用于在功能转换为图像时检测Android恶意软件。在(Vinayakumar等人) 中提出了一种使用基于分割的分形纹理分析和深度卷积神经网络特征的混合恶意软件分类。2018),它将Android APK二值化为使用字节码信息生成的灰度图像。(Vinayakumar等人)2018)使用反向传播随时间(BPTT)来训练LSTM模型以检测Android恶意软件。(Vinayakumar等人)2018)使用两种不同的网络拓扑,具有多个网络参数,一个标准LSTM网络仅包含一个隐藏层,以及一个具有三个隐藏层的堆叠LSTM网络,在静态和动态分析中都表现出很高的Android恶意软件检测准确性。

(9)集成学习:组合多个分类器以提高集成学习中的Android恶意软件检测准确性(Zhao等人。2018)(拉娜和宋2020).更具体地说,集成学习描述了一种组合学习者的方法。一种基于多级结构的新型分类器融合方法由Yerima和Sezer提出2019),在较低级别训练基本 Android 分类器以生成模型,使用一组排序算法选择最终分类器,并根据较高级别基本分类器的预测精度分配所选分类器的预测结果的权重。但是,应用集成学习在计算上成本很高,因为每个APK文件都应由多个检测器进行分析。为了解决这个问题,(Birman等人。2019)应用深度强化学习来自动启动和停止基础分类器,使用DNN动态确定是否有足够的信息来对给定的APK文件进行分类。

模型选择

训练阶段,我们需要选择一系列模型,例如神经网络或决策树。通常,族中的每个模型都由其参数确定。训练意味着我们使用一组特定的参数从选定的族中搜索模型,该参数根据特定的度量在参考对象集上为训练模型提供最准确的答案。换句话说,我们“学习”定义从X到Y的有效映射的最佳参数。

三、基于机器学习检测的应用细节

大型代表性数据集

创建的模型在很大程度上取决于它在训练阶段看到的数据,以确定哪些特征在统计上与预测正确的标签相关,不仅是大量的恶意文件同时也需要大量的良性文件。

模型的可解释性

模型的可解释性决定了我们管理模型、评估其质量和纠正其操作的容易程度。

低假阳率

解决这个问题,重要的是对机器学习模型和将在训练期间优化的度量提出高要求,并明确关注低误报率(FPR)模型。

动态修复

因为以前看不到的新良性文件有时可能会被错误检测到。考虑到了这一点,实现了一个灵活的模型设计,允许在不完全重新训练模型的情况下动态修复误报。

四、基于机器学习检测的局限性和挑战

快速适应恶意软件编写者的反击

在恶意软件检测领域之外,机器学习算法通常在固定数据分布的假设下工作,这意味着它不会随时间变化。当我们有一个足够大的训练集时,我们可以训练模型,以便它能够有效地推理测试集中的任何新样本。将机器学习应用于恶意软件检测后,必须面对这样一个事实,数据分布并不是固定的,即:

(1)恶意软件编写者努力避免被检测到,并发布与训练阶段看到的恶意软件文件有显著不同的新版本。

(2)数以千计的软件公司生产新型良性可执行文件,与以前已知的类型截然不同。训练集中缺乏这些类型的数据,但模型需要将其识别为良性。

劣化问题

对于恶意软件分类阶段,已经注意到基于机器学习的Android探测器存在可持续性问题。由于Android生态系统和新型恶意软件的不断发展,基于机器学习的探测器会恶化。Android恶意软件分类器中的老化问题在(Fu和Cai)中得到了强调2019),并由(Jordaney等人)中提出的框架确定。2017)。为了解决这个问题,要求该体系结构需要灵活,并且必须允许在再培训之间“动态”更新模型。同时还必须有有效的流程来收集和标记新样本,丰富培训数据集并定期重新培训模型。对于 Android 功能选择阶段,选择有效的 Android 功能以构建能够适应演变的反恶意软件工具至关重要。一些研究人员(Kantchelian等人。2013(Maggi et al.2009)试图通过频繁地重新训练恶意软件分类模型来解决这个问题,但因此分类器的性能往往不可信,重新训练频率松散,并且导致在重新训练过程中手动标记所有Android样本的成本很高。因此,可持续发展问题的彻底解决方案侧重于推广快速老化的分类器。从综述的文献中,减缓分类模型老化的方法描述如下。

(1)抽象中的呈现特征:解决问题的关键是开发能够适应变化的探测器并实现可扩展性,因此利用抽象的概念使机器学习模型对Android框架的详细变化不敏感而更具适应性。例如,(Onwuzurike等人。2017) 使用族、包或类信息来生成抽象的 API 调用,而不是依赖于原始 API 调用,并且他们在包含六年捕获的样本的数据集上测试了模型,以显示其一致性。同样,(张等人。2020)还通过探索语义相似性来处理这个问题,尽管实现方式不同。

(2)跟踪进化模式:另一个策略(蔡,2020年b)是了解良性样本和恶意软件中提取的特征的进化模式,然后利用这些发现来构建可持续的恶意软件检测器。(蔡2020)研究了运行时行为所描述的新行为配置文件的五年演变轨迹,并根据多年来对良性和恶意软件之间一致差异的观察提出了一种检测系统。它显示出比MamaDroid更好的可持续性表现(Onwuzurike等人。2016)用于保持高精度的能力。

(3)构建自演进探测器:对于此方法,如果在检测阶段被识别为老化,则将更新检测模型。(徐等.2019)提出了一种自我进化的Android恶意软件检测系统,该系统维护一组不同的检测模型,并通过在线学习技术自动自我更新,以提高可持续性并减少恶化。

五、安卓数据集和拆解工具

数据集

(1)Androzoo: AndroZoo是一个著名的Android应用程序集合,主要从Google Play,AnZhi和AppChina捕获,样本由数十种不同的防病毒产品分析。它仍在更新中,目前包含16,941,455个不同的良性和恶意软件样本。

(2)AndroZooOpen:作为由紧密来源的Android应用程序组成的AndroZoo的补充数据集,AndroZooOpen提供了越来越多的开源Android应用程序集合,这些应用程序从包括Github和Google Play在内的多个来源收集,目前拥有超过45,000个应用程序存储库。

(3)AndroCT: AndroCT是一个大规模的数据集,用于2010年至2019年期间35,974个良性和恶意Android应用程序中函数调用的运行时跟踪。每个应用都在模拟器和真实设备上执行,并且通过针对自动生成的测试输入运行每个示例应用来单独策划跟踪。

建议研究的数据集(例如,Androzoo,AndroZooOpen)进行实验。大多数现有数据集都是静态的,不包括有关应用的运行时行为的信息。对于动态分析,建议使用 AndroCT 来提取运行时跟踪功能。

拆解工具

反汇编是编译的反向过程,将可执行的Android机器源代码转换为更高级别的代码。目标代码的拆解可以分为静态反汇编和动态反汇编。静态反汇编是通过解析目标代码的二进制指令而不执行程序来直接获取汇编代码。另一方面,动态反汇编在程序执行时跟踪指令,因此动态反汇编只能处理目标代码执行的指令。

(1) Smali & Baksmali (2021):它是一个功能强大的APK文件编辑工具,用于Dalvik虚拟机反编译和反向编译class.dex。该语法是 smali 中的松散 Jasmin 和 Baksmali 中的 dedexer 语法,它实现了 .dex 格式的所有功能。

(2)Androguard(2020):作为Android应用程序的逆向工程,它的功能包括:支持多种平台(如Linux,Windows,OSX等);主要用于静态分析;主要用Python编写;实现可视化。

(3) APKTool (2021):APKTool的主要功能包括将资源文件分解为原始格式(包括Resources.arsc,classes.dex,png,XML等),将解码资源重建回二进制APK / JAR,以及处理依赖于框架资源的APK。

(4) AndroPyTool (2019):它能够从Android APK中提取静态和动态功能,它结合了各种知名的Android应用程序分析工具,例如Droidbox,FlowDroid,Strace,Androguard和Virustotal。AndroPyTool需要一个源目录来实现分析并生成json和CSV格式的属性文件。

(5) FlowDroid (2014):FlowDroid 是一款面向上下文、流、场、对象敏感度和生命周期感知的 Android 静态污点分析工具,与其他静态分析方法相比,它具有更高的准确率和召回率。基于IFSP框架,可以分析信息流的所有可能路径,生成CFG(控制流图),并标记敏感信息流从源头到汇的污点泄漏路径。
-com-s.vpn.uestc.edu.cn:8118/doi/full/10.1080/08839514.2021.2007327#))**:FlowDroid 是一款面向上下文、流、场、对象敏感度和生命周期感知的 Android 静态污点分析工具,与其他静态分析方法相比,它具有更高的准确率和召回率。基于IFSP框架,可以分析信息流的所有可能路径,生成CFG(控制流图),并标记敏感信息流从源头到汇的污点泄漏路径。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着网络威胁日益增长和恶意软件的潜在危险日益加剧,对于恶意软件检测的需求也越来越高。传统恶意软件检测方法存在很多局限性,如签名不透明、固定规则无法识别新型恶意代码、容易受到欺骗等问题,机器学习成为了解决恶意软件检测难题的有效手段。 机器学习模型可以根据大量样本数据,发现数据的内在规律来进行学习,并模拟数据间的关系。通过学习已知的恶意样本和正常样本,机器学习算法可以自动提取特征并判断未知样本是否是恶意软件。在恶意软件检测中,机器学习可以解决传统的规则、特征、模式等方式过时、不能及时更新的问题。 恶意软件检测使用机器学习方式,需要准备足够的数据训练集,并基于数据集训练机器学习模型。在训练过程中,可以选择不同的机器学习算法和特征工程方式,进行调优优化,使机器学习模型达到更加准确和可靠的检测效果。 常见的恶意软件检测模型包括支持向量机(SVM)、朴素贝叶斯分类(NBC)、神经网络(NN)和深度学习模型等。这些模型在特征提取和分类预测等方面有着不同的优缺点,因此在具体应用场景中需要根据实际情况进行选择和组合。 总体来看,恶意软件检测使用机器学习模型,可以实现自动化恶意软件检测,准确率高、速度快、易于扩展。但是,在实际应用中也有很多需要注意的问题,如数据质量问题、机器学习模型解释性问题、对抗样本问题等。因此,在恶意软件检测中使用机器学习模型仍需持续深入研究和探索,进一步提高检测的准确性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值