[论文翻译] LTAChecker:利用注意力时态网络基于 Dalvik 操作码序列的轻量级安卓恶意软件检测

LTAChecker: Lightweight Android Malware Detection Based on Dalvik Opcode Sequences using Attention Temporal Networks

摘要:

Android 应用程序已成为黑客攻击的主要目标。安卓恶意软件检测是一项关键技术,对保障网络安全和阻止异常情况至关重要。然而,传统的静态分析难以分析新的恶意应用程序,而动态分析则需要更多的系统资源。我们提出了一种基于注意力时态网络的新型轻量级安卓恶意软件深度学习检测框架。本研究深入研究了安卓恶意软件的 Dalvik 操作码序列,采用 N-gram 算法分割序列并提取上下文信息特征。然后,利用 LSTM 和 TCN 算法捕捉长期依赖关系和局部特征,从而全面理解 Dalvik 操作码序列中的时间信息。特别是,TCN 可促进跨时间尺度的特征提取,从而实现对 Dalvik 操作码序列中不同时间尺度的异常模式的检测。此外,我们还引入了多头关注机制和强化学习,以引导模型关注恶意软件序列中的行为线索。最后,大量实验结果表明,我们提出的方法和模型具有更高的检测准确性和鲁棒性,平均准确率达到 98.69%,超过了随机森林和伪标签深度神经网络等传统机器学习方法。

1.引言

随着移动应用程序的普及,安卓平台已成为数百万用户和应用程序开发人员的首选。与此同时,安卓恶意软件的威胁也在不断上升。根据《2023年上半年中国手机安全报告》[1],移动终端新截获恶意软件样本1700万个,较2022年上半年(1080万个)增长57.4%。这些恶意应用程序可能会造成用户隐私泄露和远程控制等严重威胁。目前,智能手机操作系统主要由安卓系统和iOS系统占据,其中安卓系统占据了75.3%的市场份额。因此,安卓恶意软件检测已成为确保移动应用安全的重要组成部分。

近年来,机器学习(ML)技术被广泛应用于恶意软件的检测,因为它们不依赖于特定的规则,自动化程度和鲁棒性更高。传统的安卓恶意软件检测方法一般可分为两种:1) 静态分析,包括简单的应用程序指纹识别,从反编译的 Android Manifest 文件中提取静态功能,如 API 请求、权限和意图[2]。然后利用机器学习来确定应用程序是否是恶意的[3][4]。另外,还可利用检测文件中已知的恶意代码特征来识别潜在威胁[5]。2) 动态分析,旨在通过捕获应用程序运行时特征来检测恶意行为,通常涉及动态污点分析,可以分析复杂的动态行为,而无需访问应用程序源代码,实时监控应用程序是否存在潜在的有害活动。运行时 API 调用特征 [6] 和流量模式 [7] 是动态检测解决方案的有效组成部分。在对现有的数据和基于机器学习(ML)的恶意软件检测解决方案进行深入研究后,我们认识到了各种挑战和问题:1) 传统的静态代码分析方法在获取软件源代码方面存在困难,在特征提取方面也缺乏粒度。2) 动态分析虽然能够捕捉到更多真实的行为意图信息,但需要耗费大量时间并产生大量冗余信息。上述任何一个方面的缺陷都可能导致解决方案不完善和存在盲点。

为了克服传统静态分析的局限性,避免动态分析对资源的高要求,本研究提出了一种名为 LTAChecker 的轻量级恶意软件检测框架。我们在应用程序的静态信息层考虑了 Dalvik 操作码序列。该模型能够绕过应用程序源代码,直接从 smali 文件中提取汇编代码,从而实现更精确的应用程序行为检测和特征提取。此外,基于 Dalvik 操作码序列的特征不仅依赖于静态信息,还强调了应用程序的实际运行时行为。这种方法可以揭示动态生成的恶意行为,或规避绕过传统静态分析的恶意软件,从而提供更好的适应性和灵活性。事实上,我们的研究表明,采用更复杂的特征并不一定能显著提高检测精度[8] [9]。

接下来,我们利用 N-gram 算法对获得的 Dalvik 操作码序列进行分区。在实验中,我们将参数 N 设为 5,因为这样可以取得平衡。如果 N 太小,可能无法充分捕捉时序关系。反之,如果 N 太大,数据维度将显著增加,导致冗余特征增多,并可能降低检测精度。此外,我们还采用遗传算法(GA)对分割后的特征数据进行特征选择,过滤掉判别能力较弱的特征。

