第3章 程序安全.ppt

上传人:rimleave225 文档编号:388502 上传时间:2018-10-12 格式:PPT 页数:157 大小:1.02MB
下载 相关 举报
第3章 程序安全.ppt_第1页
第1页 / 共157页
第3章 程序安全.ppt_第2页
第2页 / 共157页
第3章 程序安全.ppt_第3页
第3页 / 共157页
第3章 程序安全.ppt_第4页
第4页 / 共157页
第3章 程序安全.ppt_第5页
第5页 / 共157页
亲,该文档总共157页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、第3章 程序安全,本章要点,具有安全隐患的编程错误 恶意代码 防止恶意代码和脆弱性的程序开发控制 控制程序运行时的缺陷,程序构成了一个计算机系统的很多部分,因此多种形式保护程序是计算机安全的核心。我们将所有代码片称之为“程序” (program)。这里需要提出两个重要问题:怎样消除程序中的缺陷?在程序有缺陷的情况下,如何保护计算机资源?本章讨论的是一般的程序话题,包括程序编写。程序安全中一个重要问题是信任。信任问题是指:假设提供一个已完成的程序,如何来确定它的安全性或者说如何以最安全的方式使用它?答案是采用独立的第三方的评估。,3.1 安全程序,评估程序安全与软件质量的评估相似,一种评估软件安

2、全性或质量的方法是让人们列出能反映该软件整体安全的那些特性。然而,不同的人有不同的答案。人们对软件质量的总体设想也会影响对安全性的评估。一般而言,开发者把错误的数量和种类作为衡量产品质量的依据。,当一个人在从事软件活动的过程中有所疏失时,我们称之为过失(error)。过失可能会在计算机程序中导致一个错误(fault),或者一个不确定的步骤、命令、过程或数据定义。一个单独的过失可以产生很多错误,一个错误可以隐藏在任何产品的开发和维护中。一次失效(failure)就是对系统要求行为的一次违反。一次失效意味着系统没有按照需求执行。错误是对系统的内部观点而言的,是开发者所见到的;而失效则是对系统的外部

3、观点而言的,是用户看到的问题。,3.1.1 修改错误,修改错误是评估安全质量的一种方法。计算机安全工作建立在“查找错误并打补丁” (penetrate and patch)的模式上。分析专家在该模式下寻找错误,并给错误打上补丁。,3.1.1 修改错误 (续),缺陷:1) 修补指定问题的压力使得人们仅仅关注错误本身,而不是与之相关的上下文环境。2) 在离错误较远的区域,其副作用不明显。 3) 修补一个问题时常导致其他地方的失败,或者说补丁仅仅解决一个地方的问题,而没有解决相关地方的问题。4) 打补丁可能会影响系统的功能和性能,所以补丁经常不能恰当地修补系统错误。,3.1.2 意外行为,“程序安全

4、缺陷” (program security flaw) 是由于程序的脆弱点而引起的不恰当的程序行为。 “脆弱点”和“缺陷”这组词与“错误”和“失效”这组词之间并没有直接的对应关系。一个缺陷可以是一个错误或是失效,而脆弱点经常用来描述某一类缺陷,诸如缓冲区溢出。尽管不一致,但应该记住:我们必须从两个方面来看待脆弱点和缺陷,即起因和影响。程序安全性缺陷可以来源于任何种类的软件错误。有必要将程序缺陷划分为两种逻辑类别:由开发者的疏忽所引起的错误和恶(有)意设计的缺陷。,3.1.2 意外行为 (续),分类帮助我们理解一些方法,用以防止将缺陷有意或无意地引入到以后的代码编写中。一个因疏忽而引起的错误给用

5、户及其组织带来的损失可能与恶意漏洞带来的损失相当。计算机攻击(cyber attack) 即有意的安全事件,是如今最大的安全威胁。从根本上说安全是困难的,安全时常与有效性和性能相冲突,而且错误的安全解决方案会阻碍安全编程的真实进展。我们还没有技术来消除或解决所有的程序安全缺陷。原因有两个:,3.1.2 意外行为 (续),1) 程序控制是在单独的程序和程序员的级别上实施的。功能测试是解决程序“应该做什么”的问题,而安全测试还要确定 “不应该做什么” 的问题。要保证程序精确地按照设计者和用户的意图来执行而没有其他的行为,这几乎是不可能的。在一个复杂的大型系统中,不管设计者或程序员的意图何在,许多相

