专家教你利用深度学习检测恶意代码

 专家教你利用深度学习检测恶意代码

当前,恶意软件的检测已经成为全社会关注的网络安全焦点,因为许多时候,单个恶意软件就足以导致数百万美元的损失。目前的反病毒和恶意软件检测产品,一般采用的是基于特征的方法,它们借助人工设定的规则集来判断某软件是否属于某种已知的恶意软件类型集合。通常来说,这些规则是具有针对性的,即使新出现的恶意代码使用了跟原来的恶意代码相同的功能,检测软件通常也检测不出来。

所以,这种方法是无法令人满意的,因为大部分情况下二进制文件都是非常独特的,或者说是以前从未见过的,并且,这个世界上每天都有数百万个新的恶意软件样本被发现。所以,我们需要开发一种能够适应日新月异的恶意软件生态系统的检测技术,而机器学习看起来非常有希望满足我们这一需求。事实上,一些初创公司和老牌安全公司早就开始着手构建基于机器学习的防御系统了。为了获得高质量的防御系统,这些公司通常都需要在特征工程和分析方面花费大量财力和精力。然而,如果我们是否能够在无需借助特征工程的情况下构建反病毒系统呢?果真如此的话,我们就能将同一系统部署到不同的操作系统和硬件上检测恶意软件。在我们最近发表的研究论文中,我们的研究成果向这个目标迈出了坚实的一步。

本文引入了一种人工神经网络,经过适当的训练之后,只需要输入Windows的可执行文件的原始字节序列,它就能区分该文件是良性的,还是恶意的。这种方法的优点如下所示:

• 不需要手工构建特征或编译器方面的知识。这意味着训练好的模型对于恶意软件的变种具有普适性和鲁棒性。
• 计算的复杂度与序列长度(二进制文件大小)呈线性关系,这意味着推断是快速的,所以能够用于大型的文件。
• 能够从二进制文件中找出对于取证分析来说非常重要的代码段。

这种方法也适用于新出现的文件格式、编译器和指令集架构:只需提供相应的训练数据即可。

我们也希望通过本文向大型机器学习社区表明,从原始字节序列中检测恶意软件不仅具有得天独厚的优势,同时也面临许多前所未有的挑战,所以,这是将是一片肥沃的研究领域。

深度学习在恶意软件检测中所面临的挑战

最近,神经网络在计算机视觉、语音识别和自然语言处理方面取得了一系列的成功,当然,成功的原因是多方面的,其中的一个因素就是神经网络具有从诸如像素或单个文本字符之类的原始数据中学习特征的能力。受到这些成功的启发后,我们开始利用可执行文件的原始字节作为数据来神经网络训练,看看它们能否正确判断给定的文件是否为恶意软件。如果这一方法可行的话,必将极大地简化恶意软件检测工具,提高检测的准确性,并能够找出对于检测恶意软件却非常重要却不很显眼的那些特征。

然而,与其他任务相比,深度学习在恶意软件识别领域还面临着一些挑战和不同之处。对于Microsoft Windows Portable Executable(PE)恶意软件,这些挑战包括:

• 将每个字节作为输入序列中的一个单元来处理的话,就意味着我们需要处理时间步长为200万个左右的序列分类问题。据我们所知,这远远超过了之前所有基于神经网络的序列分类器的输入的长度。

• 恶意软件中的字节包含的信息具有多态性。上下文中的任何特定字节既可以表示为人类可读的文本,也可以表示为二进制代码或任意对象(如图像等)。此外,其中的某些内容可能是经过加密处理的,这样的话,它们对神经网络来说基本上就是随机的。

• 在函数级别上面,二进制的内容可以任意重新排列,但由于函数调用和跳转指令的存在,所以这些函数之间必定存在复杂的空间关系。

在本文所探讨的范围内,我们对序列分类做出了一定的贡献。音频是与序列长度关系最为紧密的一个领域。诸如WaveNet之类的复杂神经网络,虽然它们使用音频的原始字节作为其输入和目标输出,但是,它的序列分析所面临的时间步也只不过是数以万计而已,与我们的恶意软件检测问题相比要小两个数量级。

对于常用于自然语言处理和音频处理领域的神经网络来说,当我们使用包含数百万的时间步的序列数据作为训练网络参数的输入时,必将面临重大的实际挑战。其中的原因是,各网络层中的激活函数必将占用大量的内存空间。例如,假设我们有一个步长为200万的序列,如果该序列的原始字节用32位浮点类型的300维可训练嵌入层来表示的话,那么仅仅输入数据就需要大约2.4GB的内存。如果它被传递到具有滤波器大小为3和滤波器数量为128的保持长度不变的(length-preserving)一维卷积层的话,则单独这一层的激活函数就又需要1GB的内存。请记住,这里是将单个序列输入到单层的情形,而通常情况下,神经网络训练过程中每次输入的是一个minibatch。