作为 LTAChecker 检测框架的核心部分,我们提出了一种用于安卓恶意软件检测的新型轻量级时态注意(LTA)模型。与传统的卷积网络(如 CNN)相比,LSTM-TCN 模型在理解和提取嵌入在操作码序列中的时间特征方面具有更强的能力,使其能够捕捉长期依赖性和局部特征。因此,它可以全面解释 Dalvik 操作码序列中的时间信息。此外,TCN 还能跨时间尺度提取特征,从而在不同时间尺度上检测 Dalvik 操作码序列中的异常模式。为了进一步提高检测精度,我们将多头关注机制与强化学习相结合,使模型在训练过程中更加关注恶意软件序列中的行为线索。

所提出的 LTA 模型结合了长短期记忆(LSTM)和时序卷积网络(TCN),可全面学习指令操作码序列中的时序关系。这使得该模型既能捕捉长期依赖关系,又能捕捉局部特征。该模型的检测准确率达到 98.13%。此外,为了提高检测精度,还引入了强化学习的多头注意机制。该机制将模型的注意力引向操作码序列中与恶意行为相关的部分。加入注意力机制后,LTA 模型的检测精度提高到 98.69%。

如图 1 所示,整个流程已在实际场景中实施。

工作流程主要包括三个方面:

  1. 特征提取:提交应用程序后,使用 APKTool 对其进行反编译。反编译失败的应用程序将在 MobSF 平台上进行分析和反编译,以获得 smali 文件。随后,采用 N-gram 算法对 smali 文件进行分割,得到操作码序列数据集。

  2. 遗传算法特征选择:利用 SVM 算法在处理高维特征数据时的鲁棒性,选择 SVM 算法作为遗传算法的拟合函数。这有助于选择对恶意软件检测和分类有重大贡献的特征集。

  3. LTA 检测分类模型:首先,对特征优化后的数据进行预处理,如添加时间步长,使其结构适当,以便输入 LSTM-TCN 模型。然后,独立利用 LSTM 和 TCN 学习操作码序列数据中的时序特征。此外,还引入了多头关注机制,以提高模型的学习效率。

最终,该模型被用于安卓恶意软件的检测和分类。

在安卓软件的选择方面,我们在 CIC-InvesAndMal2019 数据集中选择了 1,400 个良性安卓应用软件[10],在 RmvDroid 数据集中选择了 1,266 个恶意安卓应用软件[11]。所有选中的安卓软件都已通过 VirusTotal 进行了标记和验证。我们从全部数据集中随机抽取 20% 作为测试数据。LTA 模型检测和分类结果的最终误报率仅为 1.31%。同时,我们从 MalRadar 数据集 [12] 和 Androzoo [13] 中选取数据,构建了一个包含 2,100 个软件的混合数据集,并通过实验验证了 LTA 模型的有效性。我们已在 https://five81.github.io/LTA-AD/ 上发布了 LTAChecker 的代码和数据集。

本文的贡献可归纳如下:

  1. 本文采用静态分析方法,考虑 Android 软件的底层操作代码序列,关注序列中包含的上下文和时序信息,提出 LTAChecker 检测框架。使用 N-gram 算法对操作码序列进行划分,并应用遗传算法进行特征优化。

  2. 本文提出了一种名为 LTA 的轻量级时间注意力网络,利用 LSTM-TCN 模型学习操作码序列中的时间信息和不同时间尺度上的特征,以捕捉长期依赖性和局部特征。3) 在 LTA 模型中引入了多头注意力机制,以加强模型学习,提高模型在整个训练过程中关注恶意软件操作码序列中蕴含的恶意行为线索的能力。

II.相关工作

当前研究面临的挑战在于如何准确描述应用程序的功能。从 APK 提取的传统恶意软件特征通常是离散的,如应用程序权限,而不是连续的。即使对恶意软件应用程序的特征表示稍作改动,也会破坏其特征描述的准确性 [14]。一种潜在的解决方案是从 Android Manifest 文件中提取特征进行研究 [15] [16]。然而,由于多种原因,这种方法在生成可执行对抗示例(AE)方面的可行性值得怀疑。首先,在 Android 清单中包含程序、意图等并不能保证包含恶意有效载荷的原始应用程序的可执行性[17]。其次,在清单文件中添加未使用的功能可以通过预处理技术消除[18]。最后,先进的安卓恶意软件检测器[19]采用了一种以 Dalvik 字节码代替清单文件为特征的方法,这种方法主要依赖于安卓应用程序的语义表示[20]。