6、关模块都以各种各样难以控制的方式交织着。巨大的规模和复杂性使得我们不可能去预防和检查所有缺陷。想要植入恶意代码的程序员可以利用系统的不完整性成功地将漏洞隐藏其中。,3.1.2 意外行为 (续),2) 程序设计和软件工程技术的发展迅速远远超过了计算机安全技术的发展速度。所以我们经常发现自己还在努力保护去年的技术,而软件开发者却正迅速地采用当前最新的技术了。 # 尽管如此,我们可以通过理解什么导致错误以及怎样阻止它,来开发技术和工具,保护大多数计算机的应用程序。,3.1.3 缺陷类型,Landwehr等提出了一种关于程序缺陷的分类法,首先分为有意和无意的缺陷。进一步将有意缺陷细分为恶意和非恶意的类

7、型。无意的缺陷分为6类:确认过失(不完善或不一致):许可权核查。 域过失:对于数据的受控访问。序列化和混淆:程序流顺序。不充分的识别和鉴别:授权的基础。边界条件违规:首次或末次情形失效。其他可以利用的逻辑过失。,3.2 非恶意的程序漏洞,3.2.1缓冲区溢出问题说明定义 1 缓冲区(或数组、字符串)是一个用来存储数据的空间。缓冲区位于内存中。由于内存是有限的,所以缓冲区的容量也是有限的。因此,在许多程序设计语言中,程序员必须声明缓冲区的最大容量,以使编译器能留出所需的空间。,3.2.1缓冲区溢出(续),C程序中: char sample10; sample10=B; samplei=B; /执

8、行过程确定i的值,3.2.1缓冲区溢出(续),若有: for(i=0;i10;i+)samplei=A; sample10=B;,图3.1 缓冲区会溢出的位置,3.2.1缓冲区溢出 (续),安全含义一个非恶意的过失造成的缺陷仍然会带来危害,因为一个恶意攻击者会利用这些缺陷。攻击者可以把数据插入到紧跟缓冲区的空间中以造成损害,可以诱使系统执行那些已经计划好的指令代码。这里,给出两类经常使用的缓冲区溢出攻击。一类是,攻击者可能替换系统空间中的代码,并有可能提高自身的权限。另一类是,攻击者可能会利用堆栈指针或返回值的寄存器。,3.2.1缓冲区溢出 (续),另一种缓冲区溢出在参数值被传递到程序中时发生

9、,特别是当参数值被传递到Web服务器上时。例如,当参数转递到URL中,语法是: http:/ (续),带数组的高级语言出现时,缓冲区溢出就随之出现了。起初给程序员和用户带来的困扰很小,最多不过出现系统崩溃。而攻击者利用它首先使系统崩溃,然后制造出可控制的故障,这就导致了严重的安全问题。,3.2.2 不完全验证,问题说明还是,http:/ &parm2=2009Jan17,参数parm2表示日期,若输入1800Jan01、1800Feb30、2048Min32、1Aardvark2Many会发生怎样的情况?一种可能是,系统将由于尝试处理不正确的数据类型,而发生灾难性故障。另一种可能是接收到这些错

10、误参数的程序将继续运行而得出错误的结果。,3.2.2 不完全验证 (续),一种解决方法是预测出所有潜在可能发生的问题。通过提交验证技术,程序员可能避免用户无意制造的错误。然而,由于用户可以操作和修改URL,所以这种改进仍然脆弱。在这种情况下,提交的数据并没有经过完善验证,那些敏感的数据处于公开和不受控制的状态。,3.2.2 不完全验证 (续),安全含义不完全的参数验证很容易被利用。例如,Things公司专门经营客户产品。如果客户想要购买20个编号555A的物品。每个物品的售价10元,则网站可以计算总价格是200元,客户端的浏览器会自动按格式填充数据:http:/ “检测时刻到使用时刻”错误,问

11、题说明现代处理器和操作系统经常改变指令和程序的执行顺序。访问控制是确定具有访问权限的人或进程才能进行相应的访问,主要由访问策略实现。访问策略的执行代理对访问请求进行仲裁。检查时刻到使用时刻(time-of-check to time-of-use, TOCTTOU)的漏洞与仲裁在执行中受到诱骗有关。该漏洞也称为序列化(serialization)漏洞或同步(synchronization)漏洞。,3.2.3 “检测时刻到使用时刻”错误 (续),计算系统的攻击例子,图 3.2 文件访问的数据结构,图 3.3 被修改的数据,# 在访问被检查和检查结果被使用之间的时段,发生一些变化,并导致了检查结果

12、的错误。,3.2.3 “检测时刻到使用时刻”错误 (续),安全含义检查一个动作而执行另一个动作 ,是一个无效访问控制的原因。 解决的办法有:1) 确保关键参数在失控时不暴露。访问控制软件一直掌握请求数据直到请求动作完成。2) 确保序列的完整性。也就是在验证期间禁止中断,或验证程序复制用户数据到程序空间,并基于该数据完成验证,或使用效验封装数据。,3.2.4 非恶意程序漏洞的结合使用,以上三种漏洞还可以结合起来使用,以三叉式攻击出现。攻击者先借助缓冲区溢出来破坏机器上运行的任意代码,同时利用检查时刻至使用时刻的漏洞来添加一个新的系统用户。接下来,攻击者以新的用户身份登录系统并应用不完整的参数检查

