《2018年基于深度学习的软件漏洞智能检测.pdf》由会员分享,可在线阅读,更多相关《2018年基于深度学习的软件漏洞智能检测.pdf(31页珍藏版)》请在三个皮匠报告上搜索。
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)Generateslicesforargumentsoflibr
7、ary/APIfunctioncalls(3)AssembleslicesintoSeVCs基于深度学习的漏洞检测系统VulDeePecker Step II:为SeVC生成ground truth标签每个SeVC标记为“1”(有漏洞)或“0”(无漏洞)基于深度学习的漏洞检测系统VulDeePecker Step III:将SeVC转换为向量u 将SeVC转换为符号表征7 tokensu 将符号表征编码为向量基于深度学习的漏洞检测系统VulDeePecker Step IV:采用标准的BLSTM模型训练基于深度学习的漏洞检测系统VulDeePecker Step V-VII:检测阶段有效性评价
8、数据集研究问题真实软件中的检测效果数据集 数据来源:NVD中公布的19 个C/C+开源软件的漏洞,SARD中C/C+test cases 数据集含61,638个SeVCu 针对缓冲区溢出漏洞(CWE-119),采集了520 个开源软件程序文件和8,122 个test casesu 针对资源管理漏洞(CWE-399),采集了320个开源软件程序文件和 1,729 个test casesu 80%作为训练程序,20%作为目标程序数据集开源:https:/ RQ1:VulDeePecker能同时处理多类漏洞吗?Insight:VulDeePecker可以应用到多类漏洞,其有效性与安全相关库/API函
9、数的个数有关研究问题 RQ2:人类经验(非定义特征)能够改进VulDeePecker的有效性吗?Insight:人类经验可用于选择和安全有关的库/API函数,能够改进VulDeePecker的有效性研究问题 RQ3:VulDeePecker 与其他静态漏洞检测方法相比有效性如何?Insight:VulDeePecker 通过采用数据流信息比人工定义规则的静态分析工具(开源工具和商业工具)更有效研究问题 RQ3:VulDeePecker 与其他静态漏洞检测方法相比有效性如何?Insight:VulDeePecker比基于代码相似性的漏洞检测方法具有更低的漏报真实软件中的检测效果 针对4个目标软件
10、:Libav,Seamonkey,Thunderbird,and Xen SySeVR(支持4类SyVC):检测出15个NVD中未公布的漏洞,其中7个未知漏洞,8个漏洞在软件后续版本中进行了默默修补 VulDeePecker:检测出4个NVD中未公布的漏洞,但在软件后续版本中进行了默默修补局限性与开放问题局限性与开放问题 局限于C/C+源代码漏洞检测 目前SyVC和SeVC的实现中容纳的语法和语义信息有限 以SeVC为粒度检测漏洞,无法准确定位到漏洞行 需要更多的研究来对各深度学习模型的检测效果进行解释 数据集标签的生成过程中采用了启发式方法总结总结 提出了SySeVR,第一个基于深度学习进行漏洞检测的系统化框架,构建了基于深度学习的细粒度漏洞检测系统VulDeePecker,将人类专家从繁琐、主观的手工定义feature解放出来,并降低误报漏报 构建了第一个基于深度学习进行漏洞检测的数据集 探讨了将深度学习用于漏洞检测的指导原则 系统地评价了VulDeePecker的有效性谢 谢!