静态分析。一些研究利用 APP 的静态特征从 APK 文件中提取不同的分析信息。Ou 等人研究了自动提取权限请求和敏感 API,构建相应的特征向量,然后建立深度信念网络(DBN)学习模型,有效解决了重新打包的恶意软件检测准确率低的问题[21]。Li 等人研究了提取函数调用图作为静态特征,然后使用卷积神经网络(CNN)检测 Android 恶意软件[22]。Yue等人提出了一种基于SDNE图注意网络的检测方法,该方法选取API调用图来表示软件的结构信息,发现软件可能存在的异常行为,在检测Android恶意软件方面取得了较高的检测精度[23]。

Shi 等人研究了提取 API 调用、服务和敏感权限作为特征,并提出了一种基于深林的恶意软件行为检测方法。该方法使用 Relief F 算法进行特征降维,根据软件行为将样本分为三类。然而,其检测精度仅为 91.2%,效果并不理想[24]。Zou 等人研究了应用函数调用图中敏感 API 与中心节点的接近度提取高效语义特征,构建了 IntDroid 系统来检测恶意软件,降低了传统图分析的高成本,并取得了较高的检测精度,检测率为 96.72%[25]。Zhang 等人提出了一种基于字节码特征的 TCN Android 恶意软件检测模型,该模型结合 DEX 文件和 XML 文件生成图像数据,有效解决了传统 CNN 单纯基于 DEX 文件的字节码图像识别方法,结果 F1 得分为 95.44% [26]。

动态分析。Arash 等人将 Android 应用程序的通信流量作为动态特征进行研究,使用真实智能手机作为捕获通信流量的平台,并使用机器学习算法检测 Android 恶意软件。然而,仅将流量作为特征进行检测会导致特征噪声过大。检测效果并不理想,平均检测准确率为 92%[28]。Gong 等人基于 APP Overlay 特征开展了市场级大规模恶意软件检测研究。他们选取了APP动态运行时的56个关键Overlay特征进行表征,并利用随机森林(RF)方法进行分类检测。这项新颖的工作在时间消耗和检测准确性方面都取得了值得称道的成果[34]。M 等人提出了基于网络的 MLDroid Android 恶意软件检测框架,该框架通过对应用程序进行动态分析获取权限和 API 调用,然后通过大量特征工程选择特征子集,最后集成 YMLP 和决策树等四种机器学习算法进行检测和分类,检测率最高达到 98.8%[29]。Gong 等人研究了市场层面的大规模安卓恶意软件检测,并提出了 APIChecker 检测框架,该框架通过动态提取的 API 调用对 APP 进行特征描述。他们采用新颖的词向量编码方法进行编码,最后使用射频分类器进行分类检测。其检测效果在大规模安卓软件检测中达到了 98.9% 的检测准确率和 98.1% 的 F1 分数[30]。

混合特征分析。一些研究从静态和动态两方面提取混合特征。例如,Ali 等人提取了意图、权限和服务、敏感 API 调用等静态特征和绑定调用、系统调用、网络通信流量等动态特征作为混合特征,采用半监督伪标签深度神经网络(PLDNN)模型对恶意软件进行检测和分类,5 次分类准确率达到 96.7%,实现了较高的分类准确率,有效降低了标记恶意软件的人力成本[31]。

机器学习检测方法。在安卓恶意软件检测领域,已经有多种用于安卓恶意软件检测的 ML 方法。传统方法包括使用机器学习算法,如 Naive Bayes、Random Forest 和 K-NN [29] [30] [35] [36] [37] [38]。深度学习方法可以深入挖掘特征之间的关系,一些研究将神经网络应用于恶意软件检测[39]。例如,Wang 等人研究了构建用于恶意软件分类的多模态深度神经网络(MDNN),该网络可预测未知文件和恶意软件类型的恶意程度,对 0-Day 恶意软件有较好的检测能力[32]。Isaac等研究了意图、权限和API调用关系共同生成图数据来表征软件,使用GNN图神经网络分类器进行分类,并使用基于GAN的生成式对抗网络来增强分类器,研究了对抗式防御图神经网络Android恶意软件检测方法,实验结果F1得分98.89%[40]。

