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 写在前面 最近在搞本科毕设,关于基于深度学 ...
随机推荐
- flash builder 4.6与myecilpse 10.7集成
一.在flash builder 4.0以后就没有单独提供插件版的flash builder了,因此必须先安装完整版的flash builder,再进行插件集成. 二.集成过程比较简单但也有几个要注意 ...
- 代码质量管理平台SonarQube的安装、配置与使用
SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误,下面将会介绍一下这个工具的安装.配置以及使用. 准备工作: 1.jdk(不再介绍) 2.sonarqube:ht ...
- ArcCore重构-头文件引用问题的初步解决
基于官方arc-stable-9c57d86f66be,AUTOSAR版本3.1.5 基本问题 1. 头文件引用混乱,所有头文件通过从搜索路径(-I)中引用,存在名称污染问题,需加入路径信息: ...
- 重温《STL源码剖析》笔记 第三章
源码之前,了无秘密. --侯杰 第三章:迭代器概念与traits编程技法 迭代器是一种smart pointer auto_Ptr 是一个用来包装原生指针(native pointer)的对象,声明狼 ...
- Django rest framework源码分析(3)----节流
目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...
- 使用pypi-server搭建简单的PyPI源
pypiserver 是一个最基本的PyPI服务器实现, 可以用来上传和维护python包. 本文介绍 pypiserver 在ubuntu上的基本安装, 配置和使用. 1. 基本安装和使用 1.1 ...
- Python基本类常用方法
数学函数 abs(x) 返回数字的绝对值,如abs(-10) 返回 10 ceil(x) 返回数字的上入整数,如math.ceil(4.1) 返回 5 cmp(x, y)如果 x < y 返回 ...
- C++的反思[转]
最近两年 C++又有很多人出来追捧,并且追捧者充满了各种优越感,似乎不写 C++你就一辈子是低端程序员了,面对这种现象,要不要出来适时的黑一下 C++呢?呵呵呵. 咱们要有点娱乐精神,关于 C++的笑 ...
- 深夜学算法之SkipList:让链表飞
1. 前言 上次写Python操作LevelDB时提到过,有机会要实现下SkipList.摘录下wiki介绍: 跳跃列表是一种随机化数据结构,基于并联的链表,其效率可比拟二叉查找树. 我们知道对于有序 ...
- Springboot2.0(Spring5.0)中个性化配置项目上的细节差异
在一般的项目中,如果Spring Boot提供的Sping MVC不符合要求,则可以通过一个配置类(@Configuration)加上@EnableWebMvc注解来实现完全自己控制的MVC配置.但此 ...