当前位置:文档之家› 软件安全缺陷检测技术最新研究进展综述

软件安全缺陷检测技术最新研究进展综述

软件安全缺陷检测技术最新研究进展综述Abstract:Software security detection has become a very important work in the software industry. Fatal security vulnerabilities are caused by undefined behaviors of C/C++ language used in Safety-Critical software. This paper will give out eight kinds of new technology about the software security detection based on eight cutting-edge papers.design.摘要:软件安全缺陷检测已经成为软件行业非常重要的一项工作。

安全关键软件设计使用的C/C++语言含有大量未定义行为,使用不当可能产生重大安全隐患。

本文将根据八篇前沿论文,总结提出八种比较新的软件安全缺陷检测技术和算法。

1、基于XML的软件安全检测[1]软件静态检测是从软件代码和结构中找出安全缺陷的重要手段。

从安全规则的角度,提出了基于XML(eXtensible Markup Language)中间模型的静态检测方法。

该方法将C/C++源代码解释为XML中间模型,将安全规则转化为缺陷模式,利用Xquery 查询表达式对软件安全缺陷进行定位。

基于该方法的原型系统检验结果表明:该方法能够有效地检测出违反安全规则的软件缺陷,并具有安全规则可定制的特点。

航天型号软件等安全关键(Safety-Critical)软件中广泛使用的C/C++语言并不是一种安全编程语言,一个重要的原因在于其标准中存在大量未定义行为和不安全用法,使用不当将产生严重的安全隐患。

当前,避免这些安全隐患的通常做法是制定针对C/C++语言编程的安全子集,在编写代码阶段加以限制和规范。

同时,研究开发代码静态检测工具,通过对源代码的分析自动检测安全隐患,既能提高检测效率,也可降低检测成本。

目前,国外在C/C++语言安全子集和代码静态检测方面已进行了大量的研究,定义了许多有代表性的安全子集,并设计了基于安全子集的代码静态检测工具,应用在航空、医疗以及运输[2] 等安全关键领域。

例如:MISRA(Motor Industry Software Reliability Association)C/C++[3]是欧洲汽车工业软件可靠性联合会针对C/C++语言所制定的安全子集。

但是,代码静态检测工具的发展却不尽如人意,例如,ITS4、Split[4-6]等代码检测工具误报率较高,且无法实现规则定制;国内相关领域研究人员在嵌入式C语言安全子集研究上也有突破性进展,例如,《GJB 5369-2005 航天型号软件C 语言安全子集》就是其中的代表,但长久以来一直缺少支持此安全子集的代码静态检测工具。

对航天型号软件安全性标准《GJB 5369-2005 航天型号软件C语言安全子集》进行了深入研究,提出了相应的代码静态检测方法。

通过对源代码进行语法制导的解析,利用XML(eXtensible Markup Language)在数据存储和数据交换中的优势,将源代码转化成XML中间模型。

把安全子集中的每一条规则抽象为缺陷模式,使用Xquery 查询语言将缺陷模式转换成Xquery 表达式,利用Xquery 表达式查询和定位XML 中间模型中与缺陷模式匹配的节点,通过缺陷重定向机制完成缺陷从XML 中间模型到源文件中的精确定位。

基于此方法开发的自动化检测工具CSV的实验表明,该方法能够有效地检测出违反安全子集的所有软件缺陷。

通过系统提供的规则定制接口,也实现了安全规则的自由配置与扩展,增强了系统的实用性。

2、软件安全性测试方法研究[2]安全性是软件质量的一个重要属性。

传统上国内学者较多关注软件的失效安全性,即软件运行不引起系统事故的能力,强调的是一类安全关键软件的安全性失效可能造成重大人员伤亡、财产损失、环境污染等危险事故。

对失效安全性的度量主要有建立在可靠性理论基础上的安全度、失效度、平均事故间隔时间、软件事故率等。

对于失效安全性测试,常用的测试方法目前有基于故障树的测试和基于最小割集的测试。

对保密安全性,ISO9126质量模型将其定义为与防止对程序和数据进行非法存取的预防能力有关的质量属性。

软件安全性是软件在受到恶意攻击时仍提供所需功能的能力。

对于保密安全性测试,目前主要有代码走读与审查、静态分析、形式化方法、故障注入、基于模型的测试、基于属性的测试、语法测试、模糊测试等测试方法。

本文将重点关注安全性测试的主要方法、技术及工具。

2.1 软件测试方法软件测试方法研究以最少的测试数据来测试出程序中更多的潜在错误,如何测试得彻底,如何设计测试数据是测试的关键技术。

从是否需要运行被测软件的角度,可分为静态测试和动态测试;从是否针对系统的内部结构和具体实现算法的角度来看,可分为白盒测试和黑盒测试。

2.1.1 静态测试静态测试在对软件代码进行分析、检查和测试时不实际运行被测试的程序,同时这种测试方法还可以用于对各种软件文档进行测试。

例如对需求文档的验证和确认,系统设计文档的检查以及程序代码的检查。

2.1.2 动态测试动态测试就是通过运行软件来检验软件的动态行为和运行结果的正确性。

动态测试的主要特征是计算机必须真正运行被测试的程序,通过输入测试数据,对其运行情况进行分析。

2.1.3 黑盒测试(功能测试)在黑盒测试或功能测试中,测试条件主要是基于程序或者系统的功能,测试人员不需要了解程序是如何运作,只是关注程序的功能是否与规格说明书所描述的一致。

2.1.4 白盒测试(结构测试)在此项测试中,测试条件是基于程序逻辑,测试人员查看程序或者系统的内部机构。

