最近的两款软件,VUDDY和VulPecker,假阴性率高而假阳性率低,用于检测由代码克隆引发的漏洞。而如果用于非代码克隆引起的漏洞则会出现高误报率。

本文使用深度学习处理程序中的代码片段,不应由专家来手动定义特征,在不产生高假阴性率,假阳性率适当,能够判断是否有漏洞,并定位漏洞位置

VulDeePecker的效果:能够同时检测不止一种漏洞,可以结合人类知识进一步提高有效性(不是定义特征)。

这一项目采用了由国家标准和技术研究所 (NIST) 和软件保证参考数据集 (SARD) 放出的数据集。

本文提出了三个指导原则

1.程序可以先转为一种中间表示,可以保留 (某些) 程序元素之间的语义关系 (例如,数据依赖和控制依赖关系)。然后再转化为向量表示输入神经。

2.程序片段粒度应当比函数小

3.由于一行代码是否包含漏洞可能取决于上下文,因此可以处理上下文的神经网络可能会更适合。

RNN有效被用于过程序分析(非漏洞检测),且会受消失梯度 (VG) 问题,同理BRNN

长期短期记忆 (LSTM) 细胞和门控轮回单元 (GRU) 细胞,由于 GRU 在语言建模上不超过 LSTM ,

本文选择了LSTM,但没有比较二者。由于LSTM是单向的,使用了双向LSTM(BLSTM)

关于代码片段:

直观地说,关键点的启发式概念在某种意义上可以看作是漏洞的 “中心” 或暗示漏洞存在的代码片段。对于库/API 函数使用不当造成的漏洞,调用的关键点是库/API 函数调用; 对于由于数组使用不当而导致的漏洞,关键点是数组。重要的是要注意,一种类型的漏洞可能有多种关键点。例如,缓冲区错误漏洞可能对应以下关键点: 库/API 函数调用、数组和指针。此外,在多种类型的漏洞中可能存在相同的关键点。例如,两个缓冲区错误资源管理错误漏洞可能包含库/API 函数调用的关键点。精确地定义关键点的启发式概念超出了本文的研究范围,成为未来研究的一个有趣问题; 我们专注于使用这个启发式概念作为 “镜头”,使用深度学习来学习漏洞模式。

代码片段可通过数据流或控制流分析程序生成,有一些算法和商业产品(如Checkmarx)。这些代码片段不一定是连续的代码行,而是语义上有关联的代码组成的。对每个代码片段标记是否脆弱,

网络的检测:给定程序,进行切片,获得代码片段,网路输出哪些片段是脆弱的,它们的下标会指引漏洞位置。

前向切片和后向切片:程序切成小片段的方法,对于一个库API函数,每个参数生成一个函数切片,然后将这些函数切片组合成代码片段,

等长输入处理:向量小于定长时,如果代码片段是从后向切片生成的,或者通过组合多个后向切片生成的,我们在向量的开头填充零; 否则,我们将零填充到向量的末尾。

向量大于定长时,如果代码片段是从后向切片生成的,或通过组合多个向后切片生成,我们删除向量的开始部分; 否则,我们删除向量的结束部分。

TP 是正确检测到漏洞的样本数,FP 是检测到错误漏洞的样本数,FN 是未检测到真正漏洞的样本数, TN 是没有漏洞未检测到的样本数。假阳性率=FP/(FP+TN),假阴性率FNR=FN/(TP+FN),真阳性率(召回率)TPR = TP/(TP+FN),

目前只处理C/C++程序,将来可能处理其他的。设计上只处理API相关漏洞

总的来讲,本工具使用了BLSTM,基于NIST和SARD所放出来的数据集,分类了有漏洞的代码片段和安全的代码片段,并依此来定位漏洞点,从而发现有漏洞的位置