13、漏洞获得一定权限或做其他事情。因此,对任何一个小漏洞我们都必须了解并保护它不受攻击。,3.3 病毒和其他恶意代码,就程序本身而言很少对安全性构成威胁。程序对数据进行操作,只有当数据和状态发生改变并满足其触发条件时,才采取行动。程序所做的大部分工作对用户来说是不可见的,所以一般用户不太可能发现它们在进行危险的活动。由于用户不能对计算机的程序和数据进行观察,攻击者可以编写自己的程序作为工具来访问和修改其他程序的数据。,3.3.1 关注恶意代码的原因,恶意代码可以以意料之外的方式运行,我们把恶意代码看作是系统中的潜伏者,它可能是正在运行的程序的全部或一部分。恶意代码是如何进入系统的?当安装一个大型软

14、件包,会运行诸如INSTALL或SETUP之类的命令;当浏览站点并盲目地从中下载应用程序,如Java applet或Active X等。在这些情况下,大量的程序与数据被传送,大量新的文件被创立,已经存在的文件被修改,而作为用户其实对这些实际的过程并不知情。,3.3.1 关注恶意代码的原因 (续),恶意代码极具破坏性 其他程序能做到的事情,恶意代码也能做到。恶意代码可能什么也不做,直到产生一些触发事件来驱动它运行。恶意代码每一次都可以做不同的事情。通常说,恶意代码行为的可预测性和两岁小孩行为的可预测性相似:大体我们知道他想做什么,甚至知道某些特定环境下的行为,但是他也经常能做出超乎想象的事情。恶

15、意代码在非法获取的用户授权下运行,与用户有相同的权限,但无需用户授权,甚至无需用户知道。,3.3.1 关注恶意代码的原因 (续),恶意代码的长期存在 恶意代码不是现在才出现的一种新现象,早在1970年Ware和Anderson就准确地描述了病毒的威胁、程序的脆弱点和程序安全缺陷,特别是那些恶意部分。恶意代码将仍然继续存在下去。研究它们的外在表现和工作原理对我们阻止它们进行破坏活动,或者至少减弱它们的影响十分重要。,3.3.1 关注恶意代码的原因 (续),产品漏洞和漏洞利用代码出现的时间间隔正在缩短。一般利用过程符合如下序列:1) 攻击者发现一个先前的未知漏洞2) 生产商知道这个漏洞3) 有人开

16、发出代码(称概念证明)证明在特定设置下的漏洞4) 生产商开发并发布一个针对该漏洞的补丁或者对策5) 用户采取相应保护措施6) 有人扩展概念证明或者原始漏洞定义得到一个实际攻击一旦用户在实际攻击前接受并采取了相应保护措施,就可以避免灾难发生。一种攻击在保护措施可获得之前发生就是0天利用(Zero day exploit)。,3.3.2 恶意代码的种类,恶意代码(malicious code)和欺诈程序(rogue program)是以破坏为目的的一类程序或部分,由一个代理(agent)编制,在软件中造成不期望的结果。代理是指该类程序的作者或是促成程序发布的人。,3.3.2 恶意代码的种类 (续)

17、,病毒是一种复制自身并将恶意代码传递给正常程序的程序,它通过修改正常程序做到这一点。术语“病毒”(virus)的得名是因为它与生物学中的病毒具有相似特征,被它感染的系统将继续感染其他系统以破坏其或使病毒与其共存。瞬时病毒(transient virus)的生命周期依赖于它的宿主的生命周期,病毒所依附的程序开始运行时,病毒也开始运行;病毒所依附的程序终止时,病毒也终止运行。长期性的寄居病毒(resident virus)常驻在内存里,保持激活状态或作为独立的程序被激活而不管它寄宿的程序是否终止运行。,3.3.2 恶意代码的种类 (续),特洛伊木马(Trojan horse)是这样一种恶意代码:它