与我们的工作比较。尽管目前的研究中有大量检测安卓恶意软件的方法(如表一所列),但我们的检测方法仍与目前的研究有所不同。首先,本文采用静态分析方法,避免了动态分析对资源消耗要求大、传统静态分析对特征选择不够精细的缺点。针对安卓恶意软件的Dalvik操作码序列底层,采用N-gram算法对序列进行分割,获取上下文信息特征,并利用GA对这些特征进行优化。其次,本文提出了一种新型 LTA 深度学习检测和分类模型。ISEDroid检测框架仅使用机器学习算法进行分类,并未充分挖掘指令序列中包含的恶意软件可能的行为信息[27]。最近的研究表明,基于从安卓应用程序中提取的 API 和 smali 代码构建敏感的 FCG。通过采用图剪枝技术和图学习方法进行分类,这些研究取得了显著的检测准确率,达到 98.37%[33],这凸显了利用 smali 文件中包含的信息进行恶意软件检测的有效性。不过,这种方法的计算复杂度较高,而且过度依赖 API 列表。本文介绍的 LTA 模型的显著特点在于它采用了一种混合方法,结合了 LSTM 和 TCN,以全面捕捉指令操作码序列中的时间关系。这使得该模型既能捕捉长期依赖特征,又能捕捉局部特征,从而使检测准确率达到 98.13%。此外,多头关注机制的加入增强了模型关注恶意软件行为相关片段的能力。引入这种关注机制后,LTA 模型的检测准确率提高到 98.69%。

III.测量和分析

A.Dalvik 操作码序列

Dalvik 指令是专门为安卓操作系统中的 Dalvik 虚拟机(DVM)设计的一组指令。它们用于执行 Android 应用程序的字节码。这些指令包括各种用于执行不同操作的指令。例如:1)move:该指令将一个值从一个寄存器复制到另一个寄存器。2) const:将常量加载到寄存器中。3)goto:该指令有助于无条件跳转。执行一个操作通常需要执行多条指令。与良性软件相比,恶意软件往往表现出特定的指令序列模式,并显示出不寻常的指令频率或类型。此外,为了逃避检测,恶意软件通常会加入无关代码来混淆源文件,从而使分析人员的审查过程复杂化。然而,指令序列前后文之间的关系和模式,以及长期序列内的关系和模式,为检测恶意软件提供了宝贵的启示[41] [42]。指令上下文之间的联系描述了它们的代码块或功能之间的交互,从而有助于检测与特定恶意软件功能相关的特征指令模式。序列关系对识别某些恶意行为或程序执行路径特别有用。此外,考虑到良性软件和恶意软件在大小上的差异可能会导致某些指令出现的频率不同,本文根据应用程序中存在的操作码指令序列进行了统计分析,以减轻不同软件大小对检测效果的影响。

B.特征分析

APKTool [43] 是一款方便可靠的逆向工程工具,在解析 smali 代码方面性能卓越。我们采用自动方法反编译成批的 APK 样本,提取 smali 汇编文件。对于 APKTool 无法反编译的样本,我们利用 MobSF [44] 框架提取 smali 文件。该框架利用其成熟的移动安全研究经验,有效地解决了这一瓶颈问题。汇编文件中的每个基本 Dalvik 指令操作都由一个操作码表示,每个操作码都表示与软件执行过程相对应的执行行为方法。鉴于恶意软件的执行行为往往涉及敏感操作,在底层实现层面实现这种行为通常需要多次指令执行。在本研究中,我们选择过滤掉无关的 Dalvik 指令,只保留七个核心指令集:M、R、G、I、T、P 和 V,以提取和构建操作码序列,如图 2 所示。

N-gram 是自然语言处理领域的一个概念,表示由字符、单词或符号等 N 个项目组成的连续序列。这里,N 表示连续操作码指令的数量。具体来说,我们对七个操作码进行了综合排列和组合。根据文件中的方法在 smali 文件中被标记为 0 或 1,生成 csv 格式的数据文件。图 3 展示了将 smali 格式的汇编文件划分为 5 个程序段的过程。

N-gram 算法中的参数 N 值对实验结果和特征维度的形成起着至关重要的作用。为了验证这一点,我们进行了严格的实验。本文特别侧重于研究操作码指令序列的时序特征。必须强调的是,太短的指令序列可能无法充分捕捉恶意软件的行为特征。在研究中,我们将 N=3 设置为基线,并利用逻辑回归分类器进行实验。随着 N 值的增加,N-gram 算法生成的数据特征维度呈指数增长,精度也随之提高。然而,当 N=5 时,分类精度达到 0.956,随后出现下降。考虑到维度增强和检测精度之间的平衡,我们选择 N=5 作为 N-gram 算法的参数。实验结果如图 4 所示。

