摘 要
随着软件系统应用领域不断扩大,对于软件和信息系统的攻击日益增多,人们对软件安全的要求不断提升。为此,在软件开发和测试过程中,工程师使用静态代码分析系统对软件代码进行安全性扫描,并评估分析报告,只有通过安全性评估的软件才可以部署至线上运行。然而,传统代码分析是保守的,为不遗漏安全风险,系统往往会抛出大量误报,这些误报增加了安全工程师工作量,进而对软件开发进度产生影响。随着机器学习领域的发展,学术界已将机器学习算法运用于代码分析以发现漏洞或降低误报,然而这些工作只适用于小规模程序,对于在大规模应用还存在着种种问题。
本系统旨在将学术研究成果应用于工业界实际项目中,面向 Web 开发常用的 Java 语言,利用污点分析、程序切片和 BLSTM 为开发或安全工程师提供更准确的代码扫描服务,进而减轻用户工作量,保证软件开发进度和质量。在污点分析方面,本系统利用 Find Security Bugs 的大量规则,保证低漏报的同时,对该工具的输出进行改进,使之反馈更详细的污点传播路径,增强报告可解释性;接着,本系统利用程序切片技术,对每一个漏洞实例进行代码切片,为了保证切片效率和稳定性,本文针对实际 Jar 包对切片器进行优化并提出分段切片思想,对于一个漏洞报告,将其对应的污点传播路径分解为小的污染流片段集合,再对每一个片段进行后向程序切片;最后,系统通过 BLSTM 模型,对预处理后的漏洞切片集合做预测,根据切片的预测结果推导漏洞实例本身是否为误报。
本系统目前已代替传统污点传播分析引擎在线上部署,同时实验结果表明,本系统可以在可接受的扫描时间下,取得更加准确的扫描结果。在效率上,本系统优化传统切片,每个项目的整体扫描时间不超过 1 小时,在准确性上,本系统误报预测精确率达 90.53 %,即相对于单纯的污点传播,本系统在遗漏少量真实漏洞的前提下,排除 25.44 % 误报,大大减轻安全运营人员的代码审计工作量,从而在整体上加快软件开发过程。
关键词:静态代码分析,污点分析,程序切片,BLSTM
Abstract
As the application area of software systems continues to expand, attacks on software and information systems are increasing. So nowadays people pay more and moreattention to software security. During software development and testing, engineersoften scan software codes with static code analysis systems. Only software that haspassed the security testing can be deployed online. While traditional static code analysis is often conservative. In order not to miss any security risks, they often give alarge number of false positives. These false positives not only increase the workloadof security engineers, but also delay the progress of software development. With thedevelopment of machine learning, researchers have applied machine learning on codeanalysis to discover vulnerabilities or reduce false positives. However, their works areonly applicable to small?scale programs.
This system aims to apply academic research to the real world. For one of themost common languages in Web development, Java, this system utilizes taint analysis, program slicing, and BLSTM to provide more accurate code analysis services fordevelopment or security engineers. In terms of taint analysis, the system uses a largenumber of rules in Find Security Bugs to ensure low false negatives. In addition, itcan give taint propagation paths to make the report more readable. Then, the systemslices each vulnerability instance. In order to ensure slicing efficiency and stability,this system optimizes the slicer for the actual Jar package and proposes an idea called??segmented slicing. For a taint vulnerability, its taint paths are pided into small setof taint flow fragments, then the system uses backward program slicing to slice eachtaint flow. Finally, the system uses the BLSTM model to predict vulnerability's slicing set which has been pre?processed, and infer whether the vulnerability instance is falsepositive based on the slice prediction and taint flow logic.
This system has replaced the traditional taint analysis engine online. The experimental results show that the system can obtain more accurate scanning results within anacceptable scanning time. In terms of efficiency, the system optimizes traditional slicing to ensure that the scan time of each project does not exceed 1 hour. For accuracy,the system's precision rate reaches 90.53%. In other words, compared to Find SecurityBugs, the system has eliminated 25.44% false positives, which greatly reduced the codeaudit work.
Keywords: SCA, Taint Analysis, Program Slicing,BLSTM
目录
第一章 引言
1.1 项目背景和意义
随着网络技术和应用飞速发展,信息系统安全正面临着前所未有的挑战。网络化和互联互通性已经成为当前软件和信息系统发展的大势所趋,互联网导致系统攻击面增大,使系统面临的安全威胁空前增加。另一方面,随着软件和信息系统的业务不断丰富,复杂性也不断提高,这不仅使漏洞利用方式不断增加,而且使漏洞检测难度不断提高,尽管开发者已经投入了大量精力进行安全编程,但是软件漏洞仍然存在,并将继续成为一个重大问题 [1].根据国际通用漏洞发布组织 MITRE 统计,在 1999 年,仅有 1600 个通用漏洞(CVE,Common Vulnerabilitiesand Exposures)被发现;到了 2014 年,新发现的 CVE 数量已接近 10000 个 [2];而至今(2020 年 1 月 26 日),该数字已经上升到了 129695 个 1.同时,根据国家互联网应急中心(CNCERT/CC,National Computer Network Emergency ResponseTechnical Team/Coordination Center of China)的报告 2显示,仅 2019 年上半年,国家信息安全漏洞共享平台(CNVD)就收录了通用型安全漏洞 5859 个,其中Web 漏洞占比 24.9%,位居第二。
从以往发生的安全事件来看,针对 Web 漏洞的攻击可导致的后果极为严重,一个网站系统只要有一处脆弱点,攻击者将会使用一切手段对该网站发起攻击,篡改网页内容,窃取服务器数据甚至在服务器中执行恶意代码,造成更严重的后果。
源代码安全是保证软件安全的基础。对于源代码进行安全扫描,可以在源头处杜绝安全问题,根据 2019 年中国软件评测中心的《2019 大中型政企机构网络安全建设发展趋势研究报告》显示,进行源码扫描能有效减少 10%?50% 安全漏洞,降低软件安全建设和运维成本。因此,源码安全日益受到中大型政企机构的重视,在此方面投入也不断提高,其中,构建一款具有高准确率的静态代码分析(SCA,static code analysis)系统显得尤为重要 [3].
由于软件数量和规模扩大,人们总希望能够通过自动化技术发现代码中的漏洞,从开源工具到商业工具,从工程实践到学术领域,目前已有许多关于代码静态扫描系统的应用和研究 [1, 3-15].然而目前静态代码分析系统仍存在或多或少的问题,在工业界,SCA 使用基于模式匹配、数据流分析等技术,往往希望不漏掉真实漏洞--不产生漏报,但是它们产生了大量误报 [3, 16, 17].过高的误报使人工审核任务加重,让安全工程师将大量精力浪费在无害代码上 [5].在实际生产中,安全工程师为了权衡误报与漏报,必须不断地设计更加精巧的扫描规则,再一次加重了安全工程师负担 [1, 18],并对安全工程师个人经验有很高的要求。学术界对提高 SCA 的准确性进行了更深入的研究,引入了诸如符号执行,机器学习等技术,但是受限于计算能力,它们往往只能应对小规模代码项目,如何让学术界成果应用到工业界,使其适应大规模程序,是安全工程师亟待考虑的问题。
本文旨在设计一款基于污点传播和机器学习的 Java 静态代码扫描系统,通过污点传播、程序切片和双向长短记忆网络(BLSTM, Bidirectional Long ShortTerm Memory)技术,提供准确的安全扫描服务。具体来说,用户输入一个已编译好的 Jar 包后,该系统以污点分析为基础,先产生一个初步的漏洞结果。由于污点分析存在过污染、无法识别清洁函数问题,该结果存在大量误报,接着系统根据初步结果进行分解,将其划分为多个子污染流,对每个污染流进行后向程序切片,并用 BLSTM 算法模型预测切片是否能够向下传播污点,从而推导每个漏洞实例是否可利用,并将疑似误报的漏洞威胁等级降低,以此让安全工程师或软件开发人员将更多注意力放在更可能为漏洞的结果上。同时,用户可以对漏洞进行标注,通过模型周期性的迭代学习,预测准确率将不断提高。系统对于污点分析得到的传播路径进行拆解,通过限制调用图和去依赖切片技术,解决了学术工具只能应对小规模程序的问题,填补了学术界和工业界的鸿沟,而基于学术界前沿工作,本系统相对于传统扫描工具结果更准确。
1.2 研究现状
本系统旨在利用传统方法配合机器学习对 Java 软件源代码进行静态安全扫描,因此本节将详细介绍工业界传统静态代码分析系统应用现状和学术界基于机器学习的静态安全扫描研究现状。
1.2.1 传统静态代码分析
系统应用现状在项目上线前对项目代码进行静态扫描已经成为软件开发中的最佳实践,在实际操作中,各个企业会根据实际情况使用第三方或自研静态扫描产品。本小节就目前常用扫描产品和静态扫描技术进行介绍。
目前静态安全扫描产品使用的技术主要有词法分析技术、数据流分析技术和形式化分析技术。词法分析技术主要是对代码中敏感函数进行匹配,从而发现安全性漏洞,这一类分析技术产生时间较早,实现也较为简单,但是由于其不考虑程序上下文,存在大量误报,在实际情况中使用较少。
数据流分析技术模拟程序中敏感数据流动从而发现安全漏洞,其衍生出的污点分析方法是目前实际使用的主要检测方法,这一类分析方法适合于数组越界,注入类漏洞,因为这些漏洞特征表现为特定变量在某一程序点上状态满足或不满足某一规则,通过对数据的跟踪恰好可以识别这些特征。由于其能覆盖的漏洞种类较多,本系统选择以该技术为预测的基础,然而随着目前程序规模不断扩大,新型程序设计思想和语法不断出现,加之漏洞成因愈发复杂,即使是这类分析技术目前也存在大量误报,例如污点分析无法很好的处理容器变量、控制流、清洁函数等,企业中的安全运营人员必须通过手工设计精巧的污点传播规则,限制开发者所用的清洁函数,或是以手工添加函数摘要的方式添加清洁函数等方式降低误报,然而这些方式并不能完全解决污点分析的弊端,仍有误报不断产生,安全工程师需要花大量时间处理误报。
形式化分析技术往往用于一些可以用数学逻辑表达的安全漏洞,如 C/C++语言中指针变量二次释放,缓冲区溢出等问题,这一类技术将漏洞存在性问题变为数学逻辑上的约束求解和逻辑推导问题,由于目前程序规模较大,该技术面临着求解规模空间大,无法推导等问题,此外该技术针对的漏洞类型较少,将问题转变为数学模型需要大量人力成本。
目前商业 SCA 主要有 Fortify SCA 3、LGTM 4,Infer 5等。Fortify 为老牌安全扫描工具,其主要结合词法分析,数据流分析、配置分析等扫描技术,但就像前文所说,其默认规则存在大量误报;LGTM 为较为新型的安全扫描器,是Google、微软所使用的安全扫描器之一,其创新点在于其通过定义 QL 语法编写扫描器规则,将扫描逻辑和规则逻辑分离,使安全工程师能够较快地编写规则;Infer 为 Facebook 所使用的安全扫描器之一,也是少数使用形式化分析技术实现的扫描器,其使用分离逻辑和双向假说推理的思想,解决了传统形式化分析求解规模过大的问题,但其检测能力目前只限于资源泄露,空指针漏洞,不能用于其他类型(如常见的 OWASP TOP 10)的漏洞检测。
1.2.2 基于机器学习的静态安全扫描研究现状
为解决传统扫描器高误报、需要花大量人力定义规则等问题,随着机器学习领域的不断发展,学术界也一直在探索机器学习在静态安全扫描上的应用。
研究初期,研究者们提出了一些半智能化的扫描方案 [3, 19, 20],这些方案主要由人工定义代码特征(如:语句长度,关键 API 调用位置等),并使用传统的机器学习算法进行分类。这一类工作的人工标记思路与本系统类似,然而由于其仍需要手工设计特征、泛化能力较弱等原因,并没有得到大面积推广。
随着研究工作不断深入,部分研究者提出通过相似度识别漏洞 [4, 21],它的主要思想是如果一个待测代码片段 A 与已有代码片段 B 在某漏洞特征上具有高相似度,并且已知代码 B 为漏洞代码,那么代码 A 就很可能也为漏洞代码。在特征工程上,研究者们分别将代码特征抽象为词向量 [21]、树和图 [22],以此比较相似性。李珍等学者提出 VulPecker [4] 从六个维度定义多个代码特征并且设计多种相似度算法,他们认为不同类型漏洞适用于不同特征和相似算法,并且一个优秀的相似度算法可以将含漏洞和安全代码进行区分,因此设计相似度算法选择器,通过已有漏洞代码库(NVD)和补丁信息训练相似度算法选择器,得到 < 漏洞类型, 算法 > 对应关系,当有新的被测代码输入时,通过各类漏洞的相似度算法识别代码是否有这些漏洞。这类工作的优势在于不需要大量标记数据集即可进行扫描,但是大多数工作仍需要手工设计特征,并且代码识别精度较低,因此并没有得到大规模使用。
还有部分研究者使用深度学习直接提取代码特征,将识别漏洞代码问题转化为分类问题 [1, 9, 14].李珍等学者提出的 VulDeePecker [1] 是这一方向的代表工作之一,该工具首先抽取与安全 API 相关的程序代码(文中称其为 gadgets,它们类似于对调用安全 API 位置的后向切片),再将其代码转化为向量,结合标记后使用 BLSTM 学习,当输入待测代码后,将其做相同的向量化操作,再由BLSTM 预测其是否为漏洞,经过试验,该工具在数据集上具有较高准确率,并且在 3 款实际软件中发现了 4 个未知漏洞,但是该工具只能预测 C/C++ 程序的漏洞,并且在切片时没有考虑控制流信息;Koc 等人提出使用机器学习降低污点传播误报率的方法 [14],他们在文中总结了污点传播的误报模式,并且提出使用对方法体进行程序切片和 LSTM 预测降低误报率的想法,经过试验,他们认为该方法能够有效降低误报;在 2019 年,Koc 等人对先前工作展开进一步实证研究 [9],对比手工设计特征、词袋结合随机森林、程序切片结合 BLSTM 和程序切片结合图神经网络(GNN)的预测效果,实验证明,BLSTM 组预测效果普遍优于其他组,并且,在切片后对切片进行泛化处理可以大大提高预测效果。Koc等人工作是本系统的主要参考,对于函数体,本系统也是用类似的切片技术和预测技术,然而,他们工作中提到程序切片只适用于小规模程序的问题,因此他们工具只能对于漏洞的最后一个函数体(污点传播汇聚点)进行切片,由于污点是否能够传播并不等价于污点是否能够在汇聚点传播,因此无法用于实际使用,本系统创新性的提了分解污点传播过程和限制调用图切片方法,解除这一限制,即本系统可以对污染传播全流程进行切片和预测,保证预测结果准确性。
1.3 本文主要研究工作
为解决传统扫描工具检测误报率高的问题,本系统实现一款基于污点分析、程序切片和 BLSTM 的静态代码扫描系统。该系统面向 Java 语言,以开发者编译后得到的 Jar 包为输入,提供准确的漏洞扫描报告,从而减轻安全工程师工作量,加快软件开发效率。本文主要研究工作如下。
本文首先分析目前常用程序安全分析技术的原理和优缺点,选择静态污点分析作为系统的基础分析方法,然后根据学术界前沿研究成果,选择基于 Joana的后向程序切片和 BLSTM 作为误报预测方法,最后分析用户需求设计系统架构,将系统分为污点分析模块,程序切片模块,数据预处理模块和误报预测模块,以 C/S 架构向用户提供服务。
在污点分析模块,本系统以 Find Security Bugs 工具6的污点分析为基础,改进其分析流程,对用户提交的 Jar 包集合进行污点分析,输出污点分析报告,与原始 Find Security Bugs 不同,本系统在报告中不仅报告代码中潜在漏洞项、代码位置之外,还额外向用户展示可能被利用的污点传播路径,路径由污点传播树表示,一方面让用户更清晰地了解漏洞发生原理,快速判断误报,另一方面为程序切片提供依据。
在程序切片模块,系统基于 Joana 实现了一套适用于实际应用程序的切片器,完成无依赖切片、限制调用图规模切片和异构 Jar 包的切片。具体来说,对于上一模块报告中的污点传播树,系统对其相关函数拆分,得到污染流,对污染流进行限制规模切片,进一步缩小切片规模,为系统稳定运行和准确预测提供保障。
定义 1.1 (污点传播树)。 污点传播树是反映污点传播的树形数据结构,树中根节点为调用入口函数的调用者函数,树中其他节点为函数调用信息或返回语句信息,由于同一层节点存在顺序,由孩子兄弟表示法表示。
定义 1.2 (污点传播流)。 污点传播流用于指导切片的一种数据结构,实际为函数摘要至关键点行号的二元组。
在预处理模块,系统参考 Koc 等学者工作 [9] 和实际应用的切片内容,提出一套适用于实际应用代码的泛化和向量化方案,保证预测模型快速收敛和用户对准确性的要求。
在误报预测模块,系统基于 Pytorch 实现经典的 BLSTM 神经网络三层架构,通过该模型预测污染流是否能够传播污点,若一棵传播树中存在一处传播流无法传播污点,那么该传播树表示的传播路径被标记为不可利用,当一个漏洞实例的所有传播树不可利用时,系统推导得到该漏洞实例为误报,经过试验,该模型可以准确预测误报。同时系统基于 Django、Celery 和 MySQL 等技术实现后台服务,用户可以根据需要定制模型各项参数并定时触发模型训练流程。
综上,本系统将学术界前沿技术成功运用到实际生产中,首次提出对污点分析结果拆分,将漏洞预测任务转化为污点传播树中子污染流是否安全的预测任务;改进后向切片器,通过限制调用图的方式保证切片过程在绝大多数污染流上能够顺利进行,从而保证系统在各类规模程序上都能提供准确的漏洞扫描报告。
1.4 本文组织结构
本文共分为五个章节,组织结构如下:
第一章,引言部分,介绍本系统背景和意义,分析当前关于静态安全扫描的研究现状以及介绍本文主要研究工作。
第二章,介绍相关技术,介绍目前较常见的漏洞挖掘技术,对比相关技术优缺点,说明本系统的技术方案,并对系统中使用的核心技术如污点分析,程序切片和 BLSTM 算法进行介绍。
第三章,Java 静态安全扫描系统的需求分析和设计,首先介绍系统整体概述,分析系统功能性和非功能性的需求,接着说明系统总体设计,再分模块从类图和流程两方面分别说明模块设计。
第四章,Java 静态安全扫描系统实现和测试,对于各个模块的实现细节结合漏洞实例代码进行详细说明,接着介绍系统的功能测试、健壮性和性能测试,对系统预测效果进行评估,最后展现系统运行效果。
第五章,总结和展望,对本系统和论文的工作进行总结,并提出本系统的不足和未来工作方向。
第二章 相关技术综述
2.1 漏洞挖掘技术
2.1.1 基于代码分析的漏洞挖掘技术
2.1.1.1 词法分析技术
2.1.1.2 数据流和控制流分析技术
2.1.1.3 形式化方法分析技术
2.1.1.4 符号执行技术
2.1.2 基于模糊测试的漏洞挖掘技术
2.2 污点分析
2.2.1 污点分析原理
2.2.1.1 污点分析三要素
2.2.1.2 污点分析过程
2.2.2 污点分析的优势和不足
2.2.3 Java 污点分析工具选型
2.3 程序切片技术
2.3.1 程序切片定义
2.3.2 程序切片技术
2.3.3 后向程序切片的优势与不足
2.4 BLSTM 算法
2.4.1 LSTM 原理介绍
2.4.2 双向读取--BLSTM
2.4.3 BLSTM 的优势
2.5 Django 框架
2.5.1 Django 框架简介
2.5.2 Django 框架优势
2.6 本章小结
第三章 Java 静态安全扫描系统需求分析与设计
3.1 系统整体概述
3.2 系统需求分析
3.2.1 功能性需求
3.2.2 非功能性需求
3.2.3 系统用例描述
3.3 系统总体设计
3.4 污点分析模块设计
3.4.1 流程设计
3.4.2 污点传播图类图设计
3.4.3 污点传播树和漏洞报告类图设计
3.4.4 污点分析器类图设计
3.5 程序切片模块设计
3.5.1 流程设计
3.5.2 类图设计
3.6 数据预处理模块设计
3.6.1 流程设计
3.6.2 类图设计
3.7 误报预测模块设计
3.7.1 架构设计
3.7.2 类图设计
3.7.3 流程设计
3.8 数据库设计
3.9 本章小结
第四章 Java 静态安全扫描系统实现和测试
4.1 一个 XSS 漏洞实例
4.2 污点分析模块的实现
4.2.1 记录污点传播信息实现
4.2.2 构造污点传播图实现
4.2.3 构造污点传播树并生成注解的实现
4.3 程序切片模块的实现
4.3.1 切片控制模块实现
4.3.1.1 切片控制代码
4.3.1.2 过滤漏洞实例
4.3.1.3 分解污点传播树
4.3.2 后向切片的实现
4.3.2.1 基于 Joana 的后向切片
4.3.2.2 SDG 的生成配置类
4.4 数据处理模块的实现
4.4.1 泛化处理
4.4.2 建立单词表与向量化
4.5 误报预测模块的实现
4.5.1 误报预测控制
4.5.2 误报预测时序图
4.5.3 漏洞标记时序图
4.5.4 批训练过程
4.6 系统测试与运行展示
4.6.1 测试目标
4.6.2 功能测试
4.6.3 健壮性和性能测试
4.6.4 系统效果评估
4.6.4.1 参数设置
4.6.4.2 评估方法和度量
4.6.4.3 评估数据集
4.6.4.4 实验结果
4.6.5 系统运行展示
4.7 本章小结
第五章 总结与展望
5.1 总结
为了解决应用安全问题,本文设计了一套基于污点分析、程序切片和 BLSTM的静态安全扫描系统,旨在从源头处遏制程序漏洞。相较于传统的污点分析类代码扫描系统,本系统对污点传播树进一步分析,通过程序切片和先前标记进行学习,能够有效地排除误报,保证扫描结果准确性,大大降低了系统使用时的人力成本。本文主要工作如下:
1. 本文对开源污点传播工具 Find Security Bugs 进行改造,使之能在报告中展示污点传播树,友好地向用户展示可能的漏洞利用过程。
2. 系统对污点传播树进行拆分,将污点传播流和子传播流作为切片单位进行程序切片,系统优化了 Joana 切片过程,使之能够在缺失依赖、异构 Jar 包的情况下切片,并通过限制调用图限制程序切片范围,结合污点传播树的拆分,解决了目前切片资源消耗大导致扫描任务无法及时结束的问题。
3. 系统根据实际情况对切片后的 SSA 进行泛化处理,进一步保证预测模型的泛化能力。
4. 系统通过对漏洞的各个污点传播树的传播流及其子污染流进行预测,从而预测漏洞是否为误报。系统采用 BLSTM 模型,该模型在学术界已被多项工作证明在漏洞预测领域有较为显著的效果。用户在系统界面中能够得知漏洞预测结果,若为误报,系统能够清晰给出判断依据,即污点在哪一段传播流中无法继续传播,一定程度上弥补了深度学习可解释性差的问题。
安全工程师能够轻松地对漏洞、传播树和传播流进行标记,并发起新的学习任务,不断提高预测模型的准确率。
系统被设计为有良好的可拓展性,对于污点分析结果翻译、切片器和预测器,系统都对其高度抽象为接口,方便后期根据实际需要对系统中各个模块所用技术进行更换。
经过测试和实验,结果表明本系统具有较高的健壮性,在 Maven 仓库中前100 流行度的项目中系统扫描成功率为 100 %,此外,本系统具有较高准确性,在 OWASP 数据集中,本系统预测模块能够准确预测安全污点传播流,相较于Find Security Bugs,本系统在 OWASP 数据集上提高了约 20 % 的准确率,减少了 25.44 % 的误报。
5.2 展望
本系统是将深度学习应用于漏洞扫描领域的一次成功探索,实现了传统检测技术与深度学习相结合,对 Java 代码进行更准确的安全扫描任务,然而在未来,系统在以下方面还有较大的改进空间:
1. 系统目前只针对 Java 语言,在未来可以将其方法推广到其他语言的项目。
2. 系统只能适用于能用污点分析方法分析的漏洞类型,在未来可以将切片和预测方法推广到其他基础分析的误报排除中。
3. 系统并不能发现更多漏报,在未来可以使用类似的切片技术和预测方法,结合其他经典漏洞挖掘技术,在消除漏报方面做进一步提升。
4. 系统在特征表示时,目前实际上是将切片转化为单词序列,再将单词序列进行向量化处理,在未来可以参考程序图特征表示的前沿工作,将切片表示成信息更丰富的特征,进一步提高预测准确性。
5. 目前由于数据量有限,对于所有污点漏洞均使用一个模型进行预测,待数据量进一步扩大时,可以将针对每一种漏洞单独训练模型。
参考文献
[1] Z. Li, D. Zou, S. Xu, X. Ou, H. Jin, S. Wang, Z. Deng, Y. Zhong, VulDeePecker:A Deep Learning?Based System for Vulnerability Detection, in: Proceedings ofthe 2018 Network and Distributed System Security Symposium, Internet Society,Reston, VA, 2018.
[2] 刘剑, 苏璞睿, 杨珉, 和亮, 张源, 朱雪阳, 林惠民, 软件与网络安全研究综述,软件学报 29 (1) (2018) 42-68.
[3] O. Tripp, S. Guarnieri, M. Pistoia, A. Aravkin, ALETHEIA:Improving the Usability of Static Security Analysis, in: Proceedings of the 2014 ACM SIGSACConference on Computer and Communications Security, ACM Press, New York,New York, USA, 2014, pp. 762-774.
[4] Z. Li, D. Zou, S. Xu, H. Jin, H. Qi, J. Hu, VulPecker: An automated vulnerabilitydetection system based on code similarity analysis, in: Proceedings of the 32ndAnnual Conference on Computer Security Applications, 2016, pp. 201-213.
[5] X. Du, B. Chen, Y. Li, J. Guo, Y. Zhou, Y. Liu, Y. Jiang, LEOPARD: Identifying Vulnerable Code for Vulnerability Assessment Through Program Metrics, in:Proceedings of the 2019 IEEE/ACM 41st International Conference on SoftwareEngineering, IEEE, 2019, pp. 60-71.
[6] C. Cadar, V. Ganesh, P. M. Pawlowski, D. L. Dill, D. R. Engler, EXE: Automatically Generating Inputs of Death, ACM Transactions on Information and SystemSecurity 12 (2) (2008) 1-38.
[7] D. Hovemeyer, W. Pugh, Finding bugs is easy, Companion to the 19th annual ACM SIGPLAN conference on Object?oriented programming systems, languages, and applications 39 (12) (2004) 92-106.
[8] O. Tripp, M. Pistoia, S. J. Fink, M. Sridharan, O. Weisman, TAJ: effective taintanalysis of web applications, Proceedings of the 2009 ACM SIGPLAN conferenceon Programming language design and implementation 44 (6) (2009) 87-97.
[9] U. Koc, S. Wei, J. S. Foster, M. Carpuat, A. A. Porter, An Empirical Assessmentof Machine Learning Approaches for Triaging Reports of a Java Static AnalysisTool, Proceedings of the 12th IEEE Conference on Software Testing, Validationand Verification (2019) 288-299.
[10] K. Sen, D. Marinov, G. Agha, CUTE: a concolic unit testing engine for C, Proceedings of the 10th European software engineering conference held jointly with13th ACM SIGSOFT international symposium on Foundations of software engineering 30 (5) (2005) 263.
[11] Y. Xie, A. Aiken, Saturn: A scalable framework for error detection using Booleansatisfiability, ACM Transactions on Programming Languages and Systems 29 (3)(2007) 16.
[12] C. Cadar, D. Dunbar, D. Engler, Klee: Unassisted and automatic generation ofhigh?coverage tests for complex systems programs, in: Proceedings of the 8thUSENIX Symposium on Operating Systems Design and Implementation, OSDI2008, Vol. 8, 2019, pp. 209-224.
[13] C. Flanagan, K. R. M. Leino, M. Lillibridge, G. Nelson, J. B. Saxe, R. Stata, Extended static checking for Java, in: Proceedings of the 2002 ACM SIGPLAN Conference on Programming Language Design and Implementation, Vol. 48, ACMPress, New York, New York, USA, 2002, pp. 234-245.
[14] U. Koc, P. Saadatpanah, J. S. Foster, A. A. Porter, Learning a classifier for falsepositive error reports emitted by static code analysis tools, Proceedings of the 1stACM SIGPLAN International Workshop on Machine Learning and ProgrammingLanguages, co?located with PLDI 2017 (2017) 35-42.
[15] N. Jovanovic, C. Kruegel, E. Kirda, Pixy: a static analysis tool for detecting Webapplication vulnerabilities, in: Proceedings of the 2006 IEEE Symposium on Security and Privacy, IEEE, 2006, pp. 258-263.
[16] Y. Kim, J. Lee, H. Han, K.?M. Choe, Filtering false alarms of buffer overflowanalysis using SMT solvers, Information and Software Technology 52 (2) (2010)210-219.
[17] B. Johnson, Y. Song, E. Murphy?Hill, R. Bowdidge, Why don't software developers use static analysis tools to find bugs?, in: Proceedings of the 35th InternationalConference on Software Engineering, IEEE, 2013, pp. 672-681.
[18] F. Yamaguchi, A. Maier, H. Gascon, K. Rieck, Automatic Inference of SearchPatterns for Taint?Style Vulnerabilities, in: Proceedings of the 2015 IEEE Symposium on Security and Privacy, IEEE, 2015, pp. 797-812.
[19] T. Kremenek, D. Engler, Z?Ranking: Using Statistical Analysis to Counter the Impact of Static Analysis Approximations, in: Proceedings of the 10th InternationalConference on Static Analysis, San Diego, CA, USA, 2003, pp. 295-315.
[20] U. Yuksel, H. Sozer, Automated Classification of Static Code Analysis Alerts:A Case Study, in: Proceedings of the 2013 IEEE International Conference onSoftware Maintenance, IEEE, 2013, pp. 532-535.
[21] S. Kim, S. Woo, H. Lee, H. Oh, VUDDY: A Scalable Approach for VulnerableCode Clone Discovery, in: Proceedings of the 2017 IEEE Symposium on Securityand Privacy, IEEE, 2017, pp. 595-614.
[22] N. H. Pham, T. T. Nguyen, H. A. Nguyen, T. N. Nguyen, Detection of recurringsoftware vulnerabilities, in: Proceedings of the 2010 IEEE/ACM internationalconference on Automated software engineering, ACM Press, New York, NewYork, USA, 2010, pp. 447-456.
[23] 梅宏, 王千祥, 张路, 王戟, 软件分析技术进展, 计算机学报 32 (9) (2009) 1697-1710.
[24] G. A. Kildall, A unified approach to global program optimization, in: Proceedingsof the 1st annual ACM SIGACT?SIGPLAN symposium on Principles of programming languages, ACM Press, New York, New York, USA, 1973, pp. 194-206.
[25] B. Shastry, F. Yamaguchi, K. Rieck, J.?P. Seifert, Towards Vulnerability DiscoveryUsing Staged Program Analysis, in: Detection of Intrusions and Malware, andVulnerability Assessment, Springer, Cham, 2016, pp. 78-97.
[26] J. M. Schumann, Automated Theorem Proving in Software Engineering, SpringerBerlin Heidelberg, Berlin, Heidelberg, 2001.
[27] C. Calcagno, D. Distefano, P. O'Hearn, H. Yang, Compositional shape analysisby means of bi?abduction, in: Proceedings of the 36th annual ACM SIGPLANSIGACT symposium on Principles of programming languages, Vol. 58, ACMPress, Savannah, GA, USA, 2009, pp. 289-300.
[28] C. Cadar, K. Sen, Symbolic Execution for Software Testing: Three Decades Later,Communications of the ACM 56 (2) (2013) 82-90.
[29] P. Godefroid, N. Klarlund, K. Sen, DART: directed automated random testing, in:Proceedings of the 2005 ACM SIGPLAN conference on Programming languagedesign and implementation, Vol. 40, ACM Press, New York, New York, USA,2005, pp. 213-223.
[30] H. Liang, X. Pei, X. Jia, W. Shen, J. Zhang, Fuzzing: State of the Art, IEEETransactions on Reliability 67 (3) (2018) 1199-1218.
[31] V. J. M. Manes, H. S. Han, C. Han, sang kil Cha, M. Egele, E. J. Schwartz, M. Woo,The Art, Science, and Engineering of Fuzzing: A Survey, IEEE Transactions onSoftware Engineering (2019) 1-1.
[32] 邹权臣, 张涛, 吴润浦, 马金鑫, 李美聪, 陈晨, 侯长玉, 从自动化到智能化: 软件漏洞挖掘技术进展, 清华大学学报 (自然科学版) 58 (12) (2018) 1079-1094.
[33] N. Stephens, J. Grosen, C. Salls, A. Dutcher, R. Wang, J. Corbetta, Y. Shoshitaishvili, C. Kruegel, G. Vigna, Driller: Augmenting Fuzzing Through SelectiveSymbolic Execution, in: Proceedings of the 2016 Network and Distributed System Security Symposium, Internet Society, Reston, VA, 2016.
[34] S. Rawat, V. Jain, A. Kumar, L. Cojocar, C. Giuffrida, H. Bos, VUzzer:Application?aware Evolutionary Fuzzing, in: Proceedings of the 2017 Networkand Distributed System Security Symposium, Internet Society, Reston, VA, 2017.
[35] H. Han, D. Oh, S. K. Cha, CodeAlchemist: Semantics?Aware Code Generation toFind Vulnerabilities in JavaScript Engines, in: Proceedings of the 2019 Networkand Distributed System Security Symposium, No. February, Internet Society, Reston, VA, 2019.
[36] 王蕾, 李丰, 李炼, 冯晓兵, 污点分析技术的原理和实践应用, 软件学报 28 (4)(2017) 860-882.
[37] M. Weiser, Program Slicing, IEEE Transactions on Software Engineering SE?10 (4) (1984) 352-357.
[38] B. Xu, J. Qian, X. Zhang, Z. Wu, L. Chen, A brief survey of program slicing,ACM SIGSOFT Software Engineering Notes 30 (2) (2005) 1-36.
[39] K. J. Ottenstein, L. M. Ottenstein, The program dependence graph in a software development environment, Proceedings of the first ACM SIGSOFT/SIGPLAN software engineering symposium on Practical software development environments 19 (5) (1984) 177-184.
[40] S. Horwitz, T. Reps, D. Binkley, Interprocedural slicing using dependence graphs,ACM Transactions on Programming Languages and Systems (TOPLAS) 12 (1)(1990) 26-60.
[41] J. Su, Z. Tan, D. Xiong, R. Ji, X. Shi, Y. Liu, Lattice?Based Recurrent NeuralNetwork Encoders for Neural Machine Translation, in: Proceedings of the 31stAAAI Conference on Artificial Intelligence, AAAI'17, AAAI Press, 2017, pp.3302-3308.
[42] B. Hanin, Which Neural Net Architectures Give Rise to Exploding and VanishingGradients?, in: Proceedings of the 32nd International Conference on Neural Information Processing Systems, NIPS'18, Curran Associates Inc., Red Hook, NY,USA, 2018, pp. 580-589.
[43] S. Hochreiter, J. Schmidhuber, Long Short?Term Memory, Neural Computation9 (8) (1997) 1735-1780.
[44] A. Hindle, E. T. Barr, Z. Su, M. Gabel, P. Devanbu, On the naturalness of software,in: Proceedings of the 34th International Conference on Software Engineering,IEEE, 2012, pp. 837-847.
[45] E. C. R. Shin, D. Song, R. Moazzezi, Recognizing Functions in Binaries withNeural Networks, in: Proceedings of the 24th USENIX Conference on SecuritySymposium, SEC'15, USENIX Association, USA, 2015, pp. 611-626.
[46] M. White, C. Vendome, M. Linares?Vasquez, D. Poshyvanyk, Toward DeepLearning Software Repositories, in: Proceedings of the 12th Working Conferenceon Mining Software Repositories, IEEE, 2015, pp. 334-345.
[47] P. Kruchten, The 4+1 View Model of architecture, IEEE Software 12 (6) (1995)42-50.
[48] Y. You, Z. Zhang, C.?J. Hsieh, J. Demmel, K. Keutzer, ImageNet Training in Minutes, in: Proceedings of the 47th International Conference on Parallel Processing,ACM Press, New York, New York, USA, 2018, pp. 1-10.
[49] E. Hoffer, I. Hubara, D. Soudry, Train Longer, Generalize Better: Closing theGeneralization Gap in Large Batch Training of Neural Networks, in: Proceedingsof the 31st International Conference on Neural Information Processing Systems,Curran Associates Inc., Red Hook, NY, USA, 2017, pp. 1729-1739.
[50] Y. You, J. Hseu, C. Ying, J. Demmel, K. Keutzer, C.?J. Hsieh, Large?batch trainingfor LSTM and beyond, in: Proceedings of the 2019 International Conference forHigh Performance Computing, Networking, Storage and Analysis, ACM, NewYork, NY, USA, 2019, pp. 1-16.
致 谢
首先感谢陈振宇老师,感谢您两年以来对我的谆谆指导,不仅在学术上给我创造了很多机会,更重要的是教会我如何做人,让我如今能以一个研究生的身份走入社会。即使是在疫情严重时期,您也不断地牺牲个人时间通过线上会议和微信了解我们的毕设进展,提出宝贵意见,保证了本文的专业性和技术深度。
感谢房春荣老师,在本项目的设计、实验安排等方面提出的宝贵建议和意见。同时感谢实验室黄勇老师在技术上的帮助和指导,是您的严格要求保证了本系统的健壮性。
感谢张双江、李灏宇等师兄为本文的行文安排和格式上提供的帮助。感谢同为安全组的蒋燕和史洋洋同学,让我在科研的道路上不再孤单,感谢你们在平时研究和毕业设计过程中对我的帮助,在进展不顺利的时候给我安慰并与我一起出谋划策。
感谢 Koc 教授,是你们团队在学术上的工作为本文提供了理论支持,感谢WALA 开发者 Manu,Joana 开发者 Simon,感谢你们的建议和意见让本文无依赖切片成为现实。
感谢暑期实习时与我一起工作的同事们,是你们让我了解到了真实安全运营时面临的问题,启发了本文的工作。
感谢父母,谢谢你们在我完成毕设期间对我的理解和支持,给我了一个舒适的工作环境,保证了毕设的顺利完成。
(如您需要查看本篇毕业设计全文,请您联系客服索取)