18、除了程序所具有的基本功能之外,还有一些不易被人发觉的破坏作用。逻辑炸弹(logic bomb)也是恶意代码中的一种,它将在特定条件产生时被“引爆”。定时炸弹(time bomb)是逻辑炸弹的一种,它的触发条件是时间或日期。,3.3.2 恶意代码的种类 (续),陷门(trapdoor)或后门(backdoor)是某些程序所具有的特征,人们可以利用这个特征进入该程序,而不是通过明显、直接的调用,或其他需要特殊权限的进入方式。 蠕虫(worm)是一种通过网络大量传播自身副本的程序。蠕虫与病毒的基本区别在于蠕虫的操作都是通过网络来进行的,而病毒可以通过任何介质进行传播(但通常利用的是已复制的程序或数据

19、文件)。另外,蠕虫的自身复制都是以独立程序的形式传播的,而病毒的自身复制则必须嵌入到其他程序中来传播。 “兔子”(rabbit)定义为一种病毒或一种蠕虫,“兔子”会无限制地复制自己以消耗计算机的系统资源。,3.3.2 恶意代码的种类 (续),表 3.1 恶意代码的类型,#由于“病毒”常常是对所有恶意代码的统称,且各类恶意代码之间的界限很模糊,因此讨论中通常不严格区分这些概念。另外,两种或两种以上的恶意代码结合可以产生新的后果。,3.3.3 病毒是怎样植入到正常程序中的,病毒要复制必须处于激活状态,完成自己的破坏活动,并进行传播。要使病毒运行有很多方法。例如,在CD-ROM上的含有病毒的程序,可

20、以在CD-ROM运行时将自己安装到目标系统的硬盘,并感染所有正在内存中的运行的程序。这个过程开始需要人为干预,之后就可以自动传播。另一种更普遍的病毒植入方式是将其作为附件附加在电子邮件中,只要受害者打开电子邮件,病毒就可以开始工作。病毒可以伪装成各种文件,而邮件处理软件为了用户方便,常常为用户自动打开附件。,3.3.3 病毒是怎样植入到正常程序中的 (续),挂接性病毒一旦病毒程序注入到其他程序中,只要那些程序一运行,病毒就将被激活。最简单的情形是,病毒将自己的一份副本添加到可执行文件的第一条指令之前。这种植入方式非常简单有效,病毒编写者无需知道被注入程序的情况,被注入程序不过是病毒的一个载体。

21、而用户也不会知道病毒的存在,因为原始程序会像往常一样工作。,3.3.3 病毒是怎样植入到正常程序中的 (续),图 3.4 病毒被添加到程序,挂接性病毒 (继),3.3.3 病毒是怎样植入到正常程序中的 (续),包裹性病毒另一种植入方式是在原始程序运行之前和之后都由病毒来控制运行。常见的如,对组成文件清单的程序感染。,图 3.5 病毒包裹程序,3.3.3 病毒是怎样植入到正常程序中的 (续),整合并替换性病毒第三种植入方式是病毒用自身替换目标代码,并将自己整合进原始程序中。编写病毒的人必须了解原始程序的结构。病毒可以模仿目标程序的功能,同时进行自己的工作,也可以忽略目标程序的功能,完成自己的工作

22、。,图3.6 病毒整合程序,3.3.4 文档类病毒,文档类病毒(document virus)是目前流传很广的病毒。这种病毒出现在标准格式的文档中,如文字文档、数据库文件、幻灯片、图片或电子表等。这些文件高度结构化,包含高级程序语言的一部分,病毒编写者正是利用这部分进行恶意操作。普通用户只能看见文件内容,于是病毒编写者将病毒注入文档命令部分,如同上面的整合性病毒一样。,3.3.5 病毒如何获得控制权,病毒必须替代目标程序而被用户或系统调用。病毒可以通过在文件结构中替换目标程序T的代码(或加入到T的代码中去)来使用T的名字,这种技术对普通程序适用。,图3.7 病毒完全替换程序,3.3.6 病毒的

23、藏身之地,病毒希望具有下列特性:1) 不易被检测2) 不易被清除,也不易失效3) 传播感染的范围广4) 可以重复感染宿主程序和其他程序5) 容易创建6) 与平台和操作系统无关几乎没有病毒可以完全符合上述标准,病毒编写者需要考虑主要功能和将植入何处,而根据需要挑选出其中一部分。,3.3.6 病毒的藏身之地 (续),以前,病毒制造者面临的挑战是如何使病毒代码重复执行以大量繁殖。然而现在,一次执行已经可以确保病毒大量繁殖。许多病毒都是通过电子邮件传播的,主要有两种方式:在第一种方式中,病毒编写者生成新的电子邮件并发送给受害者地址簿里所记录的用户。在第二种方式中,病毒编写者让用户在不知到的情况下将被感

