第3章程序安全课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第3章程序安全课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章程 安全 课件
- 资源描述:
-
1、第3章 程序安全 本章要点r 具有安全隐患的编程错误 r 恶意代码 r 防止恶意代码和脆弱性的程序开发控制 r 控制程序运行时的缺陷 程序构成了一个计算机系统的很多部分,因此多种形式保护程序是计算机安全的核心。我 们 将 所 有 代 码 片 称 之 为“程 序程 序”(program)。这里需要提出两个重要问题:怎样消除程序中的缺陷?在程序有缺陷的情况下,如何保护计算机资源?本章讨论的是一般的程序话题,包括程序编写。程序安全中一个重要问题是信任信任。信任问题是指:假设提供一个已完成的程序,如何来确定它的安全性或者说如何以最安全的方式使用它?答案是采用独立的第三方的评估第三方的评估。3.1 安全
2、程序 评估程序安全与软件质量的评估相似,一种评估软件安全性或质量的方法是让人们列出能反映该软件整体安全的那些特性。然而,不同的人有不同的答案。人们对软件质量的总体设想也会影响对安全性的评估。一般而言,开发者把错误的数量数量和种种类类作为衡量产品质量的依据。当一个人在从事软件活动的过程中有所疏失时,我们称之为过失过失(error)。过失可能会在计算机程序中导致一个错误错误(fault),或者一个不确定的步骤、命令、过程或数据定义。一个单独的过失可以产生很多错误,一个错误可以隐藏在任何产品的开发和维护中。一次失效失效(failure)就是对系统要求行为的一次违反。一次失效意味着系统没有按照需求执行
3、。错误是对系统的内部观点而言的,是开发开发者者所见到的;而失效则是对系统的外部观点而言的,是用户用户看到的问题。3.1.1 修改错误 修改错误是评估安全质量的一种方法。计算机安全工作建立在“查找错误并打补丁查找错误并打补丁”(penetrate and patch)的模式上。分析专家在该模式下寻找错误,并给错误打上补丁。3.1.1 修改错误(续)缺陷:1)修补指定问题的压力使得人们仅仅关注错误本身,而不是与之相关的上下文环境。2)在离错误较远的区域,其副作用不明显。3)修补一个问题时常导致其他地方的失败,或者说补丁仅仅解决一个地方的问题,而没有解决相关地方的问题。4)打补丁可能会影响系统的功能
4、和性能,所以补丁经常不能恰当地修补系统错误。3.1.2 意外行为 “程序安全缺陷程序安全缺陷”(program security flaw)是由于程序的脆弱点而引起的不恰当的程序行为。“脆弱点”和“缺陷”这组词与“错误”和“失效”这组词之间并没有直接的对应关系。一个缺陷可以是一个错误或是失效,而脆弱点经常用来描述某一类缺陷,诸如缓冲区溢出。尽管不一致,但应该记住:我们必须从两个方面来看待脆弱点和缺陷,即起因起因和影响影响。程序安全性缺陷可以来源于任何种类的软件错误。有必要将程序缺陷划分为两种逻辑类别:由开发者的疏忽所引起的错误和恶(有)意设计的缺陷。3.1.2 意外行为(续)分类帮助我们理解一
5、些方法,用以防止将缺陷有意或无意地引入到以后的代码编写中。一个因疏忽而引起的错误给用户及其组织带来的损失可能与恶意漏洞带来的损失相当。计算机攻击计算机攻击(cyber attack)即有意的安全事件,是如今最大的安全威胁。从根本上说安全是困难的,安全时常与有效性和性能相冲突,而且错误的安全解决方案会阻碍安全编程的真实进展。我们还没有技术来消除或解决所有的程序安全缺陷。原因有两个:3.1.2 意外行为(续)1)程序控制是在单独的程序和程序员的级别上实施的。功能测试是解决程序“应该应该做什么做什么”的问题,而安全测试还要确定“不应该做什么不应该做什么”的问题。要保证程序精确地按照设计者和用户的意图
6、来执行而没有其他的行为,这几乎是不可能的。在一个复杂的大型系统中,不管设计者或程序员的意图何在,许多相关模块都以各种各样难以控制的方式交织着。巨大的规模巨大的规模和复杂性复杂性使得我们不可能去预防和检查所有缺陷。想要植入恶意代码的程序员可以利用系统的不完整性成功地将漏洞隐藏其中。3.1.2 意外行为(续)2)程序设计和软件工程技术的发展迅速远远超过了计算机安全技术的发展速度。所以我们经常发现自己还在努力保护去年的技术,而软件开发者却正迅速地采用当前最新的技术了。#尽管如此,我们可以通过理解什么导致错误以及怎样阻止它,来开发技术和工具,保护大多数计算机的应用程序。3.1.3 缺陷类型 Landw
7、ehr等提出了一种关于程序缺陷的分类法,首先分为有意和无意的缺陷。进一步将有意缺陷细分为恶意和非恶意的类型。无意的缺陷分为6类:确认过失确认过失(不完善或不一致不完善或不一致):许可权核查。域过失域过失:对于数据的受控访问。序列化和混淆序列化和混淆:程序流顺序。不充分的识别和鉴别不充分的识别和鉴别:授权的基础。边界条件违规边界条件违规:首次或末次情形失效。其他可以利用的逻辑过失逻辑过失。3.2 非恶意的程序漏洞 3.2.1缓冲区溢出 问题说明问题说明 定义定义 1 缓冲区缓冲区(或数组、字符串)是一个用来存储数据的空间。缓冲区位于内存中。由于内存是有限的,所以缓冲区的容量也是有限的。因此,在许
8、多程序设计语言中,程序员必须声明缓冲区的最大容量,以使编译器能留出所需的空间。3.2.1缓冲区溢出(续)C程序中:char sample10;sample10=B;samplei=B;/执行过程确定i的值3.2.1缓冲区溢出(续)若有:for(i=0;i0 DO stmts END从K到stmtsCASE(exp)val1:stmts从exp到stmtsB:=fcn(args)从fcn到BOPEN FILE f没有信息流动READ(f,X)从文件f到XWRITE(f,X)从X 到文件f3.4.9 隐蔽通道:泄露信息的程序(续)对隐蔽通道的小结对隐蔽通道的小结 隐蔽通道对信息系统的安全来说是一个
9、严重的威胁。隐蔽通道攻击手段非常灵活,可以隐藏在任何服务程序,如打印机程序等。制造起来也不比病毒难。容量和速度也不是限制信息流传播的条件,特别是隐藏在硬件中的隐蔽通道。关闭隐蔽通道的技术进展并不乐观。隐蔽通道存在的可能性要求人们对程序开发分析、系统结构分析和输出审查给予更大关注。3.5 对程序威胁的控制 应该更关注如何预防漏洞而不是修补漏洞。这需要在软件开发软件开发(software development)期间,即编写规范、设计、编码和测试等过程中,实施控制。我们将讨论:开发控制、操作系统控制和管理控制。这里先讨论开发控制。3.5.1 开发控制 软件开发过程的特点软件开发过程的特点 开发过程
10、中需要完成的任务:系统需求分析系统需求分析,获取系统的需求并从用户的角度构建模型系统。设计系统设计系统,从需求描述出发,提出解决问题的方案,并为该方案建模。实现系统实现系统,以设计方案为蓝本来实施问题的解决方案。测试系统测试系统,确保系统符合需求分析和系统设计中所提出的需要。在不同的阶段复查系统在不同的阶段复查系统,确保最终的产品符合需求分析和系统设计中所提出的要求。为系统编写文档为系统编写文档,以进行对用户的培训和支持。管理系统管理系统,以清除一些不必要的资源。这些资源在软件开发过程中使用,但系统完成后,它们可能会成为通往系统内部的暗道。维护系统维护系统,追踪被发现的问题、必要的系统变化和已
11、经产生的系统变化,并从整体上评估它们对系统的质量和功能的影响。3.5.1 开发控制(续)软件开发过程的特点软件开发过程的特点(续续)设计安全、可用的系统,需要注意如下要点:1)不能随意发挥可用的安全性能2)工具不是解决方案3)关注上层4)让用户满意5)局部思考,局部动作 3.5.1 开发控制(续)模块化、封装性和信息隐藏模块化、封装性和信息隐藏 通常,代码的生存期生存期(shelf-life)是很长的。但是,随着时间的推移,代码需要完善,因为需求可能发生变更,并且发现的错误需要修改。因此,软件工程的一个重要原则就是将代码或其他设计实体做成小型、独立的单元,称为组件组件(component)或模
12、块模块(module)。当系统按照这种方法开发时,我们 称其为模块化模块化(modular)。3.5.1 开发控制(续)模块化、封装性和信息隐藏模块化、封装性和信息隐藏(续续)如果一个独立的组件不受其他组件的影响,就很容易找出其中故障的原因,并将故障的危害控制在最小范围内。独立组件也使系统的维护变得容易,因为对一个独立组件所做的调整将不会影响其他组件。在组件间完全独立的情况下,我们能更容易地发现漏洞所在。这种独立的模块化形式称为封装性封装性(encapsulation)。信息隐藏信息隐藏(information hiding)是模块化软件的又一个特性。信息隐藏指的是,每个组件都隐藏自己的实现细
13、节或设计细节。这样在系统需要调整时,只需要调整某个特定组件。3.5.1 开发控制(续)模块化、封装性和信息隐藏模块化、封装性和信息隐藏(续续)模块化是将一个任务划分为若干子任务的过程。这种划分是以逻辑性逻辑性或功能性功能性为基础的。模块化使得每个组件都必须满足4个条件:单任务单任务:只完成一个特定的功能 小型化小型化:一个组件包含的信息数量非常少,以至于人们可以很容易地理解它的构造和内容 简单化简单化:复杂程度不高,可以很容易地理解模块的意图和构造 独立性独立性:不依靠其他模块而独立完成任务 3.5.1 开发控制(续)图 3.16 模块化模块化、封装性和信息隐藏模块化、封装性和信息隐藏(续续)
14、3.5.1 开发控制(续)模块化、封装性和信息隐藏模块化、封装性和信息隐藏(续续)小型、独立的组件具有许多好处:易维护易维护:当需要用改进版本取代一个旧版本的组件时,如果该组件只执行某个单独的功能,则只需将旧组件移除就可以了。易理解易理解:人们通常更容易理解一个由许多小型组件所构成的系统,而不容易理解一个由大量非结构化的代码所构成的系统。可重用可重用:为一项特定任务而开发的组件经常可以被其他系统重复利用。重用正确、已经存在的代码或设计,可以减少开发和测试的难度。易修复易修复:对完成一项特定任务的组件来说,很容易确定它的故障。易测试易测试:一个良好定义了输入、输出和功能性的组件可以仅从自身出发尽
15、一切可能性来进行测试,这些测试不用考虑其他模块的影响。3.5.1 开发控制(续)模块化、封装性和信息隐藏模块化、封装性和信息隐藏(续续)内聚内聚(cohesion)是指组件中所有元素的存在都有充足的逻辑理由或功能理由,每个组件元素都与组件要执行的单一任务是相关的。耦合耦合(coupling)是指某个组件与系统中其他组件的相互依赖程度。图 3.17 耦合3.5.1 开发控制(续)模块化、封装性和信息隐藏模块化、封装性和信息隐藏(续续)封装性 一个被封装组件的边界可以根据需要设计成半透明或透明。应该将组件内的信息打包,隐藏应该隐藏的部分,并将应该可见的部分呈现出来。3.5.1 开发控制(续)模块化
16、、封装性和信息隐藏模块化、封装性和信息隐藏(续续)信息隐藏 一个设计良好的组件,对其他设计者而言没有必要知道该模块的实现细节。隐藏实现细节,使得恶意开发者因为不知道该组件是如何工作的,而不能轻易用其他的组件替换。图 3.18 信息隐藏3.5.1 开发控制(续)相互猜疑相互猜疑 相互猜疑相互猜疑(mutual suspicion)是描述两个程序的关系,相互猜疑的程序各自运行,仿佛系统中其他程序是恶意或者不正确的。每个程序都保护它的接口数据以限制其他程序访问。限制限制 一个受限制的程序被严格地限制它可以访问的系统资源。强限制有助于限制病毒扩散。3.5.1 开发控制(续)遗传的多样性遗传的多样性 来
17、自一个来源的系统的多个组件是危险的。软件产品的紧密集成也是一个类似问题。由于紧密集成,修补一个软件产品的漏洞会影响其他软件产品。3.5.1 开发控制(续)技术手段技术手段软件开发阶段,几种关键的技术包括:1)对等复查2)风险分析3)测试4)良好的设计5)预测6)静态分析7)配置管理8)错误分析 3.5.1 开发控制(续)对等复查对等复查 三种有很细微差别的对等复查:复查复查:让复查小组非正式地对产品做出评审,目的在于在开发继续进行之前,听取大多数人的意见。走查走查:产品的制造者将产品提交评审小组,并主持和控制小组的讨论。该类型复查的目的在于让小组成员针对产品进行学习,关注的焦点是研究某个单独的
展开阅读全文