用户喜欢...

利用IC负载开关的特性来安全地降低功耗

为了最大限度地降低功耗,一个简单的MOSFET通常用于为未使用的电路提供电源。然而,更好的选择是使用负载开关,因为它具有额外的功能来处理电源轨管理的许多微妙和变幻莫测的事情。 负...


你的深度学习应用可能存在安全风险!

导语:深度学习框架和应用中存在许多漏洞,其中15个漏洞拥有CVE编号。漏洞的类型有堆溢出、数字溢出、Use-After-Free漏洞等。 360安全实验室(肖奇学 、Deyue Zhang)、佐治亚大学(李康)和弗...


【科普】CNN(卷积神经网络)、RNN(递归神经网络)、DNN(深度神经网络)内部网络结构的区别

先说DNN,从结构上来说他和传统意义上的NN(神经网络)没什么区别,但是神经网络发展时遇到了一些瓶颈问题。 一开始的神经元不能表示异或运算,科学家通过增加网络层数,增加隐藏层可...


深度学习中消失的梯度

了解深度学习的同学可能知道,目前深度学习面临的一个问题就是在网络训练的过程中存在梯度消失问题(vanishing gradient problem),或者更广义地来讲就是不稳定梯度问题。那么到底什么是梯...


AI医疗2.0时代已到,用深度学习助推人工智能落地

最近市场又被人工智能医疗刷屏了。刷屏的原因就是人工智能继战胜了国际各位围棋棋手之后,又有了一个新的突破,这个突破就是在医疗领域。今年11月,国家医学考试中心发布了“2017年国...


从图像到知识:深度神经网络实现图像理解的原理解析

摘要:本文将详细解析深度神经网络识别图形图像的基本原理。针对卷积神经网络,本文将详细探讨网络中每一层在图像识别中的原理和作用,例如卷积层(convolutional layer),采样层(pooling la...


为什么大家都不戳破深度学习的本质?!

人类正在慢慢接近世界的本质——物质只是承载信息模式的载体。人脑之外的器官都只是保障这一使命的给养舰队。 自从 AlphaGo 完虐李世乭,深度学习火了。但似乎没人说得清它的原理,只...


浅谈深度学习的技术原理及其在计算机视觉的应用

目前,深度学习几乎成了计算机视觉领域的标配,也是当下人工智能领域最热门的研究方向。计算机视觉的应用场景和深度学习背后的技术原理是什么呢?下面让我们来一探究竟。 计算机视...


深度学习框架的评估与比较

人工智能无疑是计算机世界的前沿领域,而深度学习无疑又是人工智能的研究热点,那么现在都有哪些开源的深度学习工具,他们各自的优缺点又是什么呢?zer0n和bamos在GitHub上发表了一篇文...


黑箱难题仍在阻碍深度学习的普及

当前,深度学习扛起了人工智能的大旗,让我们得以一窥智能机器在将来的能耐。但深度学习有个不小的问题:没人知道它是如何运作的。 我们并不是对深度学习一无所知。作为当今神经网...


AI实践者需要掌握的10大深度学习方法

过去10年,人们对机器学习的兴趣激增。几乎每天,你都可以在各种各样的计算机科学课程、行业会议、华尔街日报等等看到有关机器学习的讨论。在所有关于机器学习的讨论中,许多人把机...


深度长文:关于AI,你最该了解可也许从没想过的四个问题

在过去的几年里,我们一直在讨论人工智能(AI)将如何拯救或摧毁世界:自驾车有利于保护我们的生命; 社交媒体泡沫将破坏民主;机器烤面包机会让人类连烤面包的能力都丧失。 你可能很...


如何用70行Java代码实现深度神经网络算法

对于现在流行的深度学习,保持学习精神是必要的——程序员尤其是架构师永远都要对核心技术和关键算法保持关注和敏感,必要时要动手写一写掌握下来,先不用关心什么时候用到——用不...


神经进化:一种不一样的深度学习

作者:Kenneth O. Stanley 转自: oreilly.com 神经进化正在复兴。主要的人工智能实验室和研究人员正在试验它,一丝新的成功点燃了更多的热情,能对于深度学习产生影响的新机遇正在出现。也许...


深度学习颠覆了对话人工智能

作者:Yishay Carmiel 转自: oreilly.com 语音识别的梦想是一个能在不同的环境下、能应对多种口音和语言的、真正理解人类语言的系统。几十年来,对这个问题的尝试都没有成功。寻找一个能有...


一文读懂深度学习与机器学习的差异

如果你经常想让自己弄清楚机器学习和深度学习的区别,阅读该文章,我将用通俗易懂的语言为你介绍他们之间的差别。 机器学习和深度学习变得越来越火。突然之间,不管是了解的还是不...