C.特征选择

本文首先对数据集进行预处理,去除重复和空值,以解决数据冗余和数据清洁问题。数据集的特征向量中有相当多的维度值为 0,导致分类区分度较低。作为一种传统优化算法,遗传算法能有效处理高维特征空间和大规模数据集。通过与其他优化方法的实验结果比较,我们打算利用遗传算法[45]来压缩特征空间,过滤掉无用的特征,并筛选出具有更强判别能力的特征。

GA 是一种受生物进化启发的优化算法。它用于解决搜索和优化问题,旨在找到最佳解决方案或最佳解决方案的近似值。遗传算法根据自然选择和遗传重组的原理运行,模仿生物进化的过程。

在遗传算法中,有三种基本的遗传操作:选择、交叉和变异。选择是指根据个体的适应度值选择父个体,通常会优先选择适应度较高的个体。这一过程模拟了生物进化中对最合适个体的自然选择。选择过程的数学表达式如下:

其中,Pi 是个体 i 被选中的概率,fi 是个体 i 的适应度值,N 是种群中个体的数量。在选择遗传算法的适应度函数时,我们根据数据集的高维特性选择了 SVM 算法。SVM 算法通过最大区间超平面对数据进行分类,在处理高维数据时具有绝对优势。根据迭代次数或预定值确定 GA 的终止条件。通过实验发现,当迭代次数达到 10 次时,拟合函数 SVM 的精度达到最佳水平且不再变化,所选特征组合达到最优组。实验结果如图 5 所示。

此外,本文还比较了四种特征优化方法的效果:GA-SVM、GA-RF、XBoost [46] 和 ExtraTrees [47] 四种特征优化方法对实验结果的影响。具体来说,在选出首选特征后,将 40% 的数据输入逻辑回归分类器,以比较分类结果。结果表明,GA-SVM 特征选择的性能最佳,如表 II 所示。

IV.LTA 模型设计

A.LTA模型总体结构

我们为学习保留的特征设计了一个轻量级 LTA 模型,主要由三个部分组成:LSTM、TCN 和多头注意力。本文采用 LSTM 神经网络来学习安卓软件操作码序列的时序特征,以及这些序列中上下文之间的长期依赖关系。TCN 模型的特点是因果卷积和扩张卷积操作,因此与传统 CNN 相比,它拥有更大的感受野。此外,残差模块的引入进一步优化了它在过拟合和梯度消失等问题上的表现。TCN 模型用于捕捉安卓软件操作码序列中不同时间尺度的异常特征。此外,LTA 模型在 LSTM-TCN 架构中集成了多头关注层,使模型在学习过程中能够更加关注与恶意行为相关的操作码序列。如图 6 所示,这一改进提高了检测精度和模型泛化能力。

B.长短期记忆网络(LSTM)

作为一种传统的递归神经网络,递归神经网络(RNN)具有短时记忆能力。然而,由于 RNN 隐藏单元中只有一个函数,因此在处理长时间序列的数据时会出现梯度消失和梯度爆炸等问题。为了解决 Android 指令操作码序列中的长距离依赖性问题,并增强模型处理长时间序列数据的能力,我们采用了 LSTM 神经网络。LSTM 架构在存储单元单元内集成了遗忘门、输入门和输出门等机制。这些门共同调节信息的遗忘和保留,有效缓解了 RNN 中与梯度消失和梯度爆炸相关的问题。LSTM 神经网络中的单细胞结构如图 7 所示。

图中,ht-1 表示上一时间步的隐藏状态,xt 是当前时刻的输入,Ct-1 表示上一时间步的单元状态。ft 对应遗忘门,它根据 ht-1 和xt 决定要丢弃的信息 Ct-1。其计算公式如下

式中,σ 表示 sigmoid 激活函数,Wf 表示与遗忘门相关的权重,bf 表示遗忘门的偏置。

Ct-1 被丢弃和更新后,当前时间步长的单元状态 Ct 将通过下面的公式计算出来:

在公式中,ot 代表输出门,它根据 ht-1 和 xt 确定要从 Ct 输出的信息,以生成当前时间步的隐藏状态 ht。计算 ot 和 ht 的公式如下:

