2009年12月第27卷第6期
西北工业大学学报
Journa l of North western Polyt echni ca l Uni ve rsity Dec.Vol .272009No .6
收稿日期22基金项目国家63高技术研究发展计划(6Z 6)资助
作者简介安喜锋(3),西北工业大学博士,现供职于中国人民银行西安分行,主要从事信息安全、计算机网络的研究。
基于相似特征的软件安全性缺陷检测算法
安喜锋1,2
(1.西北工业大学计算机学院,陕西西安 710072;2.中国人民银行西安分行,陕西西安 710075)
摘 要:文章在全面分析软件系统安全性缺陷的基础上,提出一种基于相似特征的软件安全性缺陷检测算法。针对C 语言源代码,应用实例推理C BR 的技术原理,通过检测算法将源代码的安全特征与已知安全性缺陷的实例特征进行相似匹配,通过相似度计算来判定软件代码是否存在安全性缺陷。实验表明该算法有效地提高了缺陷检测的准确性和效率,解决了现有基于规则匹配的检测方法不能
快速而准确地处理大型遗产软件和结构较为复杂的软件的问题。同时阈值的定义和选择也提高了检测算法的适应性和灵活性。
关 键 词:相似特征,安全性缺陷,实例推理,相似度,源代码分析
中图分类号:TP393108   文献标识码:A    文章编号:100022758(2009)0620890206  随着信息技术的发展和深入应用,软件系统变得越来越复杂和庞大,软件中的安全性缺陷被恶意代码利用的事件也急剧增加。从CERT /CC [1]
发布的1995~2007年经过分类的计算机系统安全缺陷统计报告可以看出,2007年发现的安全漏洞7236个。研究表明,所有的入侵都是因为软件系统本身存在漏洞,软件的安全性缺陷检测已成为世界各国关注的焦点。人们急需一种自动化检测方法来帮助软件开发和维护人员发现软件系统中的安全漏洞。对源程序进行逆向分析和安全审查的目的就是在程序设计阶段、在系统运行之前通过分析源代码发现潜在的安全缺陷[2]
。目前国内外做了很多这方面的研究,主要都集中在软件安全性的静态分析和漏洞发现上[2,3]
,而对于不知道软件结构的大型遗产软件,由于其结构复杂,在检测过程中不可能得到全面准确的软件逻辑结构,因此不能通过传统的规则匹配方法快速得到准确的安全性缺陷检测结果,存在着效率低、准
编写c语言的软件确率不够的问题。本文针对C 语言源代码,应用实例推理(Ca se 2based R ea s oning,CBR )的技术原理,采用基于相似特征的软件安全性缺陷检索算法,通过安全特征与相应的已知安全性缺陷的实例结构进行相似匹配,借用满足匹配条件的相似实例的安全性缺陷知识,可以有效地提高源
代码检测的效率和准确性。
1 软件系统的安全性缺陷分析
程序代码编写错误是软件安全性缺陷产生的重要原因之一。C 语言是一个开放性的语言,语法形
式自由,不同的人可以编写出实现同一功能而源代码形式多样的程序。使用C 语言能编写高性能程序,包括系统程序和应用程序,但是,C 语言与它的支持库本质上是不安全的,有意或无意的失误可能导致非常严重的安全漏洞,尤其是操作系统程序和网络程序。
为了安全性缺陷分析检测的需要,本文把C 语言中存在的主要安全性缺陷归纳为以下6类:
(1)缓冲区溢出
缓冲区溢出就是越过了数组边界进行读写。标准C 库提供的许多字符串操作[5]
如ge ts 、str cpy 、strcat 、s p rinf,它们本质上是不安全的。缓冲区溢出可能造成2个风险:①与该缓冲区相邻的内存空间很容易被覆盖,如果该空间存储的信息非常关键,那么可能造成非常严重的安全隐患;②通过覆盖运行栈中函数返回地址,攻击者可以引诱程序执行任意
:20081118
:8200AA0140:197-

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。