3.35k likes | 3.53k Views
密码学与信息安全. 教师 孙达志 联系方式 sundazhi@tju.edu.cn 成绩评定 安全技术综述论文 (100%) 教学网页 http://cs.tju.edu.cn/faculty/sundazhi/Class-CIS-CSE13.htm. 参考书 [1] Charles P. Pfleeger, Shari Lawrence Pfleeger, Security in Computing, Fourth Edition, Prentice-Hall, 2006
E N D
教师 孙达志 联系方式 sundazhi@tju.edu.cn 成绩评定 安全技术综述论文(100%) 教学网页 http://cs.tju.edu.cn/faculty/sundazhi/Class-CIS-CSE13.htm
参考书 [1] Charles P. Pfleeger, Shari Lawrence Pfleeger, Security in Computing, Fourth Edition, Prentice-Hall, 2006 [2] William Stallings, Cryptography and Network Security, Fourth Edition, Prentice-Hall, 2005 [3] Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone, Handbook of Applied Cryptography, CRC Press, 1997
第一部分 信息安全 2013-10-26
本部分要点 • 计算安全概述 • 程序安全 • 操作系统安全 • 数据库安全 • 网络安全
1.1 计算安全的概念1.1.1 “安全”意涵 保护有价物品与信息 表 1.1 保护钱财和保护信息
1.1.1 “安全”意涵(续)计算机入侵的特点 计算系统(computing system)是指硬件、软件、存储介质、数据以及执行计算任务的人所组成的一个集合。 # 计算系统的任何部分都可能成为犯罪目标。认为一个计算系统的某些部分对局外人来说是没有价值的观念,常常是错误的。
1.1.1 “安全”意涵(续)计算机入侵的特点(续) 最易渗透原则(principle of easiest penetration):入侵者总是企图利用任何可能的入侵手段。这种入侵没有必要通过显而易见的手段,也没有必要针对安装有最可靠的防御系统,当然更没有必要是我们想要入侵者采取的方式。 # 这条原则暗示计算机安全工作人员必须考虑所有可能的入侵方式。当系统及其安全措施发生改变时,入侵分析必须反复进行。千万不要简单的认为:所有攻击都是在限度之内的。
1.1.2 攻击 脆弱点、威胁、攻击和控制 计算机系统有三个独立有价值的部分:硬件(hardware)、软件(software)和数据(data)。 脆弱点(vulnerability)是安全系统中的缺陷,如设计或实现中的缺陷,它能被攻击者利用来进行破坏活动。 对计算系统的威胁(threat)指的是能潜在引起系统损失和伤害的一组特定事件。 攻击者利用系统的脆弱点对系统进行攻击(attack)。 控制(control)是一些动作、装置、程序或技术,它能消除或减少脆弱点。
1.1.2 攻击(续) 脆弱点、威胁、攻击和控制(续) 图 1.1 脆弱点、威胁和控制 三者的关系:通过控制脆弱点来阻止威胁
1.1.2 攻击(续) 脆弱点、威胁、攻击和控制(续) 可将威胁分为以下4类: 截取(interception)指某未授权方获得了访问资源的权利。 中断(interruption)指系统资源丢失、不可得或不可用。 篡改(modification)指未授权方不仅访问了资源而且修改了其内容。 伪造(fabrication)未授权方可能在计算系统中创建假冒对象。
1.1.2 攻击(续) 脆弱点、威胁、攻击和控制(续) 图 1.2 计算系统安全威胁
1.1.2 攻击(续)方法、机会和动机 攻击者必须具备以下三点: 方法:技巧、知识、工具和能够成功实现攻击的其他方面。 机会:完成攻击的时间入口。 动机:想要攻击这个系统的原因。 缺少三个中的任何一个都不会发生攻击,但是,要阻止其中任何一个也是很困难的。
1.1.3 计算机安全的含义 安全目标 计算机安全的三个重要方面: 机密性(confidentiality)确保计算机资源仅被合法用户访问。 完整性(integrity)指所有资源只能由授权方或以授权的方式进行修改。 可用性(availability)指所有资源在适当的时候可以被授权方访问。
1.1.3 计算机安全的含义(续) 安全目标(续) 图 1.3 机密性、完整性和可用性之间的关系 #目标是在三个性质之间寻找平衡点,但平衡并不是一切。
1.1.3 计算机安全的含义(续) 安全目标(续) 机密性:机密性是我们最为了解的安全性质,与现实生活中的机密保护有很多相似之处,但保护机密性也是困难的。 完整性:一项是完整的常指该项:精确的、准确的、未被修改的,只能以允许的方式修改、只能被授权用户修改、只能被授权过程修改,一致的、内部一致的、有意义和可用的。完整性具有三个特殊方面:被授权行为;资源分离和保护;以及错误的检测和纠正。
1.1.3 计算机安全的含义(续) 安全目标(续) 可用性:可用性可用于数据和服务,它很复杂,不同的人对可用性的要求是不同的。如果对我们的请求及时响应、公平分配资源不存在特惠用户、服务和系统遵循容错原理,当软硬件故障时,服务以可接受的方式终止而不是突然崩溃和信息丢失、服务和系统便于使用、支持同时访问、死锁管理和独占式访问,那么我们说一个数据项、服务或系统可用。可用性的全面实现是安全的下一个巨大挑战。
1.1.3 计算机安全的含义(续)脆弱点 从系统的三类资源的应用中来研究脆弱点,比直接从安全目标入手要容易得多。
1.1.3 计算机安全的含义(续)脆弱点(续) 计算机安全的第二条原则: 适度保护原则(principle of adequate protection):计算机资源项在失去价值前必须被保护。被保护的程度与其价值是一致的。 # 短期保护窗口的概念主要应用于数据,但在某些情况下也可应用于软件与硬件。
1.1.3 计算机安全的含义(续)脆弱点(续) 图 1.4 数据安全
1.1.4 计算机犯罪 计算机罪犯没有固定的外表特征,许多看上去像罪犯的人可能根本不是罪犯。 从某种意义上讲,计算机安全就是为了防止罪犯破坏计算机系统。 计算机犯罪(computer crime)是与计算机有关或利用计算机实施犯罪的所有行为。 计算机犯罪每年带来的损失巨大,因此,我们应该努力减少它的危害。
1.1.4 计算机犯罪(续)业余爱好者 大多数计算机罪犯是普通的计算机专业人员和用户,他们发现计算系统弱点并利用来获取价值。 业余爱好者可能会由于对工作环境的不满,而通过破坏计算装置来报复管理层。
1.1.4 计算机犯罪(续)破译者或恶意黑客 系统破译者(cracker)指为了险恶目的而试图访问计算机的人。他们试图访问无权访问的计算设备,将入侵系统视为挑战。大多数破译者破译系统不与人交流。 黑客(hacker)是指没有恶意的编程、管理或使用计算系统的人。他们通过地下网络交流成功秘诀。 对这些攻击者而言没有一个共同的特征或目标。
1.1.4 计算机犯罪(续)职业罪犯 职业计算机犯罪对其犯罪的目标清楚,通常犯罪分子本身就是计算机专业人员,他们认为计算机犯罪前景可观、回报丰厚。有证据表明一些犯罪集团和国际组织正在从事计算机犯罪。黑客想要的只是吹嘘的资本,而犯罪组织想要获得经济利益,因此,黑客通常使用一些快速但留有痕迹的攻击手段,而专业犯罪攻击者需要不留痕迹、强大且不会被发现的攻击手段。
1.1.4 计算机犯罪(续)恐怖分子 恐怖分子常以下面三种方式使用计算机: 攻击目标:对政治团体,进行诸如拒绝服务攻击和网站篡改的破坏,这可以引起社会关注,并给攻击目标造成负面关注。 宣传工具:利用网站、日志和电子邮件让人们快速获得有关消息。 攻击手段:使用计算机发起各种令人讨厌的攻击。
1.1.5 防御方法 为了防御损害,可以采取两种方法:压制威胁、关闭脆弱点。或者二者皆选。损害发生的可能性称为风险(risk)。处理损害的方法是: 预防:通过阻止攻击或关闭脆弱点 缓解:通过使攻击变得困难,但不是不可能 转移:通过使其他的目标更具有吸引力(或减少本目标的吸引力) 检测:发生时或者在发生后的一段时间进行检测 恢复:攻击后的恢复 当然,可以同时使用以上的其中几种。
1.1.5 防御方法(续)控制 我们采取一个或多个控制的依据是:要保护什么,保护费用与损失风险比较如何,攻击者为达到目的会付出多大努力。 图 1.5 多重控制
1.1.5 防御方法(续)控制(续) 加密:加密技术解决了数据的机密性要求,同时也可以用来保护完整性。加密是安全协议的基础,为执行一个重要的系统或网络任务提供安全保障。机密可以为可用性提供支持。 但也不能过高估计加密的重要性,加密不能解决所有的安全问题,需要其他工具为补充。不当加密可能对安全毫无作用甚至降低整个系统的性能。
1.1.5 防御方法(续)控制(续) 软件控制:程序应该足够安全以防止外部攻击,它们必须不断升级和维护。程序控制包括以下方面: 内部程序控制:程序中执行安全限制的部分。 操作系统和网络系统控制:用户保护程序。 独立控制程序:一些应用程序,如口令检 测、入侵检测工具或病毒扫描器。它们针对某类脆弱点。 开发控制:用于程序设计、编码、测试和维护的质量标准。
1.1.5 防御方法(续)控制(续) 硬件控制:专门设计具有安全保护的硬件,如执行加密的硬件智能卡、限制访问的锁或电缆、用户身份识别设备、存储介质的访问控制电路板等。 策略和过程:用户之间约定规则,规则在建立后实施培训和管理,以加强安全规则的重要性和确保其正确地使用。规定不仅需要考虑法律还应该考虑群体信念。 物理控制:包括琐门、守卫入口、备份重要软件和数据,以及选择自然灾害少的地理位置。
1.1.5 防御方法(续)控制的有效性 察觉问题:正在应用控制的人必须相信安全的必要。 使用的可能性:控制不会自动生效,除非正确使用。 有效性原则(principle of effectiveness):控制必须加以使用(而且是正确使用)才有效。它们必须是高效、容易使用和适当的。 # 就其使用的时间、存储空间、人员活动或其他资源等方面而言,计算机安全控制必须足够高效、从而使控制的使用不会严重影响受保护的任务执行。
1.1.5 防御方法(续)控制的有效性(续) 重叠控制:对重要部分可以采取多种安全措施并用的方式。 定期检查:没有一种控制是永远有效的。判断控制的有效性是一项持续的工作。 重叠控制旨在一种控制失效,另一种控制可以补救,在某些情况下的确如此,但在另一些情况下两种控制并不一定优于一种控制。
1.1.5 防御方法(续)控制的有效性(续) 最弱环节原则(principle of weakest link):安全不会强于其最弱的环节。不管它是防火墙的电源,或是支持安全应用的操作系统,或是规则、实现和管理控制的人,只要所有控制中的任何一个失败了,整个安全就失败了。
1.2 程序安全 程序构成了一个计算机系统的很多部分,因此多种形式保护程序是计算机安全的核心。我们将所有代码片称之为“程序” (program)。这里需要提出两个重要问题:怎样消除程序中的缺陷?在程序有缺陷的情况下,如何保护计算机资源?
1.2.1 安全的程序 评估程序安全与软件质量的评估相似,一种评估软件安全性或质量的方法是让人们列出能反映该软件整体安全的那些特性。然而,不同的人有不同的答案。人们对软件质量的总体设想也会影响对安全性的评估。一般而言,开发者把错误的数量和种类作为衡量产品质量的依据。
1.2.1 安全的程序(续) 修改错误 修改错误是评估安全质量的一种方法。计算机安全工作建立在“查找错误并打补丁” (penetrate and patch)的模式上。分析专家在该模式下寻找错误,并给错误打上补丁。
1.2.1 安全的程序(续) 修改错误(续) “补丁技术”的缺陷: 1) 修补指定问题的压力使得人们仅仅关注错误本身,而不是与之相关的上下文环境。 2) 在离错误较远的区域,其副作用不明显。 3) 修补一个问题时常导致其他地方的失败,或者说补丁仅仅解决一个地方的问题,而没有解决相关地方的问题。 4) 打补丁可能会影响系统的功能和性能,所以补丁经常不能恰当地修补系统错误。
1.2.1 安全的程序(续) 意外行为 程序安全性缺陷可以来源于任何种类的软件错误。有必要将程序缺陷划分为两种逻辑类别:由开发者的疏忽所引起的错误和恶意设计的缺陷。 从根本上说安全是困难的,安全时常与有效性和性能相冲突,而且错误的安全解决方案会阻碍安全编程的真实进展。我们还没有技术来消除或解决所有的程序安全缺陷。原因有两个:
1.2.1 安全的程序(续) 意外行为(续) 1) 程序控制是在单独的程序和程序员的级别上实施的。功能测试是解决程序“应该做什么”的问题,而安全测试还要确定 “不应该做什么”的问题。要保证程序精确地按照设计者和用户的意图来执行而没有其他的行为,这几乎是不可能的。在一个复杂的大型系统中,不管设计者或程序员的意图何在,许多相关模块都以各种各样难以控制的方式交织着。巨大的规模和复杂性使得我们不可能去预防和检查所有缺陷。想要植入恶意代码的程序员可以利用系统的不完整性成功地将漏洞隐藏其中。
1.2.1 安全的程序(续) 意外行为(续) 2) 程序设计和软件工程技术的发展迅速远远超过了计算机安全技术的发展速度。所以我们经常发现自己还在努力保护去年的技术,而软件开发者却正迅速地采用当前最新的技术了。 # 尽管如此,我们可以通过理解什么导致错误以及怎样阻止它,来开发技术和工具,来保护大多数计算机的应用程序。
1.2.2 非恶意的程序漏洞 缓冲区溢出 问题说明 定义 1 缓冲区(或数组、字符串)是一个用来存储数据的空间。缓冲区位于内存中。由于内存是有限的,所以缓冲区的容量也是有限的。因此,在许多程序设计语言中,程序员必须声明缓冲区的最大容量,以使编译器能留出所需的空间。
1.2.2 非恶意的程序漏洞(续)缓冲区溢出(续) C程序中: char sample[10]; sample[10]=‘B’; sample[i]=‘B’; //执行过程确定i的值
1.2.2 非恶意的程序漏洞(续)缓冲区溢出(续) 若有: for(i=0;i<10;i++) sample[i]=‘A’; sample[10]=‘B’; 图 1.6 缓冲区会溢出的位置
1.2.2 非恶意的程序漏洞(续)缓冲区溢出(续) 安全含义 即使一个非恶意的过失造成的缺陷仍然会带来危害,因为一个恶意攻击者会利用这些缺陷。攻击者可以把数据插入到紧跟缓冲区的空间中以造成损害,可以诱使系统执行那些已经计划好的指令代码。这里,给出两类经常使用的缓冲区溢出攻击。 一类是,攻击者可能替换系统空间中的代码,并有可能提高自身的权限。 另一类是,攻击者可能会利用堆栈指针或返回值的寄存器。
1.2.2 非恶意的程序漏洞(续)缓冲区溢出(续) 另一种缓冲区溢出在参数值被传递到程序中时发生,特别是当参数值被传递到Web服务器上时。例如,当参数转递到URL中,语法是: http://www.somesite.com/subpage/userinput.asp?parm1=(808)555-1212&parm2=2009Jan17 (808)555-1212可能是电话,2009Jan17可能是日期。攻击者可能想了解一个非常长的电话号码,服务器做何反应,如,500位或1000位。这时程序会崩溃吗?会按照可以接受的方式崩溃吗?
1.2.2 非恶意的程序漏洞(续)缓冲区溢出(续) 带数组的高级语言出现时,缓冲区溢出就随之出现了。起初给程序员和用户带来的困扰很小,最多不过出现系统崩溃。而攻击者利用它首先使系统崩溃,然后制造出可控制的故障,这就导致了严重的安全问题。
1.2.2 非恶意的程序漏洞(续)不完全验证 问题说明 还是,http://www.somesite.com/subpage/userinput.asp?parm1=(808)555-1212 &parm2=2009Jan17,参数parm2表示日期,若输入1800Jan01、1800Feb30、2048Min32、1Aardvark2Many会发生怎样的情况? 一种可能是,如同缓冲区溢出一样,系统将由于尝试处理不正确的数据类型,而发生灾难性故障。另一种可能是接收到这些错误参数的程序将继续运行而得出错误的结果。
1.2.2 非恶意的程序漏洞(续)不完全验证(续) 一种解决方法是预测出所有潜在可能发生的问题。通过提交验证技术,程序员可能避免用户无意制造的错误。然而,由于用户可以操作和修改URL,所以这种改进仍然脆弱。 从本例可以看出,提交的数据并没有经过完善验证,那些敏感的数据处于公开和不受控制的状态。
1.2.2 非恶意的程序漏洞(续)不完全验证(续) 安全含义 不完全的参数验证很容易被利用。例如,Things公司专门经营客户产品。如果客户想要购买20个编号555A的物品。每个物品的售价10元,则网站可以计算总价格是200元,客户端的浏览器会自动按格式填充数据:http://www.things.com/order.asp?custID=101&part=555A&qy=20&price=10&ship=boat&shipcost=5&total=205 攻击者可以做如下修改http://www.things.com/order.asp?custID=101&part=555A&qy=20&price=1&ship=boat&shipcost=5&total=25
1.2.2 非恶意的程序漏洞(续)“检测时刻到使用时刻”错误 问题说明 现代处理器和操作系统经常改变指令和程序的执行顺序。访问控制是确定具有访问权限的人或进程才能进行相应的访问,主要由访问策略实现。访问策略的执行代理对访问请求进行仲裁。检查时刻到使用时刻(time-of-check to time-of-use, TOCTTOU)的漏洞与仲裁在执行中受到诱骗有关。该漏洞也称为序列化(serialization)漏洞或同步(synchronization)漏洞。