摘要:软件安全缺陷检测已经成为软件行业非常重要的一项工作。安全关键软件设计使用的C/C++语言含有大量未定义行为,使用不当可能产生重大安全隐患。本文将根据八篇前沿论文,总结提出八种比较新的软件安全缺陷检测技术和算法。设计和实现了一个可扩展的源代码静态分析工具平台,并通过实验表明,相对于单个工具的检测结果而言,该平台明显降低了漏报率和误报率。

  关键字:源代码;安全缺陷;静态检测工具;缺陷描述

  1、引言:

  近年来,随着软件事业的发展,人们逐渐的认识到,想要开发出高质量的软件产品,必须对软件的开发过程进行改善。研究表明,相当数量的安全问题是由于软件自身的安全漏洞引起的。软件开发过程中引入的大量缺陷,是产生软件漏洞的重要原因之一。软件源代码安全性缺陷排除是软件过程改进的一项重要措施。当前,与源代码安全缺陷研究相关的组织有CWE、Nist、OWASP等。业界也出现了一批的源代码安全检测工具,但是这些机构、组织或者公司对源代码发中缺表1 CWE中缺陷描述字段表2 SAMATE中评估实例描述方法陷的描述方法不一,业界没有统一的标准。在实际工作中,经过确认的缺陷需要提取,源代码需要用统一的方法描述。本文根据实际工作的需要,调研国内外相关资料,提出一种源代码缺陷描述方法。

  通常意义上的网络安全的大威胁是程序上的漏洞,程序漏洞检测主要分为运行时检测和静态分析方法。运行时检测方法需要运行被测程序,其检测依赖外部环境和测试用例,具有一定的不确定性。

  开发人员在开发过程中会引入一些源代码缺陷,如SQL注入、缓冲区溢出、跨站脚本攻击等。同时一些应用程序编程接口本身也可能存在安全缺陷。而这些安全缺陷轻则导致应用程序崩溃,重则导致计算机死机,造成的经济和财产损失是无法估量的。目前的防护手段无法解决源代码层面的安全问题。因而创建一套科学、完整的源代码安全缺陷评价体系成为目前亟待解决的问题。

  目前与源代码安全缺陷研究相关的组织有CWE等,业界也出现了一批的源代码安全检测工具,但是这些机构和组织对源代码中缺陷的描述方法不一,没有统一的标准。本文借鉴业界对源代码缺陷的描述,结合实际工作需要,提出了一种计算机源代码缺陷的描述方法。

  随着社会信息化的不断加深,人们不得不开始面对日益突出的信息安全问题。研究表明,相当数量的安全问题是由于软件自身的安全漏洞引起的。软件开发过程中引入的大量缺陷,是产生软件漏洞的重要原因之一。不同的软件缺陷会产生不同的后果,必须区别对待各类缺陷,分析原因,研究其危害程度,预防方法等。建立一个比较完整的缺陷分类信息,对预防和修复软件安全缺陷具有指导作用。软件缺陷一般按性质分类,目前已有很多不同的软件缺陷分类法,但在当前实际审查使用中,这些缺陷分类存在以下弊端:(1)专门针对代码审查阶段发现缺陷的分类较少。现有的分类法一般包括动态测试发现的缺陷类型和文档缺陷等,而在代码审查中这些缺陷类型并不是审查关注的重点。(2)有些代码缺陷分类中的缺陷类型不适应当前代码审查实情,而一些新的代码缺陷类型则没有被包括。(3)目前源代码缺陷分类种类繁多,标准不一,各有欠缺。没有一个专门针对源代码缺陷的,比较仔细,完善的分类。

  2、软件源代码安全缺陷分析方法:

  一种软件源代码安全缺陷分析的方法,其特征在于,包括:设定源代码缺陷类型多个缺陷数据组,所述的缺陷数据组包括:缺陷原因数据组、缺陷结果数据组、缺陷表现形式数据组;调取源代码并解析缺陷原因、结果、表现形式;判断所述的缺陷原因、结果、表现形式是否处于所述的缺陷数据组中,若是,进入步骤S4,若否,进入步骤531,将所述的缺陷原因和/或结果和/或表现形式加入到所述的缺陷数据组中;生成所述的源代码原因、结果、表现形式并显示。所述的软件源代码安全缺陷分析的方法,其特征在于,所述的缺陷原因包括内因、外因、主客观原因。具体是:注入缺陷及验证、应用程序编程接口错误、访问控制及密码失效、资源共享与竞争、异常处理、不安全源码质量、边界处理、配置错误、恶意代码;缓冲区溢出、整数溢出、命令注入、跨站脚本、拒绝服务、路径操纵、进程控制、资源注入、配置操纵、SQL注入、内存溢出;格式化字符串、赋值的目标存储空间不够、未使用括号保证操作的优先级、尝试修改常量、引用未初始化的变量。

  2.1 软件安全建模

  为有效表示和检测软件中存在的安全缺陷和隐患, 提出了一种软件安全建模与检测技术层次融合安全建模与检测技术。该技术采用多点建模技术, 通过结合抽象建模、应用建模和数据建模等机制来实现对安全特征的描述。此外该技术利用表示层、应用层等不同抽象层次的建模信息, 通过自动机与模型合成技术来构建安全特征模型。后结合基于应用切片技术对软件中的安全缺陷与隐患进行检测。该技术克服了常规安全建模与检测中存在的缺点, 可以有效表示和检测各种安全特征, 提高了安全模型的表达力、复用性和适用性, 降低了安全检测的复杂度。

  软件安全问题随着Internet的飞速发展越来越引起人们的关注。多数软件安全问题来源于软件自身,有的问题是由于软件安全功能不够完善,或多或少存在着不安全的设计,有的问题则是人为蓄意设计的安全漏洞。软件安全检测技术的主要作用是检测、分析软件或软件设计中存在的这些安全问题,从而指导软件进行安全性能改善。在安全检测的过程中需要解决两个问题:①软件安全缺陷与隐患的表示即软件安全建模;②软件安全缺陷与隐患的检测即基于该建模技术的安全检测。

  2.1.1 安全建模

  软件安全建模的主要目的是为了表示软件中存在的安全缺陷与隐患即软件安全特征。在安全建模中需要解决安全特征模型的复用性、适用性及表达力等几个方面的问题,在这些方面常规模型存在模型复用性低、适用范围小和表达力差的缺点。为了有效解决这些问题与缺点,这里提出层次融合建模技术,该建模技术的基本思想是建立多抽象层次、多组成成分的安全模型来表示软件安全特征。