24、染的文件转发给其他用户。只要病毒的效果没有显现,被感染的文件就有可能被用户发出。,3.3.6 病毒的藏身之地 (续),一次运行方式目前大多数病毒只要运行一次就能感染系统。例如,邮件附件中的病毒只要将其打开,内藏的病毒就能运行。引导扇区病毒在计算机启动时,首先由固件取得控制权以决定哪些硬件组件将被使用,并预先测试它们,之后再把控制权交给操作系统。操作系统是存放在硬盘上的软件,一些代码会把操作系统从硬盘复制到内存中,并使操作系统取得控制权,这些代码就是引导程序(bootstrap),通常也被称为引导(boot)。,3.3.6 病毒的藏身之地 (续),固件的控制权转交过程是这样完成的:固件从磁盘上一

25、处叫引导区(boot sector)的特定位置读取一定数目的字节,并把它写入内存中的特定位置,然后跳转至该地址(该地址包含引导程序装载器的第一条指令)。 然后装载器将磁盘中操作系统的剩余部分读入内存。硬件设计者在磁盘上为引导程序装载器保留了空间,PC上引导区略小于512字节,但装载器大小超过这个大小,因而设计采用了“链式”(chaining)技术。链式 技术在保证大规模数据存储的同时,也使得病毒安装变得简单。,3.3.6 病毒的藏身之地 (续),图 3.8 引导扇区病毒重载代码,# 病毒在计算机启动初期就获得控制权,这样可以避开检测, 且由于在启动区域对用户“不可见”,不易为用户察觉。,3.3

26、.6 病毒的藏身之地 (续),驻留在内存中的病毒对于经常使用的操作系统程序和一些特殊的用户程序,需要时再装载入内存将会非常浪费时间。所以对于这些代码,就让它们留在内存里,称之为“常驻内存的代码”。常驻内存的程序通常称为“终止后依然留守”(Terminate and stay resident ,TSR)程序。将病毒植入到常驻内存的代码中,每次运行这些代码,病毒就随之运行,寻找并感染新载体。病毒也可以修改操作系统要运行的程序表,如,windows的系统注册表,在其中添加自己的表项。这样即使在内存中清除了病毒副本,在每次机器启动时,病毒仍将再次出现。,3.3.6 病毒的藏身之地 (续),病毒的其他

27、藏身之地病毒的另外一个寄居的地方是应用程序。许多应用程序,如文字处理软件、电子数据表格等都有“宏”功能,它允许用户自定义一系列的命令并通过一个调用来重复使用它们。病毒编写者可以创建一个宏病毒,该宏可以把自己添加到应用程序的启动指令中,而且它还可以把自身副本嵌入到数据文件以感染所有接收文件的用户。库也是恶意代码的藏身的一个绝佳的地方。此外,编译器、加载器、链接器、在线监视器、在线调试器甚至病毒控制程序都是病毒喜欢寄居的地方。,3.3.7 病毒特征,病毒不可能完全隐身,病毒代码必须存储在某个地方,而代码必须在内存中被执行。此外,病毒是以很特别的方式来运行、传播的。病毒的所有这些性质提供了一个暴露它

28、们行踪的特性,称为“病毒特征”(signature)。病毒特征对编写所谓的病毒扫描(virus scanner)程序是非常重要的,病毒扫描程序可以自动侦测到病毒,有时候还可以自动清除病毒。扫描程序搜索内存、永久性存储器,监控程序运行并留意是否有病毒特征。,3.3.7 病毒特征 (续),例如,病毒扫描程序如果扫描到如下字符串/default.ida?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

29、NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN%u9090%u6858%ucbd3%u7801%u9090%u6858%ucdb3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%ub00%u531b%u53ff%u0078%u0000%u00=aHTTP/1.0就可以确定有红色代码蠕虫病毒存在。当扫描器识别到一个已知的病毒格式,它就会隔离该病毒,通知用户,并使病毒失效或删除病毒。然而,病毒扫描器只有在得到最新的病毒信息的情况下,才是有效的。,3

30、.3.7 病毒特征 (续),存储模式大部分病毒都附着于存储介质上(如磁盘)的程序中,由于病毒的挂接部分是不变的,这样病毒代码的开始部分就具有可探测的特征。病毒可以附着于文件,在这种情况下文件长度会增加,也可以删除部分或全部正常程序使文件的大小保持不变。,3.3.7 病毒特征 (续),图 3.9 可辨认的病毒格式,存储模式(续),3.3.7 病毒特征 (续),执行模式,表 3.2 病毒的预期效果和造成原因,3.3.7 病毒特征 (续),传输模式病毒可以在启动过程中通过附着在可执行文件或数据文件中传播。传播本身发生在被感染程序执行期间。且病毒传播不受单一介质和运行模式限制。,3.3.7 病毒特征

