VulDeePecker:基于深度学习的脆弱性检测系统
最近的两款软件,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:基于深度学习的脆弱性检测系统的更多相关文章
- 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表
前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...
- 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【三】VGG网络进行特征提取
前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...
- 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【二】人脸预处理
前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...
- 基于深度学习的人脸识别系统系列(Caffe+OpenCV+Dlib)——【四】使用CUBLAS加速计算人脸向量的余弦距离
前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...
- #Deep Learning回顾#之基于深度学习的目标检测(阅读小结)
原文链接:https://www.52ml.net/20287.html 这篇博文主要讲了深度学习在目标检测中的发展. 博文首先介绍了传统的目标检测算法过程: 传统的目标检测一般使用滑动窗口的框架,主 ...
- 基于深度学习的中文语音识别系统框架(pluse)
目录 声学模型 GRU-CTC DFCNN DFSMN 语言模型 n-gram CBHG 数据集 本文搭建一个完整的中文语音识别系统,包括声学模型和语言模型,能够将输入的音频信号识别为汉字. 声学模型 ...
- 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN,Faster R-CNN
基于深度学习的目标检测技术演进:R-CNN.Fast R-CNN,Faster R-CNN object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.obj ...
- 基于深度学习的病毒检测技术无需沙箱环境,直接将样本文件转换为二维图片,进而应用改造后的卷积神经网络 Inception V4 进行训练和检测
话题 3: 基于深度学习的二进制恶意样本检测 分享主题:全球正在经历一场由科技驱动的数字化转型,传统技术已经不能适应病毒数量飞速增长的发展态势.而基于沙箱的检测方案无法满足 APT 攻击的检测需求,也 ...
- 一个基于深度学习回环检测模块的简单双目 SLAM 系统
转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12634631.html 写在前面 最近在搞本科毕设,关于基于深度学 ...
随机推荐
- pandas用法小结
前言 个人感觉网上对pandas的总结感觉不够详尽细致,在这里我对pandas做个相对细致的小结吧,在数据分析与人工智能方面会有所涉及到的东西在这里都说说吧,也是对自己学习的一种小结! pandas用 ...
- js基础进阶--编码实用技巧(二)
我的个人博客:http://www.xiaolongwu.cn 接上篇文章 js编码的实用技巧(一) 5.合理利用||运算符 使用||可以作为参数之外的默认值,当第一个参数返回值为false时,那么第 ...
- PAT1059:Prime Factors
1059. Prime Factors (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HE, Qinming Given ...
- 初识Java NIO
原文链接:http://tutorials.jenkov.com/java-nio/index.html Java NIO是java 1.4之后新出的一套IO接口,这里的新是相对于原有标准的Java ...
- Mysql:查询每个月下的数据,根据状态或者年份的sql语句
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本次的MySQL开篇记录了一道面试题,我给其扩展一下 这面试题它难点在什么地方,不外乎是操作月份和将其展示的 ...
- Linux时间子系统之七:定时器的应用--msleep(),hrtimer_nanosleep()
我们已经在前面几章介绍了低分辨率定时器和高精度定时器的实现原理,内核为了方便其它子系统,在时间子系统中提供了一些用于延时或调度的API,例如msleep,hrtimer_nanosleep等等,这些A ...
- Linux kernel的中断子系统之(二):IRQ Domain介绍
返回目录:<ARM-Linux中断系统>. 总结:一.二概述了软硬件不同角度的IRQ Number和HW Interrupt ID,这就需要他们之间架个桥梁. 三介绍了架设这种桥梁的几种方 ...
- bootgrid
编写bootgrid前提条件 有关bootgrid的.css和.js库文件 参数:ajax: 必须设置为true post: 传递给Java的参数 url: 与java连接的方法名 ...
- 更多细节的理解RSA算法
一.概述 RSA算法是1977年由Ron Rivest.Adi Shamir 和 Leonard Adleman三人组在论文A Method for Obtaining Digital Signatu ...
- linux安装tomcat Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
这两天我们的开发机重启了好几次,发现每次重启后我的tomcat总是没有启动.检查java路径,配置正确,后来拿普通账号启动tomcat时报如下的错: Neither the JAVA_HOME nor ...