1、基于深度学习的软件漏洞智能检测目录问题描述主要贡献系统设计有效性评价局限性与开放问题总结问题描述背景问题描述研究现状背景 尽管在朝着安全编程的方向不断努力,安全漏洞问题仍然广泛存在CVE中2010年登记了4,639个漏洞,2017年14,650个漏洞 目前有很多开源工具、商业产品及学术界研究,静态检测各种类型的漏洞专家人工生成漏洞规则针对某类漏洞,半自动生成漏洞模式不区分漏洞类型,半自动生成漏洞模式开源工具及商业产品,如Flawfinder,RATS,Checkmarx,Coverity,Fortify等,误报漏报较高针对某类具体的漏洞,如格式化字符串漏洞,污点漏洞,信息泄露漏洞,缺少检查漏洞
2、等采用机器学习技术,依赖专家定义features来刻画漏洞;由于粒度粗,无法定位漏洞具体位置问题描述VUDDYChucky依赖专家给出漏洞规则,或人工定义feature训练模型,或针对单一类型漏洞主观性强误报漏报较高是否可以自动地学习生成漏洞模式,并改进检测效果?给定目标程序源码,如何在不需人类专家定义feature的前提下,以较低的误报和漏报,自动检测目标程序是否含有漏洞?如果有的话,给出漏洞代码的位置。扩展性差现有工具或方法深度学习在程序分析领域的研究现状 深度学习为解决上述问题提供了一种可能 深度学习在程序分析领域的应用软件缺陷预测代码克隆检测API学习恶意URL,文件路径检测二进制函数
3、边界识别注册表键检测 深度学习应用于漏洞检测刚刚起步CCS 2017-POSTER:vulnerability discovery with function representation learning from unlabeled projectsarXiv 2018-Automated vulnerability detection in source code using deep representation learning arXiv 2018-Automated software vulnerability detection with machine learning存在的
4、问题:只能检测某个函数是否含有漏洞,粒度太粗主要贡献提出了第一个基于深度学习进行漏洞检测的系统化框架SySeVR,构建了基于深度学习的细粒度漏洞检测系统VulDeePecker,将人类专家从繁琐、主观的手工定义feature中解放出来,并显著降低误报漏报系统设计将深度学习用于漏洞检测的指导原则定义SYVC和SEVC系统化结构框架SYSEVR基于深度学习的漏洞检测系统VULDEEPECKER将深度学习用于漏洞检测的指导原则 如何表征程序?如何选择代码粒度?如何选择神经网络?指导原则1:程序需首先转化为保留程序语义(如数据流、控制流)的中间表示,然后转化为向量表征,作为神经网络的输入指导原则2:程
5、序需要以比文件、函数等更细粒度的单位表征代码,从而可以定位漏洞指导原则3:由于代码中是否含有漏洞依赖于上下文,因此能够处理上下文的神经网络更适用于漏洞检测定义SyVC和SeVC SyVC(Syntax-based Vulnerability Candidates)SeVC(Semantics-based Vulnerability Candidates)SyVC是一个代码元素,由代码中一个或多个token组成;该代码元素满足已知漏洞的某个基本语法特性,可能是漏洞,也可能不是漏洞SeVC是SyVC的扩展,由与SyVC语义相关(如控制依赖和数据依赖)的语句组成库/API函数调用数组使用指针使用算术
6、表达式基本语法特性:可通过人工分析现有的漏洞规则进行初步归类得到;仅是漏洞检测的出发点SyVC和SeVC举例源代码SyVC(红框标出)第25行SyVC“data”对应的SeVC系统化结构框架SySeVR实例:基于深度学习的漏洞检测系统VulDeePecker 以库/API函数调用作为SyVC基于深度学习的漏洞检测系统VulDeePecker Step I:生成SeVCASeVC correspondingtostrcpy()Programsourcecode(1)Extractlibrary/APIfunctioncalls(2)Generateslic