31、(续),多形态病毒 能够变换自己外观的病毒称为多形态病毒(polymorphic virus)。简单改变病毒外观相对来说比较容易,很多指令是无效的,如对一个数加0(相对于数本身而言)或跳到下一条指令。这些指令有时被称为空指令(no-ops),可以散缀在代码中来变形格式。 一个多形态病毒必须不断随机重新放置它自身的所有部分并随机改变所有固定数据。,3.3.7 病毒特征 (续),多形态病毒 (续)多形态病毒一种简单变种方式是用不同的密钥进行加密,这样病毒的存储形态会各不相同。这种病毒有时称为加密病毒(encrypting viruses)。这种类型的病毒必须包含三个不同的部分:一个解密密钥;一段已

32、被加密的病毒代码;一段未被加密的用以说明解密规则的代码。对于这类病毒来说,由于解密规则本身或者对解密规则库的调用必须是公开的,这样它们就成了该类病毒的特征。,3.3.8 病毒源,由于病毒可以变得非常小,这样就能深入隐藏在其他更大更复杂的程序中。一个200行代码病毒可以被分成两个各有100行代码的包,并互相跳转。这种100行代码的病毒包可以很方便地隐藏在编译器、文件管理器或其他大型程序中。判定两个程序是否等价对查找病毒十分有用。两个模块的结果也可能会有极细微的差别,两者的结果是否与安全性相关也很难确定。这些差别可能是良性的,也可能是病毒感染的一个标记。所以,我们不太可能开发一种程序以区分被感染的

33、模块和未被感染的模块。此外,在系统执行时清理病毒必须使检测和消灭病毒的速度超过病毒的传播速度。,3.3.9 防止病毒感染,防止病毒感染的唯一方法是不要与感染源共享可执行代码。遵循这条原则曾经是很容易的,但现在却变得越来越困难了,原因主要是可执行文件的概念越来越模糊。微软开发的专有格式文件有些不为人知的特性,可以为病毒代码编写者利用。编写可以将病毒取一个不合理的后缀名,如doc或者ppt,不知情的接受者在打开文件的同时也就执行了其中的恶意代码。,3.3.9 防止病毒感染 (续),人们还发现,可执行代码可以隐藏在包含大量数据集合的文件中,如图片和只读文件中,这对发现隐藏病毒代码带来了很大困难。因为

34、我们不可能总是知道哪些外界资源被感染,我们应该假定外界的资源都被感染了。对我们有利的一点是我们知道何时从外界接收了代码,对我们不利的一点是我们不可能总与外界隔绝。群体计算机与外界隔离对防止病毒有益,但做到这一点越来越难。,3.3.9 防止病毒感染 (续),防止病毒的措施: 1) 只使用从可信赖的商家获取的商业软件 2) 在一台孤立的计算机上测试所有的新软件 3) 只有在确认了附件是安全的以后才能打开它 4) 制作一个可供恢复的系统镜像文件,并保存在安全之处 5) 为可执行的系统文件制作备份并保存 6) 有规律地使用病毒扫描器并时常更新,3.3.10 关于病毒的误解和真相,由于病毒对计算机通信经

35、常造成剧烈的冲击,成为新闻的重点报道对象,然而,对病毒仍然存在一些误解。以下是有关病毒的一些流行说法:1) 病毒只会感染微软的Windows系统(只要包含计算机代码的设备都可能感染病毒)2) 病毒可以篡改“隐藏”和“只读”属性的文件(这两种机制都是通过软件实现,病毒完全可以覆盖原来的软件保护)3) 病毒仅孤立存在于数据文件、Word文档文件或程序中(它们的界限在实际应用中不明显),3.3.10 关于病毒的误解和真相 (续),4) 病毒只能通过磁盘或只能通过电子邮件传播(任何共享方式都有可能传播病毒)5) 在彻底断绝电源并重新启动以后,原先的病毒不可能驻留在内存中(但这不意味着病毒被清除和启动完

36、成后病毒又重新驻留在内存中)6) 病毒不会感染硬件(如果硬件包含被程序控制的可写存储器,那么存储器也会成为病毒攻击的目标)7) 病毒既可能是恶意的也可能是良性的或善意的,3.3.11 第一个恶意代码的例子:Brain病毒,Brain病毒是最早出现的病毒之一,也是被研究得最彻底的病毒之一。任何类型的磁盘在遭受了该病毒的攻击后,磁盘的卷标名称都会被改为“BRAIN”,Brain病毒也因此而得名。人们认为这种特殊的病毒起源于巴基斯坦,只对运行在PC机上的微软操作系统平台进行攻击。该病毒拥有大量的变种,因此,人们相信该病毒的源代码是一个地下的病毒编写团队发布的。,3.3.11 第一个恶意代码的例子:B