式中,Wo 和 bo 表示与输出门 ot 相关的权重和偏置。

在 LTA 模型中,LSTM 层接收来自输入层的输入,其中输入层的数据代表应用时间步预处理后的时间序列数据。此外,还引入了一个dropout层进行正则化处理,以防止模型过度拟合。LSTM 层输出 64 维时间序列输出。

C.时序卷积神经网络(TCN)

TCN 神经网络由三个关键部分组成:因果卷积、扩张卷积和残差模块。本文利用了 TCN 网络的独特特性,尤其是不同于传统 CNN 的扩张卷积。其目的是学习嵌入在安卓软件指令操作码序列中不同时间尺度的信息。TCN 网络通过控制感受野的大小来管理卷积核的学习范围,如图 8 所示。第一层的扩展因子 d = 1 表示对每个点进行采样,而中间层的扩展因子 2 表示间隔采样。一般来说,层数越多,扩展因子越大。

其数学表达式为

在公式中x = {x1, x2, ..., xt} 是输入值,表示卷积核的大小;∗ 是卷积算子;d 表示扩展因子。

此外,TCN 中的残差模块还能解决过拟合和梯度消失等问题。鉴于 TCN 的接受域依赖于网络深度、滤波器大小和扩展因子等因素,确保深度网络的稳定运行至关重要。因此,我们加入了残差模块。ReLU(整流线性单元)函数引入了非线性,而权重归一化和空间剔除有助于加速模型收敛并增强其泛化能力。这些组件如图 9 所示。

在 LTA 模型中,TCN 层也接收输入层的输入,并产生 64 维时序输出。在 TCN 层之后,还引入了用于正则化的 dropout 层,以防止模型过度拟合。

D.多头注意强化学习

Transformer 模型中的多头注意力机制是一种特殊的自我注意力机制。本文将多头注意力机制引入 LSTM-TCN 模型,使该模型在学习过程中更加关注安卓恶意软件的行为信息。其单头注意力值的数学公式如下:

在公式中,三个矩阵 Q、K 和 V 的维度均为 dk,分别代表查询、键和值。缩放因子 dk 与序列的输入维度相对应,用来调整 hi 的值,缓解反向传播过程中梯度消失的问题。多个单头注意力机制并行连接后,通过线性层映射得到多头注意力机制。计算公式如下

式中:⊕ 表示向量之间的连接操作;W0 表示权重矩阵;n 表示头的总数,本文中 n 的值为 2。

多头注意力层被纳入 LTA 模型,以加强强化学习。该注意力层采用 LSTM 层和 TCN 层的输出,捕捉序列中不同位置的相关性以及与安卓恶意软件相关的潜在行为信息。它输出 64 维的时序输出,旨在提高模型的检测精度和泛化能力。最后,在 LTA 模型中,LSTM 层和 TCN 层的输出以及注意力层的输出通过全连接层组合起来作为输出层的输入。然后,模型通过在训练过程中优化模型参数,使损失函数 zi 最小化。这种集成方法利用了 LSTM、TCN 和注意力机制的各自优势,提高了模型在检测安卓恶意软件方面的性能。

V.实验评估

A.数据集和实验环境

数据集。 我们的应用程序 Android 程序数据集包括 CIC-InvesAndMal2019 数据集和 RmvDroid 数据集中的共计 2,666 个软件。

CIC-InvesAndMal2019 数据集由 CIC 研究机构于 2019 年发布,包括从病毒总服务、传染病安全博客和 AMD 等多个平台获取的安卓 APK。该数据集共包含 5,065 个良性软件样本,我们从中随机抽取了 1,400 个样本用于本研究。

RmvDroid 数据集也于 2019 年发布,由 56 个恶意软件系列组成,共有 9 133 个恶意样本。这些样本主要来自 Google Play 上被删除的应用程序,时间跨度从 2014 年到 2018 年。为确保样本更具代表性和平衡性,我们将样本分为四种常见的恶意软件类型:广告软件、勒索软件、恐吓软件和短信恶意软件。平衡样本数量后,我们随机选择了 1,266 个恶意样本。

此外,我们还在各种数据集上进行了实验。MalRadar 数据集于 2022 年发布,包含 4,534 个安卓恶意软件样本。我们从该数据集中选取了 1000 个 APK 作为恶意实例,这些 APK 包含 10 个家族样本。为确保平衡,我们在数据集中添加了来自 Androzoo 的良性样本。具体来说,我们下载了 1,100 个良性 APK 样本,其 VTScan 时间戳来自 2023 年。通过反复实验,我们验证了本文提出的 LTAChecker 的有效性。

