VulDeePecker: 基于深度学习的漏洞检测系统

VulDeePecker:基于深度学习的漏洞检测系统

                              (华中科技大学、河北大学网络安全与计算机学院深圳华中科技大学科学研究院§德克萨斯大学圣安东尼奥分校计算机科学系)

问题:需要一些指导原则来将深度学习应用于漏洞检测。特别是需要找到适合深度学习的软件程序的表示形式。(解决:使用代码小工具来表示程序,然后将它们转换为向量,其中代码小工具是在语义上相互关联的若干行代码(不一定是连续的));为了评估VulDeePecker,提出了第一个用于深度学习方法的漏洞数据集。评估原则有:1,VulDeePecker能够同时处理多种类型的漏洞吗?2,人类的专业知识能帮助提高VulDeePecker的效率吗?3,与其他漏洞检测方法相比,VulDeePecker的有效性如何?

现有的检测漏洞的解决方案有两个主要的缺点:   强加大量的手工劳动和产生高的假阴性率

文章核心:针对以下漏洞检测问题提出了一种解决方案:给定目标程序的源代码,如何确定目标程序是否存在漏洞,如果存在漏洞,漏洞在哪里?

A. How to represent software programs?

       提出一种中间表示,称为代码小工具:将程序表示为对漏洞检测具有语义意义的向量,中间表示作为矢量表示,作为神经网络的输入。

Defining code gadget

为了生成代码小工具,提出了启发式的关键点概念,它可以被视为一个“镜头”,通过它,可以从某个角度表示程序。直观地说,关键点的启发式概念在某种意义上可以看作是漏洞的“中心”或暗示漏洞存在的代码片段。

文章重点讨论如何利用库/API函数调用的特定关键点来证明其在基于深度学习的漏洞检测中的有效性。(对应于库/API函数调用的关键点,可以通过程序的数据流或控制流分析的方式生成代码小工具)

B. What is an appropriate granularity?(什么是适当的粒度)

      不仅需要检测一个程序是否存在漏洞,而且需要确定漏洞的位置,因此基于深度学习的漏洞检测应该使用更细的粒度。 代码小工具表示导致了漏洞检测的细粒度粒度,因为代码小工具通常只包含少量的代码行。

C. How to select neural networks?

       神经网络在图像处理、语音识别、自然语言处理等不同于漏洞检测的领域已经非常成功。

       因为一行代码是否包含漏洞可能取决于上下文,能够处理上下文的神经网络可能适合于漏洞检测。这一原则表明,用于自然语言处理的神经网络可能适合于漏洞检测,因为上下文在自然语言处理中也很重要。

        用于自然语言处理的循环神经网络,神经网络存在着消失梯度问题。使用双向的LSTM用于漏洞检测(BLSTM)。

BLSTM neural network    1.  a dense layer     2.  a softmax layer

BLSTM层有两个方向:向前和向后

BLSTM中包含一些复杂的LSTM cells,文章中被视为黑盒。稠密层减少了从BLSTM层接收的向量的维数。softmax层将从密集层接收到的低维向量作为输入,负责对分类结果进行表示和格式化,为学习阶段的神经网络参数更新提供反馈。学习阶段的输出是一个具有微调模型参数的BLSTM神经网络,检测阶段的输出是分类结果。

Overview of VulDeePecker

       VulDeePecker有两个阶段:学习(即训练)阶段和检测阶段。

       (一)学习阶段的输入是大量的培训项目,其中一些是脆弱的,而另一些则不是,这里所说的“脆弱”是指一个程序包含一个或多个已知的漏洞。学习阶段的输出是漏洞模式,这些模式被编码到BLSTM神经网络中。学习阶段分为4个步骤。

        步骤一:提取库/API函数调用和相应的程序片。这有两个分步骤:

        •从培训程序中提取库/API函数调用。

        •为提取的库/API函数调用的每个参数(或变量)提取一个或多个程序切片。一个程序块代表一个程序的语句(即行代码)语义相关论点的库/ API函数调用。

(库/API函数调用分为两类:向前库/API函数调用和向后库/API函数调用。Forward库/API函数调用是直接从外部输入(如命令行、程序、套接字或文件)接收一个或多个输入的函数调用。反向库/API函数调用是指不从程序运行的环境中直接接收任何外部输入的函数调用。两种切片:前向切片和后向切片,其中前向切片对应于受相关参数影响的语句,后向切片对应于可影响相关参数的语句)

        步骤二:生成训练程序的代码小工具和它们的ground truth标签。

        •步骤一中获得的程序片段组装成代码小工具,每个库/API函数调用一个代码小工具。 

        •标记代码小工具的基本事实。此步骤将每个代码小工具标记为“1”(即脆弱)或“0”(即不脆弱)。代码小工具的ground truth标签是可用的,因为知道一个培训程序是否易受攻击,如果它易受攻击,也知道漏洞的位置。

       步骤三:将代码小工具转换为向量表示。

      •将代码小工具转换为特定的符号表示,这一步的目的是保存训练程序的一些语义信息。

      •将得到的符号表示中的代码小部件编码成向量,作为训练BLSTM神经网络的输入。

      (将标记转换为向量,使用word2vec工具因为它在文本挖掘中被广泛使用。这个工具基于分布式表示的思想,它将一个令牌映射到一个整数,然后转换为固定长度的向量。由于代码小工具可能有不同数量的标记,相应的向量可能有不同的长度。而BLSTM取等长向量作为输入,so需要做一个调整。引入一个参数τ作为对应于代码小部件的向量的固定长度)

      步骤四:训练BLSTM神经网络。将编码小工具编码成向量并获得它们的ground truth标签后,学习BLSTM神经网络的训练过程。

    (二)检测阶段:给定一个或多个目标程序,提取库/API函数调用以及相应的程序片,将其组装成代码小工具。代码小工具被转换成它们的符号表示,这些符号表示被编码成向量,用作训练好的BLSTM神经网络的输入。网络输出哪些向量,因此哪些代码小工具是脆弱的(“1”)或不脆弱的(“0”)。如果代码小工具容易受到攻击,它就会锁定目标程序中漏洞的位置。

       步骤五:将目标程序转化为代码工具和矢量。

       •1:从目标程序中提取库/API函数调用(类似于步骤I.1)。

       •2:根据库/API函数调用的参数提取程序片(类似于步骤I.2)。

       •3:将程序切片组装成代码小工具(类似于步骤II.1)。

       •4:将代码小工具转换为它们的符号表示(类似于步骤III.1)。

       •5:将代码小工具的符号表示编码成向量

       步骤六:检测。这一步使用学习过的BLSTM神经网络对从目标程序中提取的代码小工具对应的向量进行分类。当一个向量被分类为“1”(即脆弱)时,这意味着对应的代码小工具是脆弱的,并且确定了脆弱的位置。否则,相应的代码小工具被分类为“0”(即不脆弱)。

注原文:VulDeePecker: A Deep Learning-Based System for Vulnerability Detection

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容