37、rain病毒 (续),Brain病毒的行为病毒首先将自己定位在上端内存,然后通过执行一个系统调用来重置上端内存的边界,使之在病毒体的下方。这样,病毒就可以不受干扰地独立运行了。病毒重置中断地址表指向自己以捕获19号中断(磁盘读取),然后将6号中断(未使用)地址设置成为之前19号中断的地址。这样,病毒就将磁盘读取的系统调用隐藏起来了。病毒处理对引导扇区的信息读取(将被移动到“坏”扇区中的初始引导信息恢复返回给系统)。其他磁盘调用在执行6号中断时交给正常的磁盘读取程序来处理。 病毒只在传播感染过程中才会有所表现。病毒产生的大量变种会抹掉磁盘中的数据或损坏文件分配表。,3.3.11 第一个恶意代码的

38、例子:Brain病毒 (续),Brain病毒的传播方式Brain病毒一般隐匿于引导扇区和磁盘上6个其他扇区中。其中1个扇区包含从引导扇区中移过来的初始化启动代码。剩下的扇区中有2个包含病毒代码的剩余部分,其余3个扇区包含了上面3个扇区内容的副本。病毒将这6个扇区标注为“有故障的”(faulty),操作系统就不会使用它们了(当然,低级调用可以强制性地使硬盘读取数据,而不管该扇区是否被操作系统标注为“有故障的”坏扇区)。病毒不会终止系统的启动过程。一旦被读入到内存后,病毒将截获对磁盘的读取请求。对每一次读取过程,病毒都会先读取磁盘的引导扇区并检查第5个和第6个字节是否是十六进制数的1234(这就是

39、该病毒的特征)。如果是,就表明该磁盘已经被感染,否则就感染该磁盘。,3.3.11 第一个恶意代码的例子:Brain病毒 (续),关于Brain病毒的小结 Brain病毒使用了一些普通病毒都爱玩弄的把戏,如隐藏在引导扇区中,截获并隐藏中断等,其为之后的病毒提供了一个原型。Brain病毒总的表现比较温和。,3.3.12 另外一个例子:因特网蠕虫病毒,1988年11月2日的傍晚,因特网上诞生了第一个蠕虫病毒,并给网络造成了严重破坏。编写和发布该蠕虫病毒的是 Cornell大学的一名研究生Robert T. Morris, Jr.。,3.3.12 另外一个例子:因特网蠕虫病毒 (续),蠕虫病毒的行为M

40、orris希望该病毒完成以下三个主要任务:1) 自己决定传播路径2) 传染3) 隐藏自己,使自己不被发现,3.3.12 另外一个例子:因特网蠕虫病毒 (续),蠕虫病毒的危害1) 蠕虫病毒最大危害就是侵吞系统资源。蠕虫病毒最显而易见的后果就是被感染机器的性能显著下降。2) 蠕虫的第二个危害是可以断绝因特网上大量系统间的连接。3) 许多工作不能在与外界隔离的情况下展开。系统管理员无法在切断因特网的系统上与其它安装点的副本进行信息交流,所以不能获知网络的状态、容量和防御等信息。,3.3.12 另外一个例子:因特网蠕虫病毒 (续),蠕虫病毒的工作机制蠕虫利用了UNIX操作系统的几种已知漏洞和配置上的失

41、误,完成了三个主要任务:决定向何处传播蠕虫采用了三种技术来确定潜在的受害机器。1) 漏洞是用户与系统关联的错误,蠕虫利用该漏洞来猜解用户口令2) 漏洞是关于finger的,该程序的作用是向其他提出请求的计算机提供关于系统所有用户的信息3) 漏洞是与sendmail程序中的陷门有关的,3.3.12 另外一个例子:因特网蠕虫病毒 (续),传染当蠕虫确定了目标机器后,就发送引导程序装载器到目标机器。该装载器是一段99行的C代码程序,它将在目标机器上编译和运行。引导程序装载器将在随后从原来的宿主机器上获得蠕虫程序的剩余部分。在消息传递过程中,实施了一次性口令保护措施,保证活动的秘密。 这种方法可以防止

42、系统管理员获取蠕虫的剩余部分以进行后续分析。,3.3.12 另外一个例子:因特网蠕虫病毒 (续),隐藏自己,不被人们发现蠕虫的长度都设计得很合理以防在宿主机上被发现。例如,在获取剩余蠕虫部分的过程中,一旦出现传输错误,装载器就将清零复位并清除所有已经传输的代码,然后退出。 蠕虫获得全部代码,就将其加密载入内存,并在硬盘上删除原始副本。蠕虫还会周期性地改变自己的名字和进程标识符。,3.3.12 另外一个例子:因特网蠕虫病毒 (续),关于蠕虫病毒的小结蠕虫病毒给因特网带来了强烈的冲击,并且在当时引起了学术界和研究者的广泛关注。感染过的站点纷纷关闭了可以被蠕虫利用的安全漏洞加强了安全措施。然而,对因

