软件安全漏洞检测之欧阳育创编.docx
- 文档编号:3407569
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:32
- 大小:1.20MB
软件安全漏洞检测之欧阳育创编.docx
《软件安全漏洞检测之欧阳育创编.docx》由会员分享,可在线阅读,更多相关《软件安全漏洞检测之欧阳育创编.docx(32页珍藏版)》请在冰豆网上搜索。
软件安全漏洞检测之欧阳育创编
学年论文
时间:
2021.02.04
创作:
欧阳育
(文献检索及专业写作常识
2015-2016第二学期)
题 目:
软件安全漏洞检测
作 者:
熊文丽
所在学院:
信息科学与工程学院
专业年级:
信息安全14-1
指导教师:
张琳琳
职 称:
副教授
2016年5月25日
摘要
互联网的全球性普及和发展,使得计算机网络与人们的生活紧密相关,信息安全逐渐成为信息技术的核心问题,软件漏洞检测是信息安全的重要组成部分,漏洞带来的危害日益严重,恶意攻击者可以利用软件漏洞来访问未授权的资源,导致敏感数据被破坏,甚至威胁到整个信息安全系统。
计算机软件安全漏洞,计算机系统的一组特性,这些特性一旦被某些恶意的主体利用,通过已授权的手段,来获取对计算机资源的未授权访问,或者通过其他办法对计算机的系统造成损害。
首先定义了软件漏洞和软件漏洞分析技术,在此基础上,提出了软件漏洞分析技术体系,并对现有技术进行了分类和对比,归纳出了该领域的科学问题、技术难题和工程问题,最后展望了软件漏洞分析技术的未来发展。
关键词:
软件安全,漏洞检测,信息安全
ABSTRACT
GlobalpopularityanddevelopmentoftheInternetsothatthecomputernetworkiscloselyrelatedtopeople'slives,informationsecurityhasgraduallybecomethecoreofinformationtechnology,software,informationsecurityvulnerabilitydetectionisanimportantpartofthegrowingvulnerabilityharm,maliciousattackersYoucantakeadvantageofsoftwarevulnerabilitiestoaccessunauthorizedresources,resultingindestructionofsensitivedata,evenathreattotheentireinformationsecuritysystem.Asetofcharacteristicsofcomputersoftwaresecurityvulnerabilityofcomputersystems,thesefeaturesonceexploitedbysomemaliciousbodythroughauthorizedmeanstogainunauthorizedaccesstocomputerresources,orthroughothermeanscausedamagetocomputersystems.
First,thedefinitionofsoftwarevulnerabilitiesandvulnerabilityanalysissoftwaretechnology,onthisbasis,theproposedsoftwarevulnerabilityanalysistechnologysystem,andthepriorartareclassifiedandcontrast,sumsuptheprobleminthefieldofscientific,technicalproblemsandengineeringproblems,Finally,theprospectoffuturedevelopmentofthesoftwarevulnerabilityanalysistechnology.
Keywords:
softwaresecurity;vulnerabilitydetection;informationsecurity
1绪论
1.1背景
计算机技术的发展促进了信息全球化的进程,提高了计算机的普及,人类的各个领域都已经离不开计算机应用。
然而,计算机软件安全漏洞对人类的生产活动是一个巨大的隐患。
即使是防火墙的设置,入侵检测技术和杀毒软件也不能避免计算机软件自身漏洞带来的威胁[1]。
这些漏洞的存在直接给多数网络黑客侵入的机会,直接给计算机软件使用者带来巨大的信息安全威胁。
如今计算机更新速度异常迅速,那些漏洞的出现频率也越来越高。
所以,就必须不断地提升计算机软件当中的安全漏洞检测技术,这项技术成为寻找和弥补漏洞的主要方式,也是保障计算机安全、稳定运行的关键[2]。
1.2国内外研究现状
传统的漏洞发掘一般是安全分析人员通过阅读源代码或者对软件进行反汇编分析,在理解软件工作原理的情况下,通过手工对目标软件进行分析,从而发现软件中的安全漏洞。
随着软件安全性需求的不断增强,这种手工作坊式的方法难以满足快速和准确地找出软件漏洞的要求。
在这种形势下,利用自动化方法或者半自动化的辅助工具发现漏洞成为研究的重点。
目前利用自动化方法发现漏洞基本上可以归为两类,一类是基于软件测试中的黑盒测试原理,这类方法主要针对软件提供的接口,而不是针对软件的实现进行测试。
另外一类是使用编译技术,对软件的源代码进行扫描,针对不安全的库函数使用以及内存操作进行语义上的检查,从而发现安全漏洞。
[3]
上个世纪七十年代中期,美国南加州大学对操作系统保护错误的安全缺陷研究PA(ProtectionAnalysisProject)计划是第一项与软件漏洞相关的研究,这个研究开启了对软件安全漏洞及其脆弱性方面的研究。
随后,如美国的国家标准局、联邦调查局、国防部等国家权力机关,Stanford、Harvard、Purdue等著名高校以及Microsoft、IBM等国际性的大公司等也加入了这个研究方向。
该领域不断出现创新研究成果,包括RISOS计划、SDC渗透分析方法、BrianMarick的软件漏洞分析、Landwher的漏洞分类以及Purdue的COAST实验室的计算机漏洞研究。
2003年,美国国防部收到美国国家科学院提交的报告《用于反恐中的信息技术报告》。
该报告评估了项目“编写更少漏洞的代码”的研究,而这个研究被定义为“高”迫切性和“非常困难”的难度,而该项目的关键即为“软件安全漏洞测试”。
由此可见,软件安全的重要性和迫切性是世界的共识。
而这方面的研究力度也在不断加大,随后几年出现了很多令人鼓舞的成果。
(1)模型检查是一种软件安全漏洞测试形式化方法。
该方法因为长期无法解决状态爆炸的问题导致无法对超过五千行的数据进行有效检测。
2005年,Bell实验室)发布的VeriSofl测试软件,弥补了上述缺陷,实现了对超过五千行的C/C++源程序的有效测试。
尽管该方法存在一定的漏报率,但它见证了形式化方法取得的进展。
(2)Purdue在软件漏洞检测方面一直有突出的贡献。
其计算机系的CERIAS在2005年的技术报告中提出将预测的方法和概率统计应用到软件安全中,该方法在一定程度上有希望解决软件漏洞测试中状态组合爆炸的问题。
(3)2005年,Purdue教育和信息安全研究中心提出进程完整性的测试方法。
这种方法在现有入侵检测方法的基础上,提出一种脆弱性检测机制。
它采用系统调用的进程入侵检测方法把程序的缺陷按照错误种类分成有限的数目并得到精确解决错误种类的方法,这些方法是以组件方式产生并与目标错误种类的特性进行了严格的匹配,能够找出为多种错误种类的错误特性来保证检测方法的覆盖率。
(4)2006年,Purdue计算机系的CERIAS在技术报告中将数据挖掘与静态分析与相结合的方法用于软件漏洞检测分析工具FaultMiner中,应用FaultMiner测试四个常用的软件,发现了的软件安全漏洞中有两个是新的,取得了很显著的效果。
与国外的研究状况相比较,漏洞挖掘方面的研究在国内起步较晚。
2000年起,国内的很多高校和科研机构开始重视软件缺陷和脆弱性等方面的研究工作。
取得成果并投入较大的有国防科技大学、装甲兵工程学院、解放军电子工程学院等军方院校以及南京大学、东南大学、中国科学技术大学、北京理工大学等地方院校。
其中大部分研究是在已经公开的漏洞信息的基础上进行的并且其漏洞信息数据库也基本来自国外开放的信息安全研究机构。
在软件漏洞检测领域,很多国内研究者已经取得了相当的成果,朱扬勇等人将序列相似性查询技术用于软件漏洞分析中,王考杰等人提出了一种数据流相似性查询算法,在子窗口采用小波分解和系数约简。
汤春蕾等人提出了一种适用于数值型序列的匹配算法,利用了区间的单调趋势融合策略实现匹配算法的查询。
通过分析已有软件漏洞检测方法,在数据挖掘的视角对漏洞信息加以分析使用,对漏洞数据库中信息进行整理形成漏洞知识库,为快速检测分析漏洞提供了前提依据。
胡昌振等人在此基础上提出建立了基于序列模式挖掘的软件漏洞检测模型和方法,降低漏洞检测漏报率。
与此同时,国内也有一些模式匹配工具,如FlawFinde等,它将漏洞缺陷进行分级匹配,但是它不能对源代码和注释进行区分,误报率较高,ITS4是基于语法分析的工具,针对FlawFinde的缺点,通过对源代码进行语法分析实现了漏洞模式的匹配。
漏洞挖掘辅助工具的比较有代表的公司有FortifySoftware、CoveritySoftware和MuDynamics,它们都是2000年以后新兴的公司。
此外,微软的VisualStudio以及IBM的Rational产品线也在提高漏洞分析能力。
Forify公司是2003年成立的,主要关注软件源代码安全保障和审计,产品包括静态源代码分析、动态程序跟踪分析、动态实时分析防护以及关联分析等。
Coverity公司成立于2002年,源于斯坦福计算机系实验室的MC项目,专注于软件安全分析,有着MC、FiSC、EXE、KLEE等著名漏洞挖掘学术成果。
MuDynamics成立于2005年,专注于通过错误注入测试网络服务的可用性、可靠性和安全性,是目前最好的商业化错误注入工具提供商。
总体来看,虽然国内已经有少数的信息安全公司在发现漏洞的实践工作中取得了相当的成果,但该研究方向的理论体系和技术体系并没有真正的建立和完善起来。
在软件漏洞和脆弱性方面,我国的研究基础还是比较薄弱。
[4]
2软件安全漏洞概述
2.1漏洞的定义
漏洞是软件、硬件、协议实施中的纰漏,也是系统安全层面的缺失处,让未获取授权认可的攻击方对系统探访、攻击、损害[5]。
通常来说,安全漏洞存在于计算机的软件和硬件系统中。
基于访问控制的、基于状态的和基于模糊概念的定义是三种经常可以见到的定义方式。
(1)基于访问控制的定义计算机系统的安全漏洞产生的原因是,通过对控制矩阵进行访问,实现了主体对于对象的访问,然而对于控制矩阵的访问和计算机系统的操作有时会产生冲突,这时就比较容易产生计算机系统安全漏洞。
(2)基于状态的定义通过对一些构成计算机系统的实体部件进行状态描述可以组成计算机系统,这些组成计算机系统的部件状态受到计算机系统的影响。
组成计算机系统的部件状态可以分为授权状态和非授权状态两种,它们都可以从部件的初始状态通过不断的进行部件状态改变得到。
针对具有漏洞的非授权状态,我们可以对其进行状态的转变,使其转变为非授权状态。
对一个系统进行攻击的过程就是系统的状态从最初的授权状态,经过一系列的状态变换,达到非授权状态的过程。
综合来看,针对计算机系统进行的攻击开始于系统的漏洞状态。
(3)基于模糊概念的定义人们把针对计算机系统的管理、控制和安全策略相关的操作中存在的不足成为计算机系统安全漏洞,可以利用计算机系统的这些安全漏洞对其进行攻击,同时漏洞也包括组成计算机系统的软硬件设施和技术、程序等方面的不足。
计算机系统安全漏洞是否对系统造成损害的标准是安全漏洞有没有被黑客利用,针对系统漏洞对系统进行攻击[6]。
2.2计算机软件所面临的主要安全威胁
1)软件质量问题计算机系统主要由硬件系统和软件系统组成,硬件系统主要是指计算计算机的键盘、鼠标等人工操作的系统,软件系统主要指的是计算机中的程序,它的主要功能是识别用户指令,并为用户提供所需服务,作为计算机系统的重要组成部分,软件系统的质量对计算机的整体质量具有十分关键的影响,由于一些因素的影响,计算机软件在开发过程中难免会存在一些质量问题,这些质量问题也就是安全漏洞。
目前,由软件质量问题而引发的用户信息泄露的事故不计其数,这对用户的生活造成了极大的不良影响。
2)软件跟踪随着计算机软件技术的不断提高,软件跟踪技术水平也有所上升,目前,软件跟踪技术主要可分为静态跟踪技术和动态跟踪技术两种,这两种技术都是利用跟踪软件系统中所提供的断电中断和单步中断实现的。
从性质上看,软件跟踪属于一种侵害用户隐私的不合法行为,它会窃取用户计算机软件中的源码,并破译一些经过加密处理的程序。
3)非法复制计算机软件与硬件相比需要投入更多的资金,其在开发的过程中不仅需要专业性的优秀人才,同时还需要对软件的版权进行维护,然而计算机软件本身具有可复制性,这就给产品版权的维护带来了困难,一些非法盗用软件版权的行为给企业带来了巨大的经济损失,同时也对用户信息造成了巨大的安全威胁,一些用户由于不清楚计算机软件正版与盗版的区别,在购买计算机的过程中往往会被一些非法盗用版权的卖家欺骗,最终导致其信息泄露的风险增加,非法复制软件给我国的法律、税收等造成了极大的消极影响。
[7]
2.3漏洞的分类
针对代码层次将软件漏洞分为8大类型[4]。
分别为输入验证和表示相关的漏洞、因API误用相关的漏洞、安全特征相关的漏洞、时间和状态相关的漏洞、错误相关的漏洞、编码质量相关的漏洞、封装相关的漏洞、运行环境相关的漏洞。
2.4漏洞的特征
在计算机系统中,无论是操作系统,还是在操作系统之上运行的各种软件,都存在着安全漏洞。
对于操作系统来说,漏洞具有如下特征:
(1)属于操作系统本身存在的逻辑错误这种错误在编写操作系统时并不易被发现,但随着操作系统的推广和普遍使用,就会被逐渐发现。
(2)此类漏洞普遍和时间紧密相关漏洞是长期存在的,操作系统使用的时间越久,被发现的漏洞就越多。
漏洞一旦被发现,就会出现相应补丁来弥补,但是随之而来也会出现新的漏洞。
(3)系统漏洞也是系统当前的一种安全状态系统漏洞的存在并不一定会直接对系统造成损害,只有当它们被恶意的人员利用后,才会对系统及其合法用户产生不良甚至严重的影响,使合法用户蒙受损失。
[6]
2.5常见的计算机软件安全漏洞
计算机软件的开发是一个漫长的过程,在开发的过程中,难免会出现一些安全漏洞,这些漏洞给一些计算机黑客提供了契机,他们通过制造一些不同于正常软件的程序,并将这些程序通过安全漏洞注入用户的电脑之中,最终对用户信息造成损害,这些具有攻击性的程序通常被称作计算机病毒,有的病毒具有很长的潜伏期,刚开始很难发现,但是经过一段时间后,随着病毒的不断蔓延,严重的会导致计算机系统的崩溃。
当前,大多数用户的计算机都安装了防火墙或杀毒软件,但这并不能从根本上防治病毒的入侵,主要还是应该对计算机安全漏洞进行防护。
常见的计算机安全漏洞主要有NET-SNMP,ZLIB,JBOSS应用服务器,LIBTIFF开源软件库和GERONIMO2.0。
第一种安全漏洞主要分布在NET或SNMP的协议文件中,其对文件造成的安全威胁是非常大的,第二种安全漏洞是一种经过压缩处理的数据软件库,该软件库中有一条超长的代码。
第三种安全漏洞主要存在于计算机的目录中,从性质上看,第四种安全漏洞属于图像软件,该图像软件中含有读写标签,最后一种安全漏洞的攻击性是最强的,它可以随意进入到非法破译代码中,并绕过身份识别的环节,直接得到用户信息的访问资格。
以上五种计算机软件安全漏洞是比较常见的,但是对这些安全漏洞的防护却没有得到高度重视,往往是在发生问题之后,才开始对安全漏洞进行检测和修复,但是对用户信息造成的损害已经无法弥补了,因此,计算机用户应在平常的使用过程中做好计算机软件安全漏洞的检测工作。
[7]
依据软件漏洞产生原因和危险级别,常见软件漏洞类型包括有以下六种。
第一种是内存泄露漏洞。
内存泄露是常见的问题,之前分配的内存不需要或无法访问时,但是却没有或者无法释放掉,导致占用内存,长期积累出现内存泄露问题。
这种问题会导致系统运行缓慢,甚至瘫痪。
第二种是格式化字符串漏洞。
根据格式化字符串函数的参数提供的控制信息,将目标数据转化为字符串。
如果由用户输入这些参数,那么攻击者就可以制造对自己有利的参数来控制系统等。
第三种是缓冲区溢出漏洞。
缓冲区溢出漏洞引起过很多严重的安全性问题,前面提到过的“冲击波”等蠕虫病毒就是利用缓冲区溢出漏洞对系统进行攻击和破坏的。
缓冲区溢出漏洞的原理非常简单,是程序本身没有进行边界检查而引起的数组或指针的越界访问。
当数据被程序读入或复制到缓冲区时,在没有检查缓冲区是否有足够空间的情况下,如果数据长度大于目标缓冲区的存储空间,就产生了缓冲区溢出问题。
第四种是远程代码执行漏洞。
它是可以通过网络发起的攻击,通常由不正确的系统层代码错误所导致。
这类漏洞在软件测试的过程中很难被发现,攻击者常常利用这种漏洞操纵他人的电脑,这类漏洞也很容易引入蠕虫的攻击。
第五种是SQL注入漏洞。
可以用来获取数据库中的敏感信息或者利用数据库特性添加用户取得系统最高权限,导致信息的更改、删除、窃取,甚至进一步进行恶意代码的嵌入,造成危害等。
最后一种是跨站脚本漏洞。
不同于SQL注入漏洞攻击数据库服务器的方式,利用跨站脚本漏洞注入的恶意代码是运行在用户电脑的浏览器中,是WEB应用程序将数据输出到网页时出现的问题,可以导致恶意数据显示在页面中,尤其是向网页内容中写入恶意脚本或HTML代码,所以,跨站脚本漏洞也叫HTML注入漏洞。
2.6软件安全漏洞产生的原因
软件安全漏洞的产生由多方面原因引起:
(1)受编程设计人员的能力、经验和安全技术所限,操作系统及各种应用程序在设计中出现逻辑错误是不可避免的,程序中难免会有不足之处。
而且编程人员不可能考虑到各种可能出现的情况,有些错误和漏洞就是由于疏忽而引起的。
(2)由于对程序内部操作的不了解,或者是没有足够的重视,程序员总是假定程序会在任何环境中正常的运行。
一旦程序员的假设得不到满足,程序内部的相互作用和安全策略产生冲突时,便形成了安全漏洞。
数据处理中出现的错误,例如对变量赋值比数值计算更容易出现逻辑错误。
(3)漏洞和具体的系统环境密切相关。
在不同种类的软、硬件设备中,同种设备的不同版本之间,由不同设备构成的不同系统之间,以及同种系统在不同的设置条件下,都会存在各自不同的安全漏洞问题。
(4)漏洞问题与时间紧密相关。
一个系统从发布的那一天起,随着用户的使用,系统中存在漏洞会被不断地暴露出来,也会不断被相应的补丁软件修补,或在随后发布的新版系统中纠正,而在系统中旧的漏洞被纠正的同时,往往也会引入一些新的漏洞和错误。
因而随着时间的推移,旧的漏洞会不断消失,新的漏洞会不断出现,漏洞问题会长期存在。
[1,4]
3软件安全漏洞检测方法
如今计算机软件安全漏洞的检测技术有了一定程度的发展,目前主要有三大检测方法:
静态分析、动态检测和混合检测。
3.1静态分析
静态安全检测主要注重对系统内部的安全性,其和漏洞之间存在许多共同的特点,这些特点本身具有一定的联系。
目前对于计算机漏洞的明确划分主要分为内存性漏洞和安全性漏洞。
其中安全性漏洞检测主要注重对对数据流的误差,因此在很大程度上都是由错误的内存形态直接形成。
而内存性漏洞则对数据本身的类别和准确性更加的重视。
所以,这种漏洞的检查技术主要是在其存储空间当中构建相应的模型,对程序的代码进行静态扫描,对包含的关键句进行详细深入的分析。
并充分结合所设置的漏洞特性和标准来进行系统的全面检测,对于语法的分析,最早都是采用静态分析法,也即是检查响应语法,并以此将系统当中的程序划分为多个不同语句,并将其直接和数据库进行有效的对比。
一旦发现其中存在任何的疑问,则直接做出自身详细和仔细的判断,最后按照相应标准进行检测的全过程。
[2]
静态检测技术的研究目标是目标程序源代码,其采用的方法主要是分析和审计,目的是判断目标程序源代码的健壮性如何,是否有可能导致程序运行不稳定或者导致程序出现重大异常的可能。
静态检测技术的主要指标来源是事先研究生成的规则库,对目标程序源代码中存在的可疑模块、过程或函数在规则库中查找匹配模型,如果找到,说明有安全隐患;否则,还需进一步研究,如果是安全隐患就需要对规则库进行扩充完善。
手工分析和分析工具是静态检测技术两大要素,静态检测主要是对目标源代码进行分析,找出其中的安全隐患。
静态分析对程序中不安全函数调用有很好的检测效果。
静态检测技术的本旨是建立程序的一个状态模型(规则库),然后通过静态分析工具获取的信息,利用状态转换来进行漏洞检测。
其检测技术主要包括变异语技术、类型推断、程序评注、约束解算器、元编译类型检查等。
[8]
图1静态过程分析示意分析
(1)变异语技术
该安全漏洞检测技术主要利用的是C语言安全程序编译技术,这种技术能对软件的源代码和二进制代码进行检测,从而发现其中的错误,在检测的过程中,要利用到指针算术的计算公式,对软件中的不安全因素进行转换,从而限制不安全操作的进行,它的主要作用是保证计算机使用过程中的安全。
[7]
(2)类型推断技术
该技术与其他技术相比具有效率高、定位准确的优势。
因此,在一些大型计算机软件安全漏洞的检测中比较适用。
然而,这种技术的主要缺点在于其兼容性并不强,对于一些小型软件的安全漏洞检测并不适用,采用该技术进行检测,需要对软件进行安全约束,可采用特殊的指针数据或用户直接输入数据的手段。
[7]
(3)程序评注技术
该技术是建立在目标程序源代码的基础之上的,它采用注释的方法,不会在源代码中添加新的程序,而且也不会影响程序的兼容性,从使用时间上来看,该技术在我国的应用时间并不长,它是一种全新的计算机软件安全漏洞防护技术,从组成成分上来看,该技术中包含了多种技术类型,其中主要有网络通信技术、分析技术和统计技术,从功能上看,这种技术能对非法入侵计算机软件的病毒进行实时监控,从而防止用户信息遭到破坏。
[7]
(4)约束解算器技术
顾名思义,该技术主要利用的是对目标程序进行约束和解算来实现安全漏洞防护的目的,在实际操作的过程中,该技术对目标程序代码影响很小,这是其主要的优点,但是,这种技术的明显缺陷在于对漏洞定位的准确度不高,在检测漏洞的过程中经常会出现错误,导致程序员的工作量大幅递增,由于工作量的增大,操作效率也必然会降低,最终影响到计算机软件安全漏洞防护的时效性。
[7]
(5)元编译技术
这种技术是日常生活中比较常用的计算机软件安全漏洞检测技术,从性质上看,其属于程序安全属性的检测技术,在监测的过程中,首先要对程序代码的安全性进行辨识,这就对程序员的综合素质提出了要求,进行监测工作的程序员必须具备专业的检测操作技能,同时还必须具备全面的程序代码知识,在确认程序代码的安全性之后,应建立科学的编译扩展,此项操作主要是为后续的建模执行提供方便,在建模工作执行完毕后,安全漏洞就能被检测出来了,该技术的主要优点是操作简单、准确度高。
此外,该技术在使用的过程中不会对语言特征造成改变,有的安全漏洞检测技术会造成语言特征的扩展,而这种技术却可以规避这一缺陷,相比之下,其实用性是很高的。
[7]
3.2动态检测
动态检测技术的主要原理是对目标程序运行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 安全漏洞 检测 欧阳 创编
![提示](https://static.bdocx.com/images/bang_tan.gif)