恶意软件令你困扰?卷积神经网络为你保驾护航
点击上方关注,All in AI中国
作者:Sugandha Lahoti
在这篇文章中,我们将了解人工网络架构以及如何使用其中之一(卷积神经网络)来帮助恶意软件分析师和信息安全专业人员检测和分类恶意代码。
恶意软件是每个现代组织/公司的噩梦。黑客和网络犯罪分子总是想出新的恶意软件来攻击目标。安全厂商也竭尽全力防范恶意软件的攻击,但遗憾的是,由于每月都有数百万个恶意软件被发现,他们无法做到这一点。因此,我们需要诸如深度学习这样的新方法来打破困局。
在深入研究DL方法的技术细节和实际实施步骤之前,有必要学习和发现人工神经网络的其他不同架构。现在讨论主要的人工神经网络。
本文摘录来自Packt Publishing出版的《掌握机器学习渗透测试》一书。这本书教你如何使用Python机器学习成为渗透测试的大师。(https://www.packtpub.com/networking-and-servers/mastering-machine-learning-penetration-testing?utm_source=DZone&utm_medium=referral&utm_campaign=outreach)
卷积神经网络(CNN)
卷积神经网络(CNN)是解决图像分类问题或我们称之为计算机视觉问题的深度学习方法,因为经典计算机程序由于光照、视点、变形和分割等原因在识别对象时面临许多挑战和困难。
这种技术的灵感来自于眼睛的工作方式,特别是动物的视觉皮层功能算法。CNN以具有宽度,高度和深度的三维结构布置为特征。在图像的情况下,高度是图像高度,宽度是图像宽度,深度是RGB通道。
要构建CNN,我们需要三种主要类型的层:
卷积层:卷积操作是指从输入图像中提取特征,并将滤波器中的值与原始像素值相乘
池化层:池化操作减少了每个要素图的维度
全连接层:全连接层是一个经典的多层感知器,在输出层具有softmax激活功能
要使用Python实现CNN,你可以使用以下Python脚本:
递归神经网络(RNN)
递归神经网络(RNN)是人工神经网络,我们可以其利用序列信息。换句话说,RNN对序列的每个元素执行相同的任务,输出取决于先前的计算。RNN广泛用于语言建模和文本生成(机器翻译,语音识别和许多其他应用程序)。
长短期记忆网络
长短期记忆网络(LSTM)通过构建存储块来解决递归神经网络中的短暂存储问题。该块有时被称为存储单元。
Hopfield网络
Hopfield网络由John Hopfield于1982年开发的。Hopfield网络的主要目标是自动关联和优化。我们有两类Hopfield网络:离散的和连续的。
玻尔兹曼机网络
玻尔兹曼机网络使用循环结构,它们仅使用本地可用信息。它们是由杰弗里·辛顿(Geoffrey Hinton)和特里·谢诺斯基(Terry Sejnowski)于1985年开发的。此外,玻尔兹曼机的目标是优化解决方案。
使用CNN进行恶意软件检测
对于这个新模型,我们将发现如何使用CNN构建恶意软件分类器。但是我打赌你想知道我们如何才能在CNN将图像作为输入的情况下做到这一点。答案很简单,这里的诀窍是将恶意软件转换为图像。这可能吗?是的。恶意软件可视化是过去几年中众多研究课题之一。所提出的解决方案之一来自一项名为"恶意软件图像:可视化和自动分类"的研究,该研究由加利福尼亚大学圣巴巴拉分校视觉研究实验室的Lakshmanan Nataraj完成。
下图详细说明了如何将恶意软件转换为图像:
以下是Alueron.gen!J恶意软件的图片:
此技术还使我们能够以详细的方式可视化恶意软件部分:
通过解决如何通过图像提供使用CNN的恶意软件机器学习分类器的问题,信息安全专业人员可以使用CNN的功能来训练模型。 Malimg数据集是最常用于提供CNN的恶意软件数据集之一。此恶意软件数据库包含来自25个不同恶意软件系列的9,339个恶意软件样本。你可以从Kaggle下载它。(https://www.kaggle.com/afagarap/malimg-dataset)
这些是恶意软件系列:
Allaple.L
Allaple.A
Yuner.A
Lolyda.AA 1
Lolyda.AA 2
Lolyda.AA 3
C2Lop.P
C2Lop.gen!G
Instant access
Swizzor.gen!I
Swizzor.gen!E
VB.AT
Fakerean
Alueron.gen!J
Malex.gen!J
Lolyda.AT
Adialer.C
Wintrim.BX
Dialplatform.B
Dontovo.A
Obfuscator.AD
Agent.FYI
Autorun.K
Rbot!gen
Skintrim.N
将恶意软件转换为灰度图像后,你可以获得以下恶意软件表示,以便稍后使用它们来提供机器学习模型:
可以使用以下Python脚本将每个恶意软件转换为灰度图像:
对于特征选择,你可以使用不同的技术(例如欧几里德距离或平均值和标准偏差)提取或使用任何图像特征,例如纹理图案,图像中的频率,强度或颜色特征,以生成后期的特征向量。在我们的例子中,我们可以使用一些算法,诸如颜色布局描述符,同构纹理描述符或全局图像描述符(GIST)。我们假设我们选择了GIST; 其中pyleargist是一个很棒的Python库,可以用来计算它。使用PIP来安装它:
#pip install pyleargist = .0.1
作为用例,要计算GIST,你可以使用以下Python脚本:
这里,320指的是我们使用灰度图像时的前320个值。不要忘记将它们保存为NumPy数组,以便稍后使用它们来训练模型。
获得特征向量后,我们可以训练许多不同的模型,包括支持向量机,k-means和人工神经网络。有用的算法之一是CNN的算法。
完成特征选择和工程设计后,我们可以构建CNN。例如,对于我们的模型,我们将构建一个具有两个卷积层的卷积网络,具有32 * 32个输入。要使用Python库构建模型,我们可以使用以前安装的TensorFlow和utils库来实现它。
因此,整体CNN架构如下图所示:
这个CNN架构并不是构建模型的唯一提议,但目前我们将用它来实现。
为了建立模型和CNN,我强烈推荐Keras。所需的导入如下:
如前所述,灰度图像的像素值范围为0到255,因此我们需要为网络提供32 * 32 * 1维图像:
我们将使用以下参数训练我们的网络:
要构建体系结构,请考虑其格式,请使用以下命令:
要编译模型,请使用以下命令:
Malware_Model.compile(.losses.categorical_crossentropy,.optimizers.Adam(),metrics = ['accuracy'])
拟合并训练模型:
Malware_Model.fit(train_X,train_label ,, ,,, validation_data =(valid_X,valid_label))
正如你所注意到的,我们尊重前面章节中讨论过的神经网络训练流程。要评估模型,请使用以下代码:
将深度学习应用于恶意软件检测的承诺与挑战
机器学习从业者和恶意软件分析师提出了许多不同的深层网络架构来检测已知和未知的恶意软件; 一些提议的架构包括受限制的玻尔兹曼机和混合方法。
检测恶意软件和恶意软件的新方法显示出许多有希望的结果。但是,在使用深度学习网络检测恶意软件时,恶意软件分析师面临许多挑战,特别是在分析PE文件时,因为分析PE文件,我们将把每个字节作为输入单元,因此我们除了处理数百万个分类序列步骤之外,还需要保持在复杂的空间相关性的函数调用和跳转命令。
你刚刚阅读了由Chiheb Chebbi编写并由Packt Publishing出版的《掌握机器学习渗透测试》一书的摘录。(https://www.packtpub.com/networking-and-servers/mastering-machine-learning-penetration-testing?utm_source=DZone&utm_medium=referral&utm_campaign=outreach)
我们发现了如何使用不同的机器学习算法来构建恶意软件检测器,尤其是使用像深度学习这样强大的技术。