Page 90 - 《软件学报》2020年第11期
P. 90

3406                                Journal of Software  软件学报 Vol.31, No.11, November 2020













                                         Fig.1    An example of the buffer error vulnerability.
                                               图 1   缓冲区错误漏洞代码示例
                    本文的主要贡献总结如下.
                    (1)  提出了一种基于代码属性图对程序源代码进行建模的方法,其首先将程序表示为代码属性图,然后以
                        敏感操作作为切片准则对其进行切片,最后基于编码规则将代码属性图编码为张量形式的数据,其可
                        以有效地避免程序语义信息的丢失,并为后续的机器学习任务提供支持.
                    (2)  提出了一种面向源代码漏洞挖掘的神经网络模型,该模型利用双向 LSTM 感知源代码的上下文信息,
                        并利用注意力机制捕获关键特征,在实现漏洞挖掘的同时,有效地避免了漏洞与非漏洞代码类间差异
                        小所导致的准确率降低.
                    (3)  通过将本文所提出的方法与 Flawfinder、RATS 和 TBCNN 在 SARD 缓冲区错误数据集、SARD 资源
                        管理错误数据集和由它们 C 语言程序构成的子集上进行对比实验,实验结果表明,本方法相比各对比
                        工具均具有显著提升.
                    本文第 1 节对背景知识与相关技术进行介绍.第 2 节介绍本文所提出的基于代码属性图及注意力双向
                 LSTM 的漏洞挖掘方法的整体方案以及实现细节.第 3 节对本文中所进行的实验进行阐述.第 4 节对本文工作进
                 行了总结,并对本方法的不足以及改进空间进行讨论.
                 1    相关技术概述


                    本节将对本文中所涉及的背景知识与相关技术进行介绍.主要包括源代码漏洞挖掘技术、程序抽象图结构
                 表示以及注意力机制这 3 个方面.
                 1.1   源代码漏洞挖掘技术

                    近年来,随着信息化的不断发展,计算机软件对人们生活的影响也越来越大.如何有效地保证软件质量,已
                 然成为学术界和工业界共同关注的重要问题.在此背景下,程序分析技术应运而生,程序分析指对计算机程序进
                                                                             [4]
                 行自动化的处理,从而确认或发现其某种特征,例如性能、正确性和安全性等 .其中,漏洞挖掘就是对于程序的
                 安全性进行分析,及时发现软件中存在的安全漏洞,从而提高软件的安全性.
                    漏洞(vulnerability)指在软件的需求、设计、实现、配置、运行等过程中被引入的代码缺陷,这些缺陷具有
                 被攻击者利用的可能性,并且其存在将导致系统对某一特定类型的攻击具有一定的敏感性.漏洞的产生主要源
                 于软件生命周期中的逻辑错误、编码缺陷等问题.例如,在系统设计阶段没有考虑到对用户输入数据或者用户
                 权限进行检查,或者在开发阶段以错误的方式调用敏感的库函数.针对不同类型的漏洞,漏洞的起因、可利用性
                 和影响性不尽相同,但其存在均会在不同程度上影响信息系统的安全性,并且被攻击者利用后,会导致受影响实
                 体的机密性、完整性或可用性带来一定程度的损害.
                                                                [5]
                    面向源代码的漏洞挖掘是静态漏洞挖掘中的一个分支 ,其根据程序源代码等静态信息对程序中的漏洞
                 进行挖掘,该类方法可以在程序开发的早期阶段快速地发现程序中存在的漏洞,进而避免后续进一步的损失.本
                 文根据是否引入机器学习技术,将源代码漏洞挖掘方法分为基于规则的源代码漏洞挖掘方法和基于学习的源
                 代码漏洞挖掘方法,在下文中将对两类源代码漏洞挖掘方法进行展开介绍.
   85   86   87   88   89   90   91   92   93   94   95