43、特网站点漏洞的安全分析检查发现,许多同样的安全漏洞仍然存在,如果类似的蠕虫病毒再次发动攻击,也许不会像之前那么成功,但仍会造成不便。蠕虫的温和性体现在它仅仅传播给其他系统,但并不毁坏它们。新的蠕虫变种可能就不会那么温和了。,3.3.12 另外一个例子:因特网蠕虫病毒 (续),关于蠕虫病毒的后果蠕虫危害的一个积极结果是美国建立了一个基础体系,并以此来报告和修正恶意及非恶意的漏洞。这也就是计算机应急响应小组(Computer Emergency Response Team, CERT)在Carnegie Mellon大学成立。它们致力于收集和发布关于恶意代码攻击的信息以及对付它们的方法。实践表明,

44、安全来自于积极细致的保护和行动,而不是来自于对问题熟视无睹和无所作为。,3.3.13 更加危险的恶意代码:红色代码,红色代码出现在2001年中期,引起了破坏性后果。当年在6000000台易感染服务器中,感染率达1/8,造成的损失超过20亿美元。红色代码的行为红色代码的行为有两个步骤:感染和传播。该蠕虫利用了微软IIS(Internet Information Server) Web服务器软件的脆弱点来感染服务器。它利用动态连接库idq.dll中的缓冲区溢出漏洞而驻留在服务器内存中。为了寻找传播目标,红色代码在PC机的80端口检查其他PC的IP地址,以确定该服务器是否易受攻击。,3.3.13 更

45、加危险的恶意代码:红色代码 (续),红色代码的危害第一个版本是用HELLO!Welcome tohttp:/!Hacked by Chinese!篡改站点网站页面,之后完全由日期决定行为。每月1-19日,蠕虫将产生99个线程从相同IP地址为起点扫描其他脆弱计算机。每月20-27日,蠕虫向美国站点www.whitehouse.gov发动分布式拒绝服务攻击。每月28日到月底,蠕虫将什么也不干。之后的版本对传染速度进行优化并加入了特洛伊木马 。,3.3.13 更加危险的恶意代码:红色代码 (续),红色代码的工作机理红色代码的目标是运行了IIS的、易受攻击的个人计算机。但在Windows NT和Win

46、dows 2000的表现不同。后期的版本在被感染服务器上建立陷门。红色代码将%windir%cmd.exe 复制在以下4个地方:c:inetpubscriptsroot.exe c:progra1common1systemMSADCroot.exe d:inetpubscriptsroot.exe d:progra1common1systemMSADCroot.exe,3.3.13 更加危险的恶意代码:红色代码 (续),红色代码的工作机理 (续)红色代码可以将自带的explorer.exe复制于C盘或D盘,这样 Windows运行的是恶意副本,而不是正常explorer.exe程序。这一木马程

47、序首先运行正常的explorer.exe程序,但其将篡改系统注册表,使一些文件保护失效,这样就保证它对一些目录具有读、写和执行的权限。即使explorer.exe停止运行其中的木马程序依然可以有一个虚拟路径进入系统运行于后台。在传播方面,蠕虫创建400个或600个线程,在24或48小时后向其他机器传播,这里线程都为并行非阻塞式嵌套字方式。然后,强制重启系统,删除蠕虫只在系统中保留木马和后门。早期红色代码攻击www.whitehouse.gov,之后的版本则随机选择与宿主机较近的IP地址攻击。,3.3.13 更加危险的恶意代码:红色代码 (续),关于红色代码的小结红色代码是“信息化战争的一个小测

48、试”。红色代码安全威胁的根源在于,人们时常购买和安装连最低安全标准都未达到的产品,而且不愿意把资源投入到大规模、持久的补丁开发和错误修正中去。,3.3.14 网页上的恶意代码:网页bug,网页bug的行为网页bug,有时也称为像素标记(pixel tag)、清晰图片(clear gif)、连续图片(one-by-one gif)、不可见图片(invisible gif)或信标图片(beacon gif)。它们都是一些隐藏在文档中的图片,这些文档都是可以使用HTML标记,如网页、HTML格式的电子邮件消息或电子数据表格等。这些bug对用户而言都是不可见的,但由此可以追踪Web用户行为。,3.3.14 网页上的恶意代码:网页bug (续),网页bug的效果 假如网上冲浪加载C网页,其中包含一个为市场和广告公司的站点M服务的网页 bug,这个bug可以将一个名为cookie的文件放到系统的硬盘上。该cookie包含了一个标识符,它会记录冲浪习惯并对此做粗略统计。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学课件 > 大学教育

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1