十个检测研究分析:Towards a fair comparison and realistic evaluation framework of android malware detectors based on static analysis and machine learning
论文源码:androidmaldet_comparative-main
论文源码地址:Borja Molina Coronado / AndroidMalDet_Comparative · GitLab
基于静态分析和机器学习的 Android 恶意软件检测器的公平比较和现实评估框架
摘要翻译:
与其他网络安全领域一样,机器学习 (ML) 技术已成为检测 Android 恶意软件的有前景的解决方案。从这个意义上说,迄今为止已经提出了许多采用各种算法和功能集的提案,通常报告了令人印象深刻的检测性能。然而,缺乏可重复性和缺乏标准的评估框架使得这些建议难以进行比较。在本文中,我们使用通用评估框架对 10 项有影响力的 Android 恶意软件检测研究工作进行了分析。我们已经确定了五个因素,如果在创建数据集和设计检测器时不考虑这些因素,将会显着影响经过训练的 ML 模型及其性能。特别是,我们分析了以下因素的影响:(1) 重复样本的存在,(2) 标签(好软件/灰色软件/恶意软件)归因,(3) 类别不平衡,(4) 使用规避技术的应用程序的存在,以及( 5)应用程序的演变。基于这项广泛的实验,我们得出的结论是,所研究的基于机器学习的检测器已经得到了乐观的评估,这证明了所发表的良好结果是合理的。我们的研究结果还强调,考虑到上述因素,必须生成现实的实验场景,以促进更好的基于 ML 的 Android 恶意软件检测解决方案的兴起。
10 项检测研究分析
介绍
[!tip]- 恶意软件检测的现状介绍
在过去的十年中,我们见证了移动设备的令人瞩目的进步。除了硬件之外,专为移动市场设计的操作系统 (OS) 也经历了成对的功能改进。截至 2021 年最后一个季度,Android 平台的市场份额接近 72%(Statista,2022),是领先的移动操作系统。它具有开源性质,可用于多种处理器架构。这些事实,加上可实现丰富服务(语音和图像识别、非接触式支付等)的记录良好的开发框架的可用性,促进了 Android 在智能手机之外的应用(Alaa 等人,2017 年; Do 等人,2017 年;Macario 等人,2009 年)。
再加上这种日益流行的趋势,恶意软件作者对该操作系统的日益关注凸显了用户面临的风险(Xu et al.,2016b)。移动设备上存储的数据对于用户来说至关重要、敏感,并且已成为攻击者的宝贵目标。卡巴斯基表示,针对这些设备的广告软件和银行恶意软件是 2020 年的两个主要安全威胁,甚至在 Google Play 等可信应用市场中也被检测到(实验室,2021 年)。
意识到这些问题,研究人员将机器学习 (ML) 技术视为实现 Android 恶意软件检测器的一种有前景的解决方案(Tan 等人,2015)。机器学习方法利用应用程序数据来识别对检测恶意软件有用的信号。为此,恶意软件检测可以遵循以下策略之一(或两种策略的组合):(1)基于异常的检测侧重于从好软件构建配置文件,以便将与这些配置文件的偏差标记为危险; (2) 相反,基于误用的检测侧重于学习恶意软件和好软件的特征,以便识别它们在新应用程序中的存在(Molina-Coronado 等人,2020)。大多数关于Android恶意软件检测的研究工作属于第二类。更具体地说,其检测机制依靠有监督的 ML 算法(Faruki 等人,2014 年;Tam 等人,2017 年)。
要使用机器学习算法(无论是针对滥用还是基于异常的系统)执行恶意软件检测,需要对应用程序进行预处理,以提取最能描述其行为的特征集。该任务是使用动态或静态软件分析技术来执行的。在动态分析中,应用程序的行为在受控环境(沙箱)中进行监控,在沙箱中模拟用户和系统交互。静态分析基于对应用程序包 (APK) 中包含的文件的检查,而无需运行代码。这些技术各有优点和缺点。一方面,通过动态分析,可以访问运行时加载并执行的代码。然而,就代码覆盖率而言,这种分析的成功很大程度上取决于模拟机制以及应用程序中是否缺少沙箱规避工具(Afianian 等人,2019)。另一方面,静态分析能够评估 APK 中存在的所有信息,但其成功在于缺乏诸如混淆或动态加载代码之类的规避技术(Moser 等,2007)。两种分析方法是互补的,可以结合起来进行 Android 恶意软件检测(Arshad 等人,2018 年;Spreitzenbarth 等人,2015 年)。
研究人员在提出、开发和测试 Android 恶意软件检测器时面临的主要困难之一是缺乏通用且现实的评估框架。该框架应包括适当且带标签的数据集,这对于训练和/或测试机器学习算法至关重要。特别是,正如我们在本文中所说明的,大多数公开可用的数据集都已过时,仅包含恶意软件、重复样本或样本数量不足。鉴于此,作者选择通过从不同来源下载应用程序示例并使用 VirusTotal1 等工具对其进行标记来构建临时的自定义数据集。这个过程不仅成本高昂,而且还使基于机器学习的恶意软件检测建议的再现性和比较变得复杂。
由于无法获得实现所提出方法的代码,或者在各自的出版物中遗漏了允许其实现的重要细节,从而加剧了可重复性问题。这对于使用 ML 算法的方法尤其明显,这些算法需要调整大量参数才能正常执行(Pendlebury 等人,2019),因为通常不提供此信息。评估程序也是如此。在许多情况下,它们没有得到明确描述,或者是在假设非常乐观的情况下设计的(Allix 等人,2016a;Pendlebury 等人,2019)。
本研究的主要目的是对文献中已发表的 Android 恶意软件检测建议进行公平比较,揭示其实际有效性。鉴于多年来提出的大量提案,以及缺乏共同且现实的评估标准,对方法进行公平的比较并不是一项简单的任务。我们基于静态分析选择了 10 个使用不同特征和 ML 方法的流行检测器,并在通用评估框架下对它们进行了比较。在许多情况下,由于缺乏原作者的实现,需要重新实现检测器中使用的算法。据我们所知,这种广泛的实施和实验工作的结果是迄今为止对 Android 恶意软件检测方法最全面的比较研究。
这项工作的科学贡献总结如下:
-
我们提出了一些对Android恶意软件检测器的准确性产生负面影响的因素。特别是,我们考虑了现实生活中存在的五个条件,但在提出恶意软件检测器时经常被忽略:(1)数据集包含大量几乎相同的应用程序;(2)对于什么是好软件,什么是恶意软件,人们并不总是达成一致,有些应用程序缺乏足够的共识,无法被视为恶意或良性;(3)好软件多于坏软件;(4)恶意软件作者可能会使用混淆技术进行逃避尝试;(5)恶意软件和好软件会随着时间的推移而进化。然后,我们认为在设计和评估Android恶意软件检测器时必须考虑所有这些因素,以提供真实的性能值。
-
考虑到上述因素后,我们分析了最先进的基于 ML 的 Android 恶意软件检测方法的性能。为此,我们选择了 10 个利用静态分析技术的极具影响力的探测器。我们表明,由于设计和评估缺陷,这些方法的作者提供的出色表现是不切实际的乐观。
-
我们强调该领域已发表的工作缺乏可重复性。从这个意义上说,我们公开了这项比较工作中使用的代码和数据集。
-
我们讨论 Android 恶意软件检测的未来研究方向,旨在解决已识别的设计和评估缺陷。
本文的结构组织如下。第 2 部分回顾了与本文主题相关的最重要的著作。第 3 节包括有关 Android 应用程序、静态分析以及使用此技术可以获得的数据类型的基本概念。第 4 节介绍了本工作中考虑的基于监督 ML 分类器的最先进的检测器。第 5 节描述了通常如何构建恶意软件检测数据集及其局限性(构建它们时应考虑的因素,但经常被忽略)以及使用自定义数据集带来的再现性问题。在第 6 节中,我们介绍了我们的实验设置。第 7 节根据第 5 节中确定的因素的分析讨论了所选 Android 恶意软件检测器的局限性。第 8 节讨论了现实评估框架应考虑的特征,以及 Android 恶意软件中的挑战和未来研究方向检测。我们在第 9 节中总结本文。
2 相关工作
Android 恶意软件检测是信息安全文献中经过深入研究的领域。尽管如此,只有少数实验研究侧重于分析影响恶意软件检测器性能的因素,这也是本文的主题。他们中的大多数人将分析集中在一小群具有相似特征的探测器上。迄今为止,最全面的研究是 Pendlebury 等人。 (2019)。本文分析了三种检测算法评估中的两种不同的偏差来源。第一个称为空间偏差,来自数据集中每个类别的样本比例之间的差异。第二种类型是时间偏差,与模型训练期间包含未来知识有关。测试空间偏差的实验得出的结论是,类别之间的比例是作者报告的结果的决定因素。关于时间偏差影响的实验表明,随着时间的推移,模型往往会错误分类恶意软件,而好软件的准确性随着时间的推移保持稳定。这项工作得出的结论与之前另外两项研究中得出的结论类似,每项研究在实验中只考虑一个探测器(Allix 等人,2016a;Roy 等人,2015)。
Rastogi等人(2014)研究了恶意软件应用程序使用混淆技术来逃避检测。该研究对十款Android商业杀毒产品进行了分析,通过对恶意软件应用不同的混淆技术对其进行测试。结果证明,所有被分析的工具在检测至少一种混淆类型的恶意软件时的有效性都有所下降。这项工作突出了这些商业解决方案的弱点。然而,考虑到检测器的细节并不公开,关于混淆如何影响Android机器学习检测器的具体结论无法从本研究中得出。另一项工作评估了Windows机器学习恶意软件检测器识别打包恶意软件的能力(Aghakhani等人,2020)。进行了一系列广泛的实验,以确认包装样品是否由于包装人员留下的痕迹或样品的行为而被识别。作者总结说,依赖于静态分析特征的机器学习检测器倾向于关注混淆的迹象。因此,由于误报的数量,这些方法对Windows恶意软件的可行性提出了质疑。尽管如此,还需要进一步的研究来评估这些发现是否也适用于Android恶意软件检测器。
Surendran (2021) 部分讨论了设计和评估检测器时数据集中存在重复项的问题。对两种 ML 检测器进行了初步实验,一种基于 API 调用的使用,另一种使用权限。该工作的作者假设重复项与获得高估的模型性能之间存在关系。然而,需要额外的分析来证实这一假设,因为极端重复删除配置(使用充足的相似性阈值)的数据集大小的隐式减小最终可能会产生类似的结果。
综上所述,之前的工作主要集中在分析影响探测器的一些具体评估缺陷,包括:空间偏差(Allix et al., 2015;Pendlebury et al., 2019;Roy et al., 2015)、时间偏差(Allix et al., 2015)、时间偏差(Allix et al., 2015)、时间偏差(Allix et al., 2015) al.,2015;Pendlebury 等人,2019)、混淆的影响(Maiorca 等人,2015;Rastogi 等人,2014)或数据中重复项的影响(Surendran,2021)。然而,这些分析是通过少数方法进行的(Allix 等人,2016a;Roy 等人,2015;Surendran,2021),在某些情况下,利用了类似的特征集(Pendlebury 等人,2019) 。一些研究不够深入(Surendran,2021)或专门针对商业黑盒检测器进行,因此有关其检测机制的详细信息(即其特征或是否基于签名或 ML 算法)并未公开,并且结果无法推断(Maiorca 等人,2015 年;Rastogi 等人,2014 年)。这些已发表的作品都没有考虑到由于从数据集中删除既不明显是恶意软件的应用程序而造成的偏差,也没有分析在许多现有检测器上使用不同阈值将应用程序标记为恶意软件的效果。因此,我们认为,在 Android 恶意软件检测领域,必须进行更全面的分析,包括所有已识别的因素以及使用不同特征和机器学习方法的更多检测器。与已发表的文献相反,这份手稿不仅提供了一个比较框架,证明缺乏现实的建议,并说明了许多扩展的设计和评估偏差,而且还针对现实的恶意软件检测器的建议提出了建议并确定了未来的研究方向。
3 背景
本节稍微介绍一些理解手稿其余部分所需的背景知识。它包括有关 Android 应用程序结构的描述以及可以通过应用程序静态分析来检查以提供 ML 算法的信息类型。
3.1 安卓app
Android 应用程序以 APK(Android 应用程序包)形式分发。 APK 是一个 ZIP 压缩文件,其中包含在系统上执行应用程序所必需的资源:清单数据和编译的代码。
3.1.1 Manifest 数据
Android 应用程序的清单文件定义了应用程序运行所需的一组属性和组件。该文件采用 XML 格式,分为三个主要块或部分:
- 应用程序组件块定义在应用程序运行时或用户向操作系统请求特定操作时与操作系统交互的应用程序元素。这些组件实现后台功能(服务)、管理用户屏幕和应用程序交互(活动)、启用应用程序与其他操作系统组件或应用程序(广播接收器和意图过滤器)的交互以及与其他进程(内容提供者)共享数据的接口。
- 硬件和软件功能块定义应用程序运行所需的操作系统属性和功能。这包括软件功能,例如备份支持、用户帐户管理、输入法等。硬件功能包括相机、蓝牙传输、指纹传感器等元素。声明请求的功能很有用,例如,可以防止应用程序运行在不符合所需规格的手机上。
- 权限块指示应用程序所需但受操作系统保护的功能。对这些功能的访问必须由用户明确授予。默认情况下,Android 应用程序无权执行可能危及操作系统、用户信息或其他应用程序的操作。因此,需要访问麦克风、摄像头、联系人列表、互联网连接、位置等的权限。
3.1.2 应用程序代码
Android 应用程序通常使用 Java 或 Kotlin(Google 用于 Android 开发的首选语言)开发,并在编译过程中转换为 Dalvik 字节码格式。 Dalvik 字节码运行在 Android 虚拟机上,该虚拟机充当独立于平台的环境。由操作系统直接管理的移动设备的硬件组件与由虚拟机管理的应用程序之间的交互是通过 API 库执行的。这些 API 提供了一种访问应用程序所需的硬件功能的通用方法。因此,将程序员从设备的特殊性中抽象出来。
应用程序的 Dalvik 字节码位于 APK 内的classes.dex 文件中。它包括所有用户定义的类和函数,以及常量和变量定义。外部库(例如 Android 框架)不属于此文件的内容。
3.2 安卓app的静态分析
静态分析是一种软件技术,可检查应用程序以提取其特征,而无需在运行时执行代码并监控其行为(Li et al., 2017a)。通过静态分析,可以检查代码中存在的所有执行路径以及应用程序文件中的所有信息。这是通过使用具有代码解释机制的工具来完成的,这些工具提取描述应用程序内部功能的可理解的结构,例如调用图、数据流、有关代码结构的统计度量等。然后将这些信息转换为一组通用的解释性特征,稍后将由 ML 算法进行处理。
要对 APK 文件的内容进行静态分析,可以使用 AXMLprinter3 等工具来使清单文件中声明的字段和组件可访问。相反,可以使用 bakSmali4 等反编译器将classes.dex 文件转换为更高级别的格式。之后,可以获得不同的特征,包括有关指令、方法、类、字符串和 API 调用的使用的信息(Faruki et al., 2014)。还可以构建表示代码的不同图形结构。其中包括根据代码中存在的调用指令(调用)构建的调用图;控制流图,在创建时还考虑了由条件和循环语句(if、switch、for、while…)引起的代码跳转。在这两种类型的图中,节点代表只能顺序执行的方法或指令块,即基本块;边代表节点之间的执行流程(Li et al., 2017a)。
执行静态分析后,从 APK 获得的数据被映射到以结构化方式表示应用程序的特征向量,适合通过 ML 算法进行处理。图 1 描述了通过字符串、API 调用和权限来表示三个应用程序的二进制映射。它使用值 1 或 0 来表示应用程序代码中是否存在某个功能。其他映射也是可能的,例如,频率编码说明某个功能在应用程序代码中出现的次数。
4 基于监督分类器的Android恶意软件检测器
![1](https://i-blog.csdnimg.cn/direct/44cb27d830664d209b42f6d07bf83d99.png)