测试人员需要了解内部程序结构和逻辑,关注生产出来的代码,而不需理会其功能是否与说明书上的功能相同。

3、软件安全建模[3]为有效表示和检测软件中存在的安全缺陷和隐患, 提出了一种软件安全建模与检测技术层次融合安全建模与检测技术。

该技术采用多点建模技术, 通过结合抽象建模、应用建模和数据建模等机制来实现对安全特征的描述。

此外该技术利用表示层、应用层等不同抽象层次的建模信息, 通过自动机与模型合成技术来构建安全特征模型。

最后结合基于应用切片技术对软件中的安全缺陷与隐患进行检测。

该技术克服了常规安全建模与检测中存在的缺点, 可以有效表示和检测各种安全特征, 提高了安全模型的表达力、复用性和适用性, 降低了安全检测的复杂度。

软件安全问题随着Inte rnet的飞速发展越来越引起人们的关注。

多数软件安全问题来源于软件自身, 有的问题是由于软件安全功能不够完善, 或多或少存在着不安全的设计,有的问题则是人为蓄意设计的安全漏洞。

软件安全检测技术的主要作用就是检测、分析软件或软件设计中存在的这些安全问题, 从而指导软件进行安全性能改善。

在安全检测的过程中需要解决两个问题: ①软件安全缺陷与隐患的表示即软件安全建模②软件安全缺陷与隐患的检测即基于该建模技术的安全检测。

3.1、安全建模软件安全建模的主要目的是为了表示软件中存在的安全缺陷与隐患即软件安全特征。

在安全建模中需要解决安全特征模型的复用性、适用性及表达力等几个方面的问题, 在这些方面常规模型存在模型复用性低、适用范围小和表达力差的缺点。

为了有效解决这些问题与缺点, 这里提出层次融合建模技术, 该建模技术的基本思想是建立多抽象层次、多组成成分的安全模型来表示软件安全特征。

在安全建模中, 首先把安全模型分成三个不同的组成部分: 抽象模型m、面向应用的模型m’和数据模型m’’。

这三种模型对应不同抽象层次的安全特征, 其中抽象模型m 为通用模型; m’为面向应用的模型, m’与m 存在关系: m’→ m, m 与m’为1:n关系, m’是针对不同的环境而设计的; 除了上述两种模型还有一种数据安全模型m’’, 它直接反映数据或变量的约束和条件。

通过三种不同模型的结合可以表示各类安全特征, 这样就克服了常规安全模型表达力不足的缺点。

此外为了提高模型的复用性与适用性, 该建模技术把模型分割成三个层次进行构建(图1), 即应用层、抽象层、表示层。

其中assml( Abstract Sub Security Model) 表示抽象安全模型m, 主要针对软件需求等前期开发阶段而设计的, 此模型不含应用相关的信息, 用于较高层次安全特征的表示与检测, 属于抽象层。

由于抽象层独立于应用, 它具有较强的复用性, 这是该模型与其它技术的主要区别之一。

为了增加模型的应用范围和可扩性在建模中又引入了应用层, 在应用层中包括cssml( Concrete Sub Security Model) 和dssml( Data Sub Security Model)。

其中cssm l用来表示面向应用的安全模型m’ , 它与抽象安全模型相反, 是针对不同的应用而设计, 用于表示或检测较低层次安全特征, 它是抽象安全模型assm l的实例, 它主要用在详细设计和编码阶段。

dssm l表示数据安全模型m’’ , 它主要针对编码阶段中的数据或逻辑安全特征而设计, 它所反映的问题一般是最低级的数据或逻辑问题。

最底层的sm l ( Security Model) 表示安全模型的模式说明, 它是一种全局安全模型, 用于说明各个模型之间的关系和关键状态, sm l属于表示层。

图1 安全模型的层次3.2、基于模型的安检及关键技术在安全模型建立后, 接着要进行软件安全性检测与分析。

安全检测所面临的一个重要问题是如何对程序进行精简减小安全检测的范围与路径。

4、一种创新的计算机入侵检测技术[4]计算机安全的目标是保证信息系统的保密性、完整性和可用性. 计算机安全十分复杂,由于配置错误和软件缺陷的原因,使得从底层操作系统到上层应用程序,从通信基础设施到网络应用服务,从系统配置管理到用户操作都有可能存在各种安全隐患. 配置错误,即没有正确定义访问控制规则,使入侵者有机可乘,这种错误通常由供应商和系统管理员产生. 软件缺陷,即软件编程中出现的错误. 软件缺陷有两种,一种是基本软件缺陷,即与安全有关的软件错误;另一种是任何与安全无关的程序中存在的软件缺陷,它可能会影响到系统的安全性. 配置和软件错误造成了不断有系统和应用软件漏洞被发现,不断有攻击被报道,供应商推出的新版本和补丁不断又带入新的漏洞,形成了恶性循环. 尽管广泛应用了各种安全技术和产品,如强有力的识别/ 验证系统、更好的访问控制工具、改进了的防火墙和密码系统等,仍然会遭到入侵者的攻击. 因此我们不得不承认,现有安全系统是不完备的,需要进一步引入入侵检测技术. 入侵检测不能阻止入侵者通过安全漏洞进行的攻击,但它能够事先寻找漏洞,并且在非法入侵者攻击系统时,能及时将它们捕获,引入入侵检测技术是目前保证计算机安全的必要手段. 5、软件安全缺陷自动测试[5]随着现代化网络信息系统的发展,以软件系统为核心的计算机应用已经渗透到各行各业,在工业、农业、国防和人们的日常生活中起着越来越重要的作用。

相关主题