收藏 分销(赏)

软件安全漏洞检测.doc

上传人:二*** 文档编号:4742358 上传时间:2024-10-11 格式:DOC 页数:61 大小:1.68MB
下载 相关 举报
软件安全漏洞检测.doc_第1页
第1页 / 共61页
本文档共61页,全文阅读请下载到手机保存,查看更方便
资源描述
软件安全漏洞检测优质资料 (可以直接使用,可编辑 优质资料,欢迎下载) 学年论文 (文献检索及专业写作常识 2021-2021 第二学期) 题  目: 软件安全漏洞检测   作  者: 熊文丽    所在学院: 信息科学与工程学院 专业年级: 信息安全14-1    指导教师:张琳琳    职  称: 副教授   2021年5月25 日 摘要 互联网的全球性普及和发展,使得计算机网络与人们的生活紧密相关,信息安全逐渐成为信息技术的核心问题,软件漏洞检测是信息安全的重要组成部分,漏洞带来的危害日益严重,恶意攻击者可以利用软件漏洞来访问未授权的资源,导致敏感数据被破坏,甚至威胁到整个信息安全系统。计算机软件安全漏洞,计算机系统的一组特性,这些特性一旦被某些恶意的主体利用,通过已授权的手段,来获取对计算机资源的未授权访问,或者通过其他办法对计算机的系统造成损害。 首先定义了软件漏洞和软件漏洞分析技术,在此基础上,提出了软件漏洞分析技 术体系,并对现有技术进行了分类和对比,归纳出了该领域的科学问题、技术难题和工程问题,最后展望了软件漏洞分析技术的未来发展。 关键词:软件安全,漏洞检测,信息安全 ABSTRACT Global popularity and development of the Internet so that the computer network is closely related to people's lives, information security has gradually become the core of information technology, software, information security vulnerability detection is an important part of the growing vulnerability harm, malicious attackers You can take advantage of software vulnerabilities to access unauthorized resources, resulting in destruction of sensitive data, even a threat to the entire information security system. A set of characteristics of computer software security vulnerability of computer systems, these features once exploited by some malicious body through authorized means to gain unauthorized access to computer resources, or through other means cause damage to computer systems. First, the definition of software vulnerabilities and vulnerability analysis software technology, on this basis, the proposed software vulnerability analysis technology system, and the prior art are classified and contrast, sums up the problem in the field of scientific, technical problems and engineering problems, Finally, the prospect of future development of the software vulnerability analysis technology. Keywords: software security; vulnerability detection; information security 目录 1 绪论3 1.1 背景3 1.2国内外研究现状4 2 软件安全漏洞概述6 2.1漏洞的定义6 2.2 计算机软件所面临的主要安全威胁7 2.3 漏洞的分类7 2.4 漏洞的特征7 2.5 常见的计算机软件安全漏洞8 2.6 软件安全漏洞产生的原因9 3 软件安全漏洞检测方法10 3.1静态分析10 3.2动态检测12 3.3 混合检测技术13 4 软件漏洞分析技术15 4.1漏洞分析技术分类15 4.2软件架构分析15 4.3代码静态分析17 4.4 代码动态分析19 4.5 动静结合分析20 4.6漏洞定位20 5 软件漏洞分析中的关键性问题22 5.1 科学问题22 5.2技术难题23 5.3工程问题23 6 计算机软件漏洞检测技术的实践应用24 7 总结与未来展望25 致谢26 参考文献27 附录28 1 绪论 1.1 背景 计算机技术的发展促进了信息全球化的进程,提高了计算机的普及,人类的各个领域都已经离不开计算机应用。然而,计算机软件安全漏洞对人类的生产活动是一个巨大的隐患。即使是防火墙的设置,入侵检测技术和杀毒软件也不能避免计算机软件自身漏洞带来的威胁[1]。这些漏洞的存在直接给多数网络黑客侵入的机会,直接给计算机软件使用者带来巨大的信息安全威胁。如今计算机更新速度异常迅速,那些漏洞的出现频率也越来越高。所以,就必须不断地提升计算机软件当中的安全漏洞检测技术,这项技术成为寻找和弥补漏洞的主要方式,也是保障计算机安全、稳定运行的关键[2]。 1.2国内外研究现状 传统的漏洞发掘一般是安全分析人员通过阅读源代码或者对软件进行反汇编分析,在理解软件工作原理的情况下,通过手工对目标软件进行分析,从而发现软件中的安全漏洞。随着软件安全性需求的不断增强,这种手工作坊式的方法难以满足快速和准确地找出软件漏洞的要求。在这种形势下,利用自动化方法或者半自动化的辅助工具发现漏洞成为研究的重点。目前利用自动化方法发现漏洞基本上可以归为两类,一类是基于软件测试中的黑盒测试原理,这类方法主要针对软件提供的接口,而不是针对软件的实现进行测试。另外一类是使用编译技术,对软件的源代码进行扫描,针对不安全的库函数使用以及内存操作进行语义上的检查,从而发现安全漏洞。[3] 上个世纪七十年代中期,美国南加州大学对操作系统保护错误的安全缺陷研究PA( Protection Analysis Project)计划是第一项与软件漏洞相关的研究,这个研究开启了对软件安全漏洞及其脆弱性方面的研究。随后,如美国的国家标准局、联邦调查局、国防部等国家权力机关, Stanford、Harvard、Purdue 等著名高校以及 Microsoft、IBM 等国际性的大公司等也加入了这个研究方向。该领域不断出现创新研究成果,包括RISOS 计划、SDC渗透分析方法、Brian Marick 的软件漏洞分析、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的缺点,通过对源代码进行语法分析实现了漏洞模式的匹配。 漏洞挖掘辅助工具的比较有代表的公司有 Fortify Software、Coverity Software和Mu Dynamics,它们都是 2000年以后新兴的公司。此外,微软的 Visual Studio 以及IBM 的Rational产品线也在提高漏洞分析能力。Forify 公司是2003年成立的,主要关注软件源代码安全保障和审计,产品包括静态源代码分析、动态程序跟踪分析、动态实时分析防护以及关联分析等。Coverity 公司成立于2002年,源于斯坦福计算机系实验室的MC项目,专注于软件安全分析,有着 MC、FiSC、EXE、KLEE 等著名漏洞挖掘学术成果。Mu Dynamics成立于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动态检测 动态检测技术的主要原理是对目标程序运行时所使用的变量参数和申请的硬件资源空间进行监视,跟踪程序在运行中出现的异常进而确定目标程序是否存在漏洞的方法。 (1)非执行栈技术 内存的栈区即系统栈,系统栈由系统自动维护,用于实现高级语言中的函数调用。在调用中程序的变量、函数返回地址等均保存在栈中,使得攻击者可以通过篡改程序输入数据注入恶意代码实现攻击。栈溢出攻击是当且最流行的攻击方法之一。非执行堆与数据技术和非执行栈技术类似,设置程序运行时动态分配的堆区及程序初始化时分配的数据段均为不可执行,该技术和非执行栈技术结合可以更好地预防攻击事件发生。数据保护执行(DEP:Data Execution Prevention)就是非执行栈、堆和数据段技术的具体实现。[8] (2)非执行堆与数据技术 堆在运行使首先要进行初始化,对与该技术结合可以有效预防恶意代码的入侵,即对内存中恶意程序运行时禁止改程序的运行,但是该方案在处理和修改安全漏洞程序过于繁琐。该技术几乎可以完全消除内存中的安全漏洞,但是对无法对软件中的函数指针和参数进行检测和修改,同时存在兼容性问题。[10] (3)内存映射技术 内存映射技术是指通过使用映射代码页的方法,将代码页随机地址地映射到不同的内存地址,从而防止依靠跳转地址和内存覆盖开展的攻击。ASLR(Address Space Layout Randomization)就是Windows 系统采用的内存映射的安全保护技术。对于自定义的程序要开启ASLR也非常简单,现在许多的编译环境均增加的ALSR安全特性,如Visual Studio 2005 SP1增加了/ dynamic base Address链接选项。[8] (4)沙盒技术 沙盒技术在安全软件领域应用非常广泛,沙盒旨在创造一个运行存在潜在安全风险的应用程序的隔离环境,发现可疑行为后让程序继续运行,当发现的确是安全漏洞时才会终止。沙盒技术的实践应用流程是:让存在潜在安全风险应用程序的可疑行为在“沙盒”中充分表现,沙盒会记录其每个运行特征,当危险行为所有特征暴露后,沙盒会执行回滚机制,将攻击的痕迹和动作擦除,恢复系统到正常状态。[8] (5)安全共享库 某些计算机运行了安全性极差的共享库就会引发软件安全漏洞。共享库的安全度高可用对攻击方的损害行为很好的防预,而安全度低的共享库则易被损害。安全化的共享库是动态化的链接模式运作,在程序运作环节将多类安全度低、没安全性的函数运用予以拦截,并进行另外的测验,进而保证计算机软件整体的安全。[5] (6)程序解释技术 该技术主要是对某段程序执行监视的功能,并拥有对该程序进行强行检测的权限,但是该技术需要消耗大量的性能,需要进一步开发。例如程序检测器就是利用该技术原理进行设计,该设计不需要对计算机软件的内核程序进行修改,仅仅需要增加一个启动代码就可以实现等。[10] 3.3 混合检测技术 混合检测技术是综合利用静态检测技术和动态检测技术的检测特性,由于混合检测技术综合了静态检测技术和动态检测技术的优点,从程序源代码分析和目标程序运行状态检测两个方面着手开展工作,综合利用规则库和动态检测规则,根据程序动态状态检测结果和目标程序源代码静态分析结果进行程序安全隐患排查,所以混合检测技术相对静态检测技术和动态检测技术而言,检测的准确度相对较高。[8] (1)测试库技术 测试库技术主要用于检测软件运行中的动态内存错误,Purify是应用测试库技术进行安全检测的工具之一。Purify是一个面向VC、VB或者Java开发的测试Visual C/C++和Java代码中与内存有关的错误,确保整个应用程序的质量和安全。采用测试库技术的漏洞检测工具主要用来检测程序在运行过程中调用动态内存操作函数时由于没有对输入数据的长度进行验证,导致输入数据长度可能大于动态内存函数分配的空间而导致的缓冲区溢出漏洞。通过测试发现,采用测试库技术的漏洞检测工具对其它类型的漏洞检测效果不佳。[8] (2)二进制代码改编技术 采用二进制代码改变技术的漏洞检测工具通过对函数调用时通过压栈操作存入栈区的函数返回地址,以确保函数调用返回时能获取正确的返回地址而维护程序的正常流程。该类型的检测工具一般检测程序流中的CALL指令,当有CALL指令发生时,读出当前EBP的下一个内存所存储的值,再函数返回时,将该值和EIP指针所指数值进行对应,相同则继续执行,否则调用异常保护机制进行异常处理,确保程序不会执行非法操作。二进制代码改编技术对程序的二进制代码进行改编,对程序源代码无影响。该技术通过保护栈中保存的函数调用是压入的返回地址(CALL指令压栈数据)以确保函数调用完毕时正确返回。[8] (3)异常技术 异常技术的主要实现原理是对大量程序调用栈的行为及结果进行统计形成一个检测指导标准和方法来检测程序是否受到攻击。利用异常技术的漏洞检测工具在检测指导标准的指导下对应用程序访问栈区的频次、动作类型和结果进行统计。因此,异常技术是漏洞检测技术发展的新方向,对目前主流的漏洞攻击方法有较好的检测能力。[8] 4 软件漏洞分析技术 软件漏洞分析是信息安全和软件质量保障的重要手段,分析工作的开展通常与软件生命周期紧密地结合在一起:1)在设计阶段,进行软件架构的安全性分析,了解软件架构中存在的安全威胁,由此发现设计错误(error),以尽早消除安全隐患;2)在开发阶段,进行源代码的安全性分析,了解代码自身存在的固有问题,由此发现编码缺(defect)以弥补编码的不足;3)在测试阶段,进行可执行代码的安全性分析,了解软件在实际运行中可能出现的安全问题,由此发现运行故障(fault),以采取相应措施补救。 漏洞分析技术多种多样,其间的界限也不清晰。 4.1漏洞分析技术分类 综合考虑分析对象、漏洞形态等因素,参考已有软件分析分类方法,将软件漏洞分析划分为软件架构分析技术、代码静态分析技术、代码动态分析技术、动静结合的分析技术和漏洞定位技术等5类。图2展示了软件漏洞分析的技术体系。其中,架构分析技术是对软件的架构设计进行分析,发现违反安全属性的设计错误后反馈给设计人员进行修改;代码静态分析技术和代码动态分析技术的分析对象是源代码或可执行代码,分析过程中需要辅以相应的分析规则,输出可能的安全漏洞;有时为了提高效率和准确度,需将两者结合使用;漏洞定位技术主要对是漏洞进行追踪定位等分析,由此确定漏洞的位置、可利用性等属性。上述各类技术构成一个完整的体系,能针对软件的不同形态完成漏洞的发现和分析工作。 图2 软件漏洞分析技术体系 4.2软件架构分析 统计发现,软件中50%~75%的问题是在设计阶段引入的,且修复成本会随发现时间的推迟而增长。因此,在设计阶段进行软件架构分析对软件安全保障起着决定性作用,软件架构分析也提供了从更高、更抽象的层次保障软件安全性的方法。图3是软件架构分析原理图。分析时首先要对架构进行建模,同时还要对软件的安全需求或安全机制进行描述,然后检查架构模型是否满足安全需求,如不满足,需要根据相应信息重新设计架构,如此反复直至满足所有安全需求。通常,为了便于(自动化)检查,为软件架构和安全需求建模/描述时使用相同的标准进行构造,即得到的模型形式相同。 图3 软件架构分析原理 目前,国内外关于软件架构安全性分析的理论和应用研究都还处在探索和发展阶段,主要可以分为形式化分析和工程化分析2大类。前者主要使用形式化方法描述软件架构和安全需求,因此最终的分析结果精确、可量化,且自动化程度高,但实用性较差;后者从攻击者的角度考虑软件面临的安全问题,实用性强,但自动化程度较低。具体而言:1)形式化分析UMLsec方法通过扩展标准的统一建模语言(UML)来描述软件的架构和安全需求,并将它们转化为一阶逻辑公式,最终自动验证软件的架构是否满足安全需求。UMLsec能够进行自动化的分析,具有一定的实际应用价值;但建模粒度相对较粗。 软件架构模型法(SAM)使用谓词/迁移网(PrT)描述架构基本元素,使用一阶时序逻辑描述安全约束,并通过一系列形式化验证和分析方法判定基本元素是否满足安全约束。SAM使用模型检查、约束求解、定理证明、可达性分析等方法,能够实现自动化,架构描述能力强;但需要复杂的形式化表示,实用性较差。DTMC方法使用离散时间Markov链描述软件架构的状态空间以反映任意时刻各组件的运行状况,而后人工输入每个组件的脆弱性指数,并以此计算出软件的安全性及影响架构安全的瓶颈。DT-MC支持层次式建模和多种分析及预测过程;但需要人工干预,安全描述能力较弱,且实用性不强。ACMF方法使用组件系统的架构描述语言描述软件架构的基本元素,同时还描述基本元素的性质以体现安全需求,最终通过体系结构模拟法分析架构的安全性。ACME的安全描述能力较强,具有一定的实用价值;但分析时需要人工干预。2)工程化分析场景分析法使用场景描述与软件架构的静态结构和动态行为相关的安全属性,并采用评审会议的方式分析架构安全性。场景分析可在上下文环境中描述复杂的安全属性,不依赖于特定的架构描述语言;但需要人工评审,自动化程度低。错误用例分析法通过检查软件架构对每个错误用例(用户在与软件交互过程中,对其他用户、软件等造成损失的一系列行为)如何反应来判断架构是否满足安全需求。错误用例分析法提高了安全问题的可视化,并且不依赖于某种特定的架构描述语言;但需要人工评审,不能进行自动化分析。威胁建模法通过建立分层数据流图、标识软件的入口点和信任边界来描述软件架构,并通过建立威胁模型(STRIDT)来展现欺骗、篡改、否认、信息泄露、拒绝服务和特权提升等6类威胁,最终使用SDLTM工具辅助完成分析。威胁建模法可以借助工具自动完成部分分析工作,实用性较强;但对于安全属性的描述能力较弱。 4.3代码静态分析 代码静态分析是指在不运行软件的前提下进行的分析过程。静态分析的对象通常是源代码,也可以是可执行代码,但针对源代码分析时会获得更多的语义信息,更便于分析。使用静态分析方法,可以比较全面地考虑执行路径的信息,因此能够发现更多的漏洞,提高命中率。图4给出了代码静态分析的原理。可以看出,整个过程包括如下环节:软件模型构造、漏洞模式提取、基于软件模型和漏洞模式的模式匹配。其中,匹配技术一般是在辅助分析技术的支持下采用数据流分析、符号执行、模型检查等完成的;软件模型的构造应当与所使用的分析技术相结合,一般是从软件的设计、实现中构造出来的,如语法树(AST)、控制流图(CFG)、形式化规约等,通常被统称为中间表示(IR)。在建模之前,往往需要对代码进行 预处理(词法语法分析等);漏洞模式提取过程也是分析标准的构造过程,根据历史漏洞的类型和特性,构建相应的漏洞模式或分析规则。 图4 代码静态分析原理 经过几十年的发展,各类静态分析技术已比较成熟。目前比较常见的静态分析技术包括词
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服