预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共286页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第6章可信软件和恶意软件防范6.1程序安全程序构成了一个计算机系统的很多部分(操作系统、设备驱动程序、网络基础设施、数据库管理系统和其他应用程序,甚至网页上的可执行命令),因此多种形式保护程序是计算机安全的核心。程序安全除了包括程序的完整性、可用性、保密性外,还包括了程序的运行安全性。众所周知,来自系统外部的恶意攻击的主要目标是计算机系统,其直接的重点目标是信息和数据,以及包含、记录和存储这些信息数据的程序(软件)。程序的丢失、篡改、窃取、非法复制、滥用等对系统造成的后果是灾难性的,对社会造成的影响是严重的和深远的。随着计算机网络、通信和信息处理的推广普及,随着各种计算机系统趋于开放式结构,系统连接技术和协议公开化,计算机(尤其是微型计算机)逐步进入社会各个环节,形成一个社会各方与专业领域融合的大环境,计算机恶意程序通过各种途径(直接施放、网络通信、远程访问、电子邮件、电子广告、软件交流等)传播蔓延的机会越来越多,最终必然威胁到系统,进而威胁到系统中的数据和程序的安全。各种大型软件、专用软件(如统计、地理、气象、能源、航空、航天、军事、金融财务等软件)的使用,大型数据库的联网开放,都使得数据和程序的重要性及地位日益重要,使得对程序的依赖性日益严重。程序中一个小的纰漏、一种不完善的功能、一次细微的疏忽,都可能对系统造成极大的影响。6.1.1程序安全的概念当我们说一个程序是安全的,它的含义是指,对程序能实现期望的机密性、完整性和可用性的信任程度。所谓信任问题,是指假设提供一个已完成的程序,例如一个商业软件包,如何来确定它的安全性或者说如何以最安全的方式使用它?答案是采用独立的、第三方的评估。一般而言,开发者把错误的数量和种类作为产品质量的依据。我们经常谈论软件中的“bug”,根据不同的上下文,所对应的意思也不同。它可以是需求说明时的一个错误,一段代码中的语法错误,或是一个导致系统崩溃的因素。IEEE推荐了一个标准术语来描述软件中的“bug”。当一个人在从事软件活动的过程中犯错误时,我们称之为过失(error)。过失可能会在计算机程序中导致一个错误(fault),或者一个不正确的步骤、命令、过程或数据定义。例如,一个设计者可能误解需求,从而创建一个不符合分析员和用户要求的设计。一次失效(failure)就是对系统要求行为的一次违反。在系统发布之前或之后,或在测试过程中,或在运行和维护过程中都能发现失效。早期的计算机安全工作建立在“查找错误并打补丁”(penetrateandpatch)的模式上。分析专家在该模式下寻找错误,并给错误打上补丁。一些顶尖的测试团队尝试各种方法使系统崩溃以测试系统的安全性。这种测试被认为是安全“证明”;如果系统经受住了攻击的考验,就认为是安全的。遗憾的是,这种证明经常成为反面例子,因为系统中隐藏的错误往往不止一个。为了解决这些不断发现的错误,人们迅速开发了许多补丁以修复安全问题,然而,大多数补丁并未起多少作用。相反,它们使系统变得更不安全,因为它们引入了新的错误,其原因有三个:(1)修补指定问题的压力使得人们仅仅关注错误本身,而不是与之相关的上下文环境。特别是分析专家仅专心于研究导致失效的直接原因,而忽视设计或需求方面的原因。(2)修补一个问题时常导致其他地方的失败,或者说补丁仅仅解决一个地方的问题,而没有解决相关地方的问题。(3)打补丁可能会影响系统的功能和性能,所以补丁不能适当地修补系统错误。由于“查找错误并打补丁”模式的不完善,人们不得不考虑其他方法来保证代码满足安全需求。其中一个方法就是对比系统需求和系统行为。也就是说,为了理解程序的安全性,可以检查程序的行为是否符合设计者或用户的需求。程序安全缺陷(programsecurityflaw)是指由于程序的脆弱点而引起的不恰当的程序行为。一个缺陷可以是一个错误或是失效,而脆弱点经常用来描述某一类缺陷,诸如缓冲区溢出。脆弱点和缺陷是起因和影响的关系。例如,一个特洛伊木马被注入到一段代码中,就是一个利用了程序脆弱点的缺陷,然而用户可能还没有发现木马的恶意行为。因此,必须从内部和外部两方面处理程序的安全缺陷,不仅要找出失效的原因,也要找出初始的原因。此外,仅仅识别这些问题是不够的,还必须确定怎样避免由其引发的灾难。可惜的是,我们还没有技术来消除或解决所有的程序安全缺陷。Gasser指出,安全根本上就是困难的,安全时常与有效性和性能相冲突,而且错误的安全解决方案会阻碍安全编程的真实进展。如今,影响计算机程序安全的因素太多,几乎不可能建立起一个绝对安全保密的信息系统。我们一方面要加强人为因素的控制,如制定相关法律、法规,加强管理;另一方面,加强技术措施的应用,如系统软件安全保密、通信网络安全保密、数据库系统与软件的安全保密等。尽管如此,通过了解什么会出错以及怎样