在实践中,我们将软件包名称相同但 MD5 哈希代码不同的 APK 视为不同的应用程序。本文所选软件已通过 VirusTotal 的审核和标记,然后为每个 APK 提供恶意标签,0 代表良性软件,1 代表恶意软件。

**实验室环境。**LTAChecker 框架主要由三个部分组成:反编译 APK 文件、预处理数据集特征选择以及使用 LTA 模型学习特征和分类。如图 1 所示,该工作流程的几个步骤相互独立,可以并行执行。这种并行化有助于提高框架分析的效率。此外,对于 LTA 模型的输入,我们首先应用 GA 算法进行降维,以提高计算效率。此外,我们还引入了epoch来监测验证集的损失,并设置阈值来提前终止模型训练,从而避免了计算资源的浪费。考虑到框架各部分之间的非相互依赖关系,一种可行的优化策略是采用分布式处理技术,在多个计算节点上同时进行处理。这种方法将加速计算过程,进一步提高 LTAChecker 框架的效率。

在反编译 APP 应用程序等前期工作中,我们使用 Windows 10 操作系统构建实验环境。实验机器配置了英特尔酷睿 i5-8300H 处理器、32GB 内存和英伟达 GTX 1050Ti GPU。我们开发了一个自动脚本,并使用 APKTool 工具依次反编译 APK 文件、提取 smali 文件、映射和提取操作码,并应用 N-gram 算法分割操作码序列。为了进行模型测试,我们使用了谷歌 Colab 提供的在线云服务器环境。硬件环境由 T4 GPU 和 16GB 内存组成。LTA 模型用 Python 3 语言实现,主要利用 Keras 和 TensorFlow 模块。

B.对比实验

在本节中,在对选定样本进行特征提取以生成实验数据集后,将对数据集进行预处理。在二维数据样本中添加时间步长,以构建适合输入 LTA 的时间序列数据。实验数据分为 80% 的训练数据和 20% 的测试数据。在训练过程中,引入 EarlyStopping 监测验证数据的损失。如果验证集上的损失连续 10 个历元都没有改善,则停止训练,并保存表现最好的模型的权重。

通过将 LTAChecker 与 TCN[26]、IntDroid[24]、PLDNN[31] 等其他同类研究进行比较,以及在同一数据集上与 KNN 和 RF 等传统机器学习算法进行比较,证明了 LTAChecker 在安卓恶意软件检测中的有效性。实验结果汇总于表 III。

表三的结果分析表明,与其他四个模型相比,本文提出的 LTA 模型的准确率最高,达到 98.69%,F1 得分也最高。此外,与 PLDNN 模型相比,LTA 模型的准确率略低,但其 F1 得分和召回得分均高于 PLDNN 模型。结果证明,Android 恶意软件操作码序列时序的研究方法和所提出的 LTAChecker 检测框架具有良好的有效性和优越性。

C. 消融实验

我们对 LSTM、LSTM-Attention、TCN、TCN-Attention 和 LSTM-TCN 进行了一系列消减实验,以研究模型中的组件、超参数的影响。其中,LSTM-TCN 模型代表了一种不包含用于强化学习的多头注意力层的模型。实验结果如表 IV 所示。

表 IV 中的结果分析表明,与独立的 TCN 和 LSTM 模型相比,在这两种模型中加入多头注意力机制可提高检测性能。值得注意的是,在 LSTM-TCN 基础上集成了多头注意力层的 LTA 模型实现了最高的检测精度和 F1 分数。这一改进可归功于多头注意层,它在学习过程中增强了模型对 Android 恶意软件操作码序列中行为信息的关注,从而提高了模型的准确性和泛化能力。

我们使用混淆矩阵将检测分类任务可视化。每个矩阵的横轴代表数据的真实标签,并显示测试数据中每个类别的实例数量,包括 280 个良性实例和 254 个恶意实例。纵轴代表每个类别的分类结果。图 10 显示了 LTA 模型和 LSTM-TCN 模型的混淆矩阵。