VulDeePecker:基于深度学习的脆弱性检测系统的更多相关文章

  1. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  2. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【三】VGG网络进行特征提取

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  3. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【二】人脸预处理

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  4. 基于深度学习的人脸识别系统系列(Caffe+OpenCV+Dlib)——【四】使用CUBLAS加速计算人脸向量的余弦距离

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  5. #Deep Learning回顾#之基于深度学习的目标检测(阅读小结)

    原文链接:https://www.52ml.net/20287.html 这篇博文主要讲了深度学习在目标检测中的发展. 博文首先介绍了传统的目标检测算法过程: 传统的目标检测一般使用滑动窗口的框架,主 ...

  6. 基于深度学习的中文语音识别系统框架(pluse)

    目录 声学模型 GRU-CTC DFCNN DFSMN 语言模型 n-gram CBHG 数据集 本文搭建一个完整的中文语音识别系统,包括声学模型和语言模型,能够将输入的音频信号识别为汉字. 声学模型 ...

  7. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN,Faster R-CNN

    基于深度学习的目标检测技术演进:R-CNN.Fast R-CNN,Faster R-CNN object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.obj ...

  8. 基于深度学习的病毒检测技术无需沙箱环境,直接将样本文件转换为二维图片,进而应用改造后的卷积神经网络 Inception V4 进行训练和检测

    话题 3: 基于深度学习的二进制恶意样本检测 分享主题:全球正在经历一场由科技驱动的数字化转型,传统技术已经不能适应病毒数量飞速增长的发展态势.而基于沙箱的检测方案无法满足 APT 攻击的检测需求,也 ...

  9. 一个基于深度学习回环检测模块的简单双目 SLAM 系统

    转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12634631.html 写在前面 最近在搞本科毕设,关于基于深度学 ...

随机推荐

  1. Python:怎样用线程将任务并行化?

    如果待处理任务满足: 可拆分,即任务可以被拆分为多个子任务,或任务是多个相同的任务的集合: 任务不是CPU密集型的,如任务涉及到较多IO操作(如文件读取和网络数据处理) 则使用多线程将任务并行运行,能 ...

  2. Python_CRC32

    #计算文件的CRC32值 import sys import zlib import os.path filename=sys.argv[1] print(filename) if os.path.i ...

  3. Generator的正确打开方式

    前两年大量的在写Generator+co,用它来写一些类似同步的代码但实际上,Generator并不是被造出来干这个使的,不然也就不会有后来的async.await了Generator是一个可以被暂停 ...

  4. JaveScript基础(1)之变量和数据类型

    1.JaveScript变量的定义方式: A:隐式定义:直接给变量赋值: temp='hello'; alert(temp); PS:使用变量前要先进行初始化工作,否则会报变量未被定义的错误; B:显 ...

  5. Mysql主从方案的实现

    Mysql主从方案介绍 mysql主从方案主要作用: 读写分离,使数据库能支撑更大的并发.在报表中尤其重要.由于部分报表sql语句非常的慢,导致锁表,影响前台服务.如果前台使用master,报表使用s ...

  6. 使用Iterator迭代器循环集合

    1.Iterator迭代器用于遍历集合元素,获取迭代器可以使用. 2.Iterator提供了统一遍历集合元素的 方式 ,其提供了用于遍历集合的连个方法----- boolean  hasNext()判 ...

  7. PAT1093: Count PAT's

    1093. Count PAT's (25) 时间限制 120 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CAO, Peng The strin ...

  8. 解决VMware虚拟机报错“无法连接MKS:套接字连接尝试次数太多,正在放弃”

    1.错误描述 在VMware中打开虚拟机时报错: "无法连接MKS:套接字连接尝试次数太多,正在放弃" 物理机操作系统: Windows 7 虚拟机操作系统: Kali Linux ...

  9. 12. thymeleaf中资源相对路径的解决

    把博客部署到tomcat上后才发现因之前资源和链接的地址都是使用的相对路径,这样一来在tomcat上就各种找不到资源.从网上看了几种解决方式都挺麻烦的,且不是适配的,所以我根据thymeleaf的规则 ...

  10. Python爬虫-pyspider框架的使用

      pyspider 是一个用python实现的功能强大的网络爬虫系统,能在浏览器界面上进行脚本的编写,功能的调度和爬取结果的实时查看,后端使用常用的数据库进行爬取结果的存储,还能定时设置任务与任务优 ...