[论文翻译]使用 BERT 检测安卓恶意软件
Android Malware Detection Using BERT
Souani B, Khanfir A, Bartel A, et al. Android malware detection using bert[C]//International Conference on Applied Cryptography and Network Security. Cham: Springer International Publishing, 2022: 575-591.
摘要
在本文中,我们提出了两项实证研究,以(1)检测安卓恶意软件和(2)将安卓恶意软件分为多个家族。我们首先(1)重现了 MalBERT 的结果,使用 BERT 模型学习 AndroZoo 数据集中 265k 个应用程序(与 MalBERT 的 22k 个应用程序相比)的安卓应用程序清单来检测恶意软件。MalBERT 论文的结果非常出色,但很难让人相信,因为清单只能大致代表一个应用程序,因此我们试图在本文中回答以下问题。MalBERT 的实验是否具有可重复性?权限对于恶意软件检测有多重要?是否可以通过减小清单的大小来保持或改进结果?然后,我们(2)研究了 BERT 是否可用于将安卓恶意软件分为多个系列。结果表明,BERT 能够成功区分恶意软件和恶意软件,准确率高达 97%。此外,BERT 还能以 93% 的准确率对恶意软件家族进行分类。我们还证明,安卓权限并不是 BERT 成功进行分类的原因,甚至它实际上并不需要权限。
1 引言
安卓恶意软件是以攻击终端用户的设备、数据、资金、软件或第三方应用程序和服务为目的的恶意应用程序[5]。随着智能手机的普及,如今几乎每个人每天都随身携带着可以访问、存储和处理敏感数据和私人数据的设备。作为最常用的智能手机操作系统,安卓成为攻击者的首选目标,他们创建恶意应用程序,旨在从毫无戒心的用户那里获取经济收益。
事实上,新的恶意软件不断发布[19],给用户、应用程序市场维护者和安全研究人员带来了持续的威胁和挑战。
因此,人们花费了大量精力和资源来开发能够在源源不断的新应用程序中自动检测恶意软件的方法。这包括应用商店层面的检测方法,如 Google PlayStore [2],或设备层面的反病毒软件 [5]。从业人员和研究人员一直在与大量出现的恶意软件赛跑,因此,他们不仅要检测以前识别出的恶意软件,还要检测新的恶意软件。为此,他们提出了一些方法,根据应用程序中出现的相关可疑组件将应用程序分类为恶意软件或非恶意软件。这些方法分为两大类:静态分析技术和动态分析技术。基于静态分析的方法旨在通过解析和评估应用程序的语法来识别恶意软件,而基于动态分析的方法则通过检测和运行应用程序来提取有关应用程序的信息,以便通过程序的执行来捕获应用程序的任何最终恶意/可疑行为。此外,第三类方法--混合方法--包括将静态分析和动态分析结合起来,希望获得更多更好的信息,用于确定特定应用程序的恶意程度。
人们对机器学习技术的兴趣日益浓厚,机器学习技术也在不断发展,这使得整个安全领域[13],特别是恶意软件检测领域[27]取得了重大进展。显然,让机器捕捉恶意软件的恶意特征,从而节省昂贵的人工计算工作,是更有趣、更经济有效的方法[27]。在这方面,以往的研究主要集中在定义与恶意软件检测最相关的关键组件,以更好地指导方法的学习和检测能力。值得注意的是,API 调用的奇特或意外使用(如通过不安全的网络 url 传输数据)可能是最终恶意行为的决定性症状 [29,23,4]。利用这些关于历史恶意软件规范的额外知识,可以提高机器学习技术的能力,从而实现更高的性能。
最近,Rahali 等人[24] 基于 BERT [9](一种原本只用于自然文本处理的语言表示模型)训练了一个 MalBERT 模型,以便通过处理应用程序的 Manifest 文件来确定一个 Android 应用程序是否是恶意的。更确切地说,他们在恶意和良性安卓应用程序的 Manifest 文件上对预先训练好的 BERT 模型进行了微调,这些恶意和良性安卓应用程序包含在从公共资源收集的安卓数据集中。他们对所提方法的评估结果很有希望,预测准确率达到 97%。这种高性能的原因有(1) 首先,清单信息(包括应用程序的配置和描述性数据)在提示应用程序中是否存在恶意行为方面的相关性;(2) 其次,BERT 区分这些相关组件的恶意和安全变体的能力。
在同一研究方向上,我们在大规模数据集 AndroZoo [5] 上进行了实证研究:(1) 重现 Rahali 等人[24]的训练和评估实验,(2) 研究清单权限对恶意软件检测的影响,(3) 评估 xml 标记噪声对模型性能的影响,最后 (4) 讨论所提出的方法在按系列对恶意软件进行分类方面的能力。
我们的结果证实了作者在原始论文[24]中发表的结果,即 MalBERT 的预测准确率达到了 97%。令人惊讶的是,我们的结果表明,MalBERT 对清单的表示并不局限于清单的特定组件。事实上,即使只输入权限或排除权限,该模型也能正确区分恶意软件和良性应用程序,召回率接近 90%,准确率超过 93%。同样,通过只考虑 xml 值(不考虑标签)来减少输入 Manifests 的大小,也能使结果略有改善,准确率提高了 0.003%,召回率提高了 0.008%。最后,我们展示了 MalBERT 也可以用来预测恶意软件家族,准确率在 0.81 和 0.995 之间。
在本文中,我们做出了以下贡献:
- 使用大一个数量级的数据集(265k Android 应用程序对 22k)对 MalBERT 进行可重复性研究;
- 一项消融研究,我们研究了 Android Manifest 的不同元素对恶意软件检测率的影响;
- 对 BERT 将 Android 恶意软件分类为不同系列的实用性进行实证研究。结果表明,该方法对恶意软件的分类准确率为 93%。
本文的其余部分安排如下。在第 2 节中,我们将介绍理解本文所需的背景信息。在第 3 节中,我们将介绍我们的实验设置。接下来,我们将在第 4 节分析实证结果。第 5 节讨论结果,第 6 节介绍相关工作。最后,我们在第 7 节中得出结论。
2 背景
2.1 恶意软件检测
要利用机器学习检测恶意软件,从业人员传统上必须从应用程序中提取一系列特征,并将应用程序表示为一个向量。这些特征可通过两种主要方法提取:静态分析和动态分析。
静态分析 静态分析包括在不执行应用程序的情况下对其进行分析。它可以提取二进制签名、所用库列表或代码结构等特征。更高级的分析会生成代码信息,如调用图(即被调用者和调用者函数之间的关系)或控制流图,以了解数据在函数或整个程序中的流动情况。静态分析的强大之处在于,与动态分析不同,静态分析可以触及并分析整个代码。但这也要付出精度和运行时间的代价。许多静态分析的误报率很高,因为实际上无法执行的路径也可能被分析。静态分析通常不能很好地扩展,因此可能需要很长时间才能在实际应用中执行。在我们的实验中,我们从 Android 应用程序的清单中静态提取特征。
动态分析 在动态分析中,执行应用程序以了解其行为。在恶意软件分析中,通常在隔离的沙盒中执行,以防止恶意代码扩散到运行动态分析的机器或网络上的机器。主要挑战是找到应用程序的输入,以执行尽可能多的应用程序代码。提取的特征可以是 API 调用列表或 DNS 请求列表。
2.2 Android 软件包
Android 应用程序是以 .apk (Android PacKage)扩展名结尾的压缩文件。它是一个包含应用程序代码、资源、证书、资产和清单的容器。清单是一个 XML 文件,其中包含元数据,主要描述应用程序的结构、名称和版本。此外,它还包括应用程序所需的权限。因此,清单是 Android 应用程序的高级表示。我们从安卓应用程序的清单中提取特征作为实验输入。
2.3 Transformer
最近,研究人员试图自动提取人工定义的特征,或完全省略这一步骤。
Transformer [28] 是一种设计用于处理顺序数据的架构。它在 NLP(自然语言处理)领域表现出色,如翻译、问答、转述和文本摘要。与之前的技术水平相比,Transformers 很快成为多项令人印象深刻的改进的基础。Transformers 于 2017 年推出,已成为许多研究论文的主题。变换器由编码器和解码器组成。编码器接收输入序列,并将其转换为连续序列。然后,解码器利用每一步的前一个元素和编码器生成的序列,逐个元素生成序列。
2.4 BERT
BERT[9]是一种基于Transformer 的方法,已被用于翻译[34]、问题解答[32]、文本分类[26][14]或文本理解[30]等文本处理任务。BERT 凭借其令人印象深刻的性能,产生了巨大的影响,并成为许多其他模型的基础,如 Roberta [21],它是 BERT 模型的一个版本,精心选择了关键超参数以提高其性能;Deberta [11],它通过改变注意机制和掩码来改进 BERT 和 Roberta 模型;或 CodeBert [10],它在自然语言代码搜索和代码文档生成任务中都取得了优异的成绩。BERT 及其后代将训练分为两个阶段:预训练和微调。BERT 能够从句子中捕捉高级概念,其主要新颖之处在于它能从句子中双向(向前和向后)使用上下文,这可能是它在 NLP 任务中取得一流成绩的原因。预训练阶段包括使用维基百科语料库(2.5 亿个单词)[1]等非标记数据从头开始训练模型。预训练执行两个 "假 "任务,即除了迫使模型学习捕捉高级概念之外没有其他真正目的的任务:
- 屏蔽语言模型:为了锻炼模型考虑句子上下文的能力,输入句子中的随机单词会被屏蔽,BERT 会在此过程中尝试推断(即恢复)被屏蔽的单词。
- 下一句预测:它包括让 BERT 尝试推断输入的两个句子是否可能是一个有效的句子序列。这使得 BERT 可以学习句子之间的联系,这对问答等任务非常有用。
微调阶段是将已经训练过的、与任务无关的 BERT 模型与特定任务相适应。在实践中,神经元层被添加为输出层,以使用 BERT 的输出。在微调阶段,现有 BERT 模型的权重是固定的,而新添加的特定任务层的权重则要经过训练,以获得手头任务所需的性能。
分两个阶段(预训练和微调)是 BERT(以及类似方法)的一大优势:预训练虽然计算成本极高,但只需进行一次。然后,经过计算成本更低的微调后,得到的预训练模型就可以用于各种任务了
3 实验装置
本节将介绍我们在研究中使用的实验装置。图 1 展示了整个过程的总体情况。整个过程有三个主要步骤:(1) 第 3.1 节所述的数据集创建;(2) 第 3.2 节所述的预处理步骤;(3) 第 3.3 节所述的微调步骤。
3.1 数据集
在实验中,我们使用了来自 AndroZoo [5] 的安卓应用程序。AndroZoo 是一个提供给研究社区的安卓应用程序数据集,在撰写本文时,它包含了 1900 多万个安卓应用程序。AndroZoo 中的所有应用程序都使用 VirusTotal 3 通过多个杀毒软件进行了分析,以确定它们是否为恶意软件。
我们随机选取了 265 000 个 2019 年或之后发布的安卓应用程序,并从 AndroZoo 下载。由此得到的数据集中约有 30% 的恶意软件(77 768 个),主要包含三个系列的恶意软件4:
- 嘉谷Jiagu 是一个庞大的恶意软件家族。这个家族包括许多变种,它们表现出恶意行为,如不受欢迎的广告或木马点击,即未经用户同意点击广告。在我们的数据集中,约有 60% (47 522 个)的恶意软件属于 jiagu 系列。
- Dnotua 是数据集中第二大恶意软件家族,占恶意软件样本的 2%(1443 个)。属于 Dnotua 家族的应用程序可以执行各种恶意行为,如安装其他应用程序或收集网络信息。
- Secneo 是数据集中第三大恶意软件家族,占恶意软件样本的 1%(674 个)。Secneo 应用程序可以执行许多恶意任务,如发送短信、收集联系人或拨打电话。
除了这三个家族外,数据集中其余 31% (25 182 个)的恶意软件要么是 a) 仅包含少量样本的家族成员,要么是 b) 似乎不属于某个家族的恶意软件。
在实验中,我们从全球数据集中提取应用程序,构建训练集、验证集和评估集。每次实验都会对训练集、验证集和评估集进行不同的洗牌,以便在评估过程中尽可能报告最忠实的数值。对于恶意软件检测实验的基础真相,我们依赖于从 VirusTotal 获取的报告。在恶意软件家族分类方面,我们利用了 AVclass 工具 [25],该工具可以从 VirusTotal 获取检测报告,并计算出样本的家族名称,或者为无法链接到某个家族的 APK 计算出唯一标识符。
3.2 预训练模型
自 BERT 推出以来,许多研究团队都发布了自己的 BERT 方法实施方案,通常还附带预训练模型。在本研究中,我们使用的是 TensorFlow Hub 平台 5( https://tfhub.dev) 上发布的 BERT 模型。该模型建立在 Tensorflow [3] 库之上,已被广泛使用,与 BERT 原始论文 [9] 中的描述非常接近:它由 L=12 个隐藏层、H=768 的隐藏大小和 A=12 个注意头6 组成。它已在维基百科[1] 和 BooksCorpus(1.1 亿个参数)7 上进行了英语预训练。
3.3 微调
我们针对两种不同的任务进行了微调:恶意软件检测和恶意软件家族分类。
我们研究的第一个任务是恶意软件检测。在这种情况下,对模型进行微调的目的是区分良性应用和恶意应用。微调步骤是在由 132 500 个(即数据集的一半)APK 组成的训练集上进行的,这些 APK 来自 AndroZoo [5],其中有 30% 的恶意软件。
我们研究的第二项任务是恶意软件家族分类,它不同于恶意软件检测,但又密切相关。模型的目标是检测应用程序是否属于某个恶意软件家族,我们使用包含 77 768 个恶意软件的数据集(即我们数据集中的所有恶意软件样本)对模型进行了微调。训练集、验证集和测试集分别占 50%、20% 和 30%。训练集、验证集和测试集是分层的,这意味着每个集的恶意软件/好软件比例与整个数据集相同。
在参数方面,使用 Adam 作为优化函数,以 3e-5 的学习率对模型进行了 20 次微调,批量大小设置为 32。所有训练阶段和推理阶段都在一个配备 32 GB 内存的英伟达 Tesla V100 GPU 上进行。可以看出,一次完整的实验(即在训练集上进行 20 个历时的微调,并在测试集上对一种给定类型的输入进行推理)每次需要 10 到 16 个小时。此外,每个完整的实验都要使用不同的种子(即对训练集/验证集/测试集进行不同的洗牌)进行十次,以获得尽可能代表模型的平均性能。
4 经验性结果
在本节中,我们将对以下研究问题进行调查:
- 问题 1:MalBERT 的实验具有可重复性吗?
- 问题2:权限对恶意软件检测有多重要?
- 问题3:是否可以通过减小清单的大小来保持或改进结果?
- 问题4:BERT能否对恶意软件家族进行分类?
4.1 问题 1:MalBERT 的实验具有可重复性吗?
在阅读文献时,我们发现大量论文讨论了各种安卓恶意软件检测技术[33,15,16]。我们的目标是研究一种使用 BERT 的安卓恶意软件检测技术。MalBERT [24]使用 BERT 作为 APK 清单的嵌入技术,取得了非常好的效果,准确率高达 97%。BERT 在涉及文本(如清单)的任务中表现出色并不令人惊讶,清单虽然是 XML 数据,但主要包含文本数据。不过,这些结果可能很难让人相信。事实上,以如此少的信息量(清单最多只有几十千比特)获得如此高的性能,乍一看既令人惊讶,又大有可为。因此,我们的目标是首先检查清单是否真的足以代表一个应用程序,从而确定它是否是恶意软件。
与 MalBERT 一样,我们所依赖的 BERT 模型已经在维基百科 [1] 和 BooksCorpus 上针对英语进行了预训练。实验使用了之前提到的 265 000 个不同的数据集,其中有 30% 的恶意软件,并进行了 20 次微调。如上所述,数据集被分为三个分层集:训练集、验证集和测试集分别占数据集的 50%、20% 和 30%。
关于表 1 中的结果,我们的模型准确率为 0.970,略低于 MalBERT 的 0.976;F1 分数为 0.949,略低于 MalBERT 的 0.9547。这是因为他们的数据集仅包含 22.000 个清单,其中约 45% 为恶意软件,规模相当不同。因此,我们成功地复制了 MalBERT 的结果,看来使用清单识别恶意软件确实是可行的。
4.2 问题 2:权限对恶意软件检测有多重要?
如上所示,MalBERT 似乎只需使用清单就能区分恶意软件和良性 APK。根据这一观察结果,一个直接的问题是:Manifest 文件的哪些部分实现了这样的性能?
权限是我们研究清单辨别能力的第一个组成部分。多篇论文[18] [8] [6]展示了针对清单权限进行的恶意软件检测实验,因为这很可能是区分 APK 所属类别的因素。事实上,有些权限比其他权限更危险,因为它们赋予了应用程序更多的可能性,例如访问敏感信息或执行可改变安卓系统的操作。
为了回答这个研究问题,我们对清单进行了两种不同的预处理,以创建两种新的清单类型,一种是只有权限的清单(仅有权限),另一种是由没有权限的清单组成的清单(无权限)。使用这两种新的清单类型和相同的参数,像以前一样对两个不同的模型进行了微调。结果如表 2 所示
使用仅包含所请求权限的清单的微调模型显示,准确率为 0.93,F1 分数为 0.879。权限的确可以让 BERT 将恶意软件与良性 APK 区分开来,但权限似乎并不是 BERT 用来检测恶意软件的清单的唯一部分,这一点从训练结果低于使用完整清单的训练结果可以看出。由此可以推断,权限确实包含与恶意软件检测器非常相关的信息,但清单中的其他信息也包含可用于恶意软件检测的其他信息。
接下来,使用不带权限的清单进行微调的结果是:准确率为 0.967,F1 分数为 0.943。没有权限的清单结果比原始清单略低。这证明,要使 BERT 取得好结果,权限并非必要条件。我们可以假定,清单中的其他信息可以准确地区分恶意软件和良性应用程序。要确定清单的哪一部分允许 BERT 运行,还需要进行更精确的消融实验。
4.3 问题 3:是否可以通过缩小manifests尺寸来保持或改进结果?
要确定哪些因素有助于 BERT 利用清单检测恶意软件,可以采取的中间步骤是去除可能被怀疑会干扰学习过程的因素。为此,我们像以前一样对清单进行预处理,创建了两种新的清单变体。
对于第一种变体,我们创建了一个否定列表,其中包含被任意认为对学习无用的单词和字符。这个列表很短,包括在清单中多次重复出现的单词 "android:",或大量用于构建 XML 元素的 "小于 "和 "大于 "符号。我们只需从清单中删除这些单词和字母,从图 2 中可以观察到这一过程。我们将把这种清单变体称为(拒绝列表)。
对于第二种变体(称为 "值"),我们删除了 XML 标记名,只保留 XML 值,如图 3 所示。这样,BERT 就能专注于最重要的内容。实验结果见表 3,实验参数与之前相同。
对否定列表进行预处理的结果是,删除了被认为对学习过程无用的冗余词,从而获得了比之前的微调阶段稍好的结果,准确率为 0.972,F1 得分为 0.951。这表明,减少 "噪音 "似乎确实对 BERT 有帮助,但并没有删除对其分类所必需的任何内容。
最后,使用不含大部分标签但保留标签值的清单训练的模型结果最好,准确率为 0.973,F1 分数为 0.954。与拒绝列表一样,通过删除标签名称来减少文件中的噪音,可以使 BERT 更专注于有助于分类的内容。
4.4 问题 4:BERT 能否对恶意软件家族进行分类?
可以说,BERT 可以通过 APK 的清单非常准确地检测出该 APK 是否是恶意软件。但是,BERT 能确定被标记为恶意软件的应用程序属于哪个系列吗?为了回答这个问题,我们利用数据集中的恶意软件构建了一个完全由恶意软件组成的新数据集。实验使用与之前相同的参数,不同之处在于数据集由 77 768 个清单组成,如上所述。测试和微调只针对数据集中出现最多的三个恶意软件系列,因为其他系列在数据集中的出现率太低。这三个恶意软件家族是 Jiagu、Dnotua 和 Secneo,在数据集中的存在率分别为 60%、2% 和 1%。测试只针对每个语系的每个类别中的最佳模型。最佳模型的选择是在验证集测试中损失值最小的模型。对验证集的测试在每个epoch结束时进行。
在这些表格中,值得注意的是 F1 分数,它比准确度更准确地表达了结果,因为 Dnotua(表 5)和 Secneo(表 6)的数据集与 Jigu(表 4)不同,非常不平衡。
总的来说,根据 F1 分数,BERT 似乎能够对家系进行分类:嘉谷的 F1 分数平均为 0.854,Dnotua 的 F1 分数平均为 0.823。Secneo 的 F1 分数为 633,成绩较差,这当然是因为它在数据集中的存在感太弱,导致训练不平衡,降低了效率。这些结果很有意思,但不能被视为普遍性的结果,因为对于其他恶意软件系列来说,从表现形式进行检测可能更复杂,也可能更简单。
表 7 显示了三个系列表的平均值,从中可以看出,权限对于恶意软件系列的检测也不是必需的。这一点在表 4、表 5 和表 6 中也不难看出,在只使用权限的实验中,结果较低。
5 讨论
如 MalBERT [24] 所示,在清单上训练的模型在区分恶意软件/良性病毒方面取得了非常好的结果,准确率略高于 97%。之所以进行这项研究,是因为清单不足以忠实地代表应用程序,因为清单文件比应用程序要小得多。此外,这种方法相对轻便,易于设置,所有繁重的工作都已在 BERT 预培训中完成。
当我们成功复制 MalBERT 实验时,我们预计一旦剥夺了权限,清单就会给出糟糕的结果,我们认为权限是 BERT 用来区分恶意软件/好软件的依据。这一信息非常重要,因为只依赖权限(或主要依赖权限)的方法很可能不适合现实世界中的恶意软件检测。事实上,攻击者可以随心所欲地请求权限,而且他们会很快找到未被检测为恶意软件的权限组合。但事实证明,情况可能恰恰相反。
正如表 2 中的结果所示,MalBERT 似乎不仅使用权限,而且还在其推理中整合了清单中的其他元素。如果能进一步对清单进行消解研究,了解 BERT 在恶意软件清单或良好软件清单之间发现了什么关联,从而得出结果,那将会非常有趣。
还应该指出的是,BERT 可以根据清单很好地区分不同的语系,至少对 Dnotua 和 Jigu 语系是如此。Secneo 科没有显示出这么好的结果,但这可以用数据集来解释,因为这个科的数据集相当不平衡。这仍然是一种猜测,可能是 BERT 在检测 Secneo 系列方面的效果不如 Dnotua 或 Jiagu。对其他恶意软件家族也是如此,我们有兴趣对其进行进一步的实验。
6 相关工作
Liu 等人[20]介绍了基于机器学习的不同安卓恶意软件检测方法。该综述介绍了安卓系统架构、安全机制、安卓恶意软件分类,以及数据预处理、特征选择和算法等机器学习技术。
与我们的论文类似,MalBERT [24] 中也使用了变换器 [28]来检测恶意软件。具体来说,它使用基于 BERT [9] 模型的安卓应用程序静态分析来执行二分类和多分类。MalBERT: A novel pre-training method for malware detection [31]也被称为MalBERT,但它使用BERT来检测影响windows系统的恶意软件。其结果显示,在其数据集上的检测率为 99.9%,在不同的鲁棒性测试中的检测率超过 98%。
通过序列建模对高度不平衡数据进行恶意软件检测[22]也是对安卓恶意软件进行检测,但使用的是动态分析。此外,序列活动是通过启动应用程序并记录其行为生成的。由于现实世界中只有一小部分应用程序是恶意的,因此他们在训练集和测试集中采用了较低的恶意软件比率,从而重现了现实世界的场景。静态和动态分析都能带来高性能,如 DL-Droid [7]所示,深度学习系统的检测率高达 99.6%。
在最近的一篇论文[12]中,作者提出了一种使用清单权限检测恶意软件的方法,但与我们不同的是,他们没有使用深度学习。他们研究了四种不同的机器学习算法:随机森林(Random Forest)、支持向量机(Support Vector Machine)、高斯奈维贝叶斯(Gaussian Naive Bayes)和K-Means。在由 5243 个样本组成的测试集上,他们设法获得了 80% 以上的结果。其中最有效的是随机森林算法,精确度为 82.5%,准确率为 81.5%。
CatBERT [17] 是一种用于检测社会工程电子邮件的 BERT [9] 模型。他们对 BERT 模型进行了微调,用简单的transformer替换了一半的转换块,以学习自然语言的语法和语义表示。与 DistilBERT 或 LSTM 分别达到 83% 和 79% 的准确率相比,该模型检测社交工程电子邮件的准确率高达 87%。
7 结论
本文用于检测安卓恶意软件和将安卓恶意软件分为不同系列的技术非常简单。它只使用 BERT 模型和安卓系统清单即可工作。在我们的实验中,BERT 对恶意软件的检测效果很好,准确率为 97%,F1 分数为 94.9%。在家族分类方面也是如此,平均准确率为 93.3%,F1 分数为 79.3%。我们的实验表明,在恶意软件检测方面,仅使用权限的结果较低,准确率为 93%,F1 分数为 87.9%;此外,不使用权限也不会对模型的性能产生显著影响,因为它的准确率为 96.7%,F1 分数为 94.3%。最后,值得注意的一点是,通过删除冗余字符或对训练无用的单词来减少用于训练模型的清单中的噪音,也能让 BERT 获得稍好的结果。MalBERT 似乎取得了很好的结果,对清单进行进一步的消减研究将很有意义。这将有助于了解 BERT 在恶意软件或良好软件清单之间发现了哪些相关性,从而获得其结果。
复制包
实验使用的代码和数据集中的 APK 列表可在以下网址找到https://github.com/BadrSouani/BERT_Manifest.
相关文章:

[论文翻译]使用 BERT 检测安卓恶意软件
Android Malware Detection Using BERT Souani B, Khanfir A, Bartel A, et al. Android malware detection using bert[C]//International Conference on Applied Cryptography and Network Security. Cham: Springer International Publishing, 2022: 575-591. 摘要 在本文…...

LabVIEW滚动轴承故障诊断系统
滚动轴承是多种机械设备中的关键组件,其性能直接影响整个机械系统的稳定性和安全性。由于轴承在运行过程中可能会遇到多种复杂的工作条件和环境因素影响,这就需要一种高效、准确的故障诊断方法来确保机械系统的可靠运行。利用LabVIEW开发的故障诊断系统&…...

【论文分享】通过社交媒体图片和计算机视觉分析城市绿道的使用情况
城市街道为路面跑步提供了环境。本次给大家带来一篇SCI论文的全文翻译!该论文提出了一种非参数方法,使用机器学习模型来预测路面跑步强度。该论文提供了关于路面跑步的实证证据,并突出了规划者、景观设计师和城市管理者在设计适于跑步的城市街…...

MySQL 在 Windows 和 Ubuntu 上的安装与远程连接配置简介
MySQL 是一个广泛使用的开源关系型数据库管理系统,它提供了多用户、多线程的数据库服务。本文将介绍如何在 Windows 和 Ubuntu 操作系统上安装 MySQL,并配置远程连接。 Windows 上的 MySQL 安装 1. 下载 MySQL Installer 访问 MySQL 官方网站下载 Win…...

博达网站群管理平台 v6.0使用相关问题解决
1 介绍 最近受人所托,需要用博达网站群管理平台创建一个网站。该平台的内部版本为9.8.2。作为一个能直接从代码创建网站系统的人,初次使用本平台,刚开始感觉摸不着头脑。因为该平台存在的目的,就是让不懂代码的人能快速创建网站&…...

C++—>STL中vector使用篇
文章目录 🚩前言1、vector容器的概述2、vector构造函数的使用3、vector遍历方式4、vector中Capacity相关接口5、vector插入和删除的使用 🚩前言 前面描述了字符串string的相关知识,接下来描述第二个常用容器——vector,即顺序表。…...

pyinstaller打包vnpy项目
因为我写的软件主要是自己用,很少有打包的习惯,直接源代码部署,导致打包,以下记录一下给一个朋友做的,对vnpy的改写,实现实时读取信号文件,发现文件中信号改变就做出相应的交易动作,…...

kafka 消费组 分区分配策略
一、前提 kafka的版本是 2.6.2 一般我们消费kafka的时候是指定消费组,是不会指定消费组内部消费kafka各个分区的分配策略,但是我们也可以指定消费策略,通过源码发现,我们可以有三种分区策略: RangeAssignor (默认&am…...

AQS原理解析
1. 什么是AQS AQS的全称是AbstractQueuedSynchronizer,即抽象队列同步器,这个类在java.uitl.concurrent.locks包下面。 AQS就是一个抽象类,主要用来构建锁和同步器。 public abstract class AbstractQueuedSynchronizer extends AbstractOw…...

『 Linux 』利用UDP套接字实现简单群聊
文章目录 服务端通过传入命令处理实现远程命令执行使用Windows编辑UDP客户端实现Windows远程控制Linux接收套接字的其他信息UDP套接字简单群聊服务端UDP套接字简单群聊客户端运行测试及分离输入输出 参考代码 服务端通过传入命令处理实现远程命令执行 『 Linux 』利用UDP套接字…...

【数据结构与算法 | 图篇】最小生成树之Kruskal(克鲁斯卡尔)算法
1. 前言 克鲁斯卡尔算法(Kruskals algorithm)是一种用于寻找加权图的最小生成树(Minimum Spanning Tree, MST)的经典算法。这种算法是由约瑟夫克鲁斯卡尔(Joseph Kruskal)提出的,并且适用于所有…...

了解常用的代码检查工具
在软件开发领域,代码检查工具是确保代码质量、提高开发效率、促进团队协作的重要工具。这些工具通过自动化分析代码,帮助开发者发现潜在的错误、漏洞、代码异味等问题,并提供修复建议或重构方案。以下是一些常用的代码检查工具,它…...

BUUCTF PWN wp--warmup_csaw_2016
第一步 先checksec一下(没有启用NX保护、PIE、完整的RELRO和栈保护,还有具有RWX权限的内存段。) 分析一下这个文件的保护机制: Arch: amd64-64-little 这表示该可执行文件是为64位的AMD64架构编译的,并且使用的是小…...

dockerfile搭建部署LNMP
目录 实验 架构: 实验步骤: nginx部分 mysql部分 php部分 实验 实验:用dockerfile搭建LNMP论坛 架构: 一台docker虚拟机 docker部署nginx 1.22 指定ip地址172.111.0.10 docker部署mysql 8.0.30 指定ip地址…...

Rust : 数据分析利器polars用法
Polars虽牛刀小试,就显博大精深,在数据分析上,未来有重要一席。 下面主要列举一些常见用法。 一、toml 需要说明的是,在Rust中,不少的功能都需要对应features引入设置,这些需要特别注意,否则编译…...

Qt第一课
作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉…...

论“graphics.h”库,easyx
前言 别人十步我则百,别人百步我则千 你是否有这样的想法,把图片到入进c里,亦或者能实时根据你发出的信息而做出回应的程序,graphics.h这个库完美满足了你的需求,那今天作者就给大家介绍一下这个库,并做一些…...

如何在寂静中用电脑找回失踪的手机?远程控制了解一下
经过一番努力,我终于成功地将孩子哄睡了。夜深人静,好不容易有了一点自己的时间,就想刷手机放松放松,顺便看看有没有重要信息。但刚才专心哄孩子去了,一时就忘记哄孩子之前,顺手把手机放哪里去了。 但找过手…...

Android 实现动态换行显示的 TextView 列表
在开发 Android 应用程序时,我们经常需要在标题栏中显示多个 TextView,而这些 TextView 的内容长度可能不一致。如果一行内容过长,我们希望它们能自动换行;如果一行占不满屏幕宽度,则保持在一行内。本文将带我们一步步…...

Golang | Leetcode Golang题解之第352题将数据流变为多个不相交区间
题目: 题解: type SummaryRanges struct {*redblacktree.Tree }func Constructor() SummaryRanges {return SummaryRanges{redblacktree.NewWithIntComparator()} }func (ranges *SummaryRanges) AddNum(val int) {// 找到 l0 最大的且满足 l0 < val…...

Ubuntu安装mysql 以及远程连接mysql Windows—适合初学者的讲解(详细)
目录 准备工作 一.Xshell中操作 (1)在虚拟机中安装mysql (2)连接Windows数据库 (3)进入linux数据库。 (4)修改mysql配置文件 二.Windows命令窗口操作 需要软件虚拟机,Xsh…...

【数学建模】MATLAB快速入门
文章目录 1. MATLAB界面与基本操作1.1 MATLAB的基本操作 2. MATLAB字符串和文本2.1 string变量2.2 char变量 3. MATLAB的矩阵运算 1. MATLAB界面与基本操作 初始界面: 刚开始的界面只要一个命令行窗口,为了使编辑界面出现我们需要新建一个文件ÿ…...

【ubuntu24.04】k8s 部署5:配置calico 镜像拉取
kubeadm - 中国大陆版建议:初始化Kubeadm –apiserver-advertise-address 这个地址是本地用于和其他节点通信的IP地址 –pod-network-cidr pod network 地址空间 sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers --apiserver-advertise-add…...

Elasticsearch 的数据备份与恢复
在生产环境中,数据的安全性和可靠性至关重要。对于基于 Elasticsearch 的系统而言,数据备份与恢复是确保数据完整性、应对灾难恢复的关键操作。本文将详细介绍 Elasticsearch 中如何进行数据备份与恢复,帮助管理员构建一个可靠的数据保护策略…...

Ps:首选项 - 暂存盘
Ps菜单:编辑/首选项 Edit/Preferences 快捷键:Ctrl K Photoshop 首选项中的“暂存盘” Scratch Disks选项卡通过合理配置和管理暂存盘,可以显著提高 Photoshop 的运行性能,特别是在处理复杂的设计项目或大型图像文件时。选择合适…...

力扣217题详解:存在重复元素的多种解法与复杂度分析
在本篇文章中,我们将详细解读力扣第217题“存在重复元素”。通过学习本篇文章,读者将掌握如何使用多种方法来解决这一问题,并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释,以便于理解。 问题描述 力扣第217…...

享元模式:轻量级对象共享,高效利用内存
享元模式(Flyweight Pattern)是一种结构型设计模式,用于减少对象数量、降低内存消耗和提高系统性能。它通过共享相似对象的内部状态,减少重复创建的对象。下面将具体介绍享元模式的各个方面: 组成 抽象享元࿰…...

人工智能-自然语言处理(NLP)
人工智能-自然语言处理(NLP) 1. NLP的基础理论1.1 语言模型(Language Models)1.1.1 N-gram模型1.1.2 词嵌入(Word Embeddings)1.1.2.1 词袋模型(Bag of Words, BoW)1.1.2.2 TF-IDF&a…...

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(三)---创建自定义激光雷达Componet组件
前言 本系列教程旨在使用UE5配置一个具备激光雷达深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博…...

C++ 设计模式——策略模式
策略模式 策略模式主要组成部分例一:逐步重构并引入策略模式第一步:初始实现第二步:提取共性并实现策略接口第三步:实现具体策略类第四步:实现上下文类策略模式 UML 图策略模式的 UML 图解析 例二:逐步重构…...