LTA 模型与 LSTM-TCN 模型的混淆矩阵对比显示,LTA 模型在 280 个良性软件实例中仅误判了 2 个。这一结果凸显了多头注意力强化学习的有效性,它显著降低了对良性安卓软件进行分类时的误判率,所有检测和分类的误判率都有整体下降,从而提高了模型分类的整体准确性。这些结果凸显了 LTA 模型在引入多头关注机制后的卓越分类性能。

D.可解释性和局限性

可解释性。LTA 模型通过学习大量数据特征来进行恶意软件检测,但学习到的特征可能是抽象和复杂的,因为这涉及到对模型内部表示和学习过程的理解。首先,恶意软件样本和正常样本之间的不平衡会导致模型解释学习过程出现偏差。为了解决这个问题,我们在数据集处理上做到了很好的平衡,减少了数据不平衡对模型可解释性的影响。其次,高维特征空间增加了 LTA 模型解释所学特征与恶意软件检测之间关系的复杂性。为解决这一问题,我们首先使用 GA 算法降低数据集的维度,以减少其对模型可解释性的影响。

在模型可解释性分析方面,我们利用 SHAP 黑盒[48]检测方法来衡量特征对分类结果的影响。SHAP 值是解释机器学习模型预测结果的常用方法。它基于博弈论中的 Shapey 概念,通过计算特征对预测结果的贡献来解释黑箱模型。通过这种方法,我们可以更清楚地了解模型的工作原理和特征之间的关系,从而增强模型的可解释性和可信度。根据实验结果,我们保留了对检测和分类影响较大的前 10 个特征,其形状汇总图如图 11 所示。

图中的 X 轴表示特征对分类结果影响的 SHAP 绝对值,Y 轴表示特征的重要性排名。我们对排名第一的特征序列 IIGVG 进行分析。根据其与 smali 代码的映射关系,可以看出其最有可能的行为是窃取用户的隐私敏感信息,执行逻辑数据判断,然后进行网络数据传输。这一操作是目前移动恶意软件中普遍存在的恶意行为之一。

局限性。在目前的工作中,我们利用了外部数据源。在未来的工作中,我们的目标是构建自己的数据存储库,以开展市场层面的研究。此外,鉴于恶意软件技术的不断发展,攻击者可能会借助反射调用来动态加载和执行软件代码,而不是直接将其体现在 smali 代码中。为了应对这一挑战,我们将探索动态分析研究的可能性。通过将动态分析与我们现有的工作相结合,我们旨在采用一种混合方法来全面描述安卓恶意软件的特征。从而增强我们对威胁状况的了解。

VI.结论

本文介绍了一种名为 LTAChecker 的新型安卓恶意软件检测框架,它基于注意力时态网络。通过分析安卓软件指令操作序列中的时序特征信息,核心 LTA 模型结合了 LSTM 和 TCN 架构,融入了用于强化学习的多头注意力机制。LSTM 组件可有效捕捉 Dalvik 操作码序列中的长期依赖关系,解决 RNN 中常见的梯度消失和爆炸等问题。此外,TCN 的残差学习模型还能捕捉不同时间尺度的时间特征,从而提高对异常模式的检测能力。为了进一步提高检测分类的有效性和鲁棒性,该模型引入了多头注意机制进行强化学习。在 CICInvesAndMal2019 和 RmvDroid 数据集以及其他数据集上进行的实验证实了所提出的 LTAChecker 框架在安卓恶意软件检测中的有效性和优越性,超过了其他深度学习方法。

相关推荐
ggs_and_ddu2 小时前
Android--java实现手机亮度控制
android·java·智能手机
zhangphil7 小时前
Android绘图Path基于LinearGradient线性动画渐变,Kotlin(2)
android·kotlin
watl08 小时前
【Android】unzip aar删除冲突classes再zip
android·linux·运维
键盘上的蚂蚁-8 小时前
PHP爬虫类的并发与多线程处理技巧
android
喜欢猪猪9 小时前
Java技术专家视角解读:SQL优化与批处理在大数据处理中的应用及原理
android·python·adb
JasonYin~10 小时前
HarmonyOS NEXT 实战之元服务:静态案例效果---手机查看电量
android·华为·harmonyos
zhangphil10 小时前
Android adb查看某个进程的总线程数
android·adb
抛空11 小时前
Android14 - SystemServer进程的启动与工作流程分析
android
Gerry_Liang13 小时前
记一次 Android 高内存排查
android·性能优化·内存泄露·mat
天天打码14 小时前
ThinkPHP项目如何关闭runtime下Log日志文件记录
android·java·javascript