版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 缓冲区溢出原理软件质量软件质量问题引发的事故软件质量问题引发的事故 根据美国航空业的调查说明,由于软件质量问题导致的经济损失宏大: 1996年损失6.4亿美元、1997年损失1.17亿美元、1998年损失2.55亿美元、1999年损失16亿美元。“运行正确的程序就是高质量的程序吗?运行正确的程序就是高质量的程序吗?也许运行速度很低并且浪费内存;也许运行速度很低并且浪费内存;性能差性能差也许代码的平安性很差;也许代码的平安性很差;有破绽有破绽也许代码写得一塌糊涂;也许代码写得一塌糊涂;可维护性差可维护性差也许也许已经没有也许已经没有也许 软件质量McCall的软件质量模型产品运行产品修改产品转
2、移正确性可靠性效率 安全性完整性易用性可维护性灵活性可测试性可移植性重复使用性伸缩性软件开发的平安性随着企业一窝蜂似地采用电子商务,平安性不再是一件微缺乏道的事情了,它已经开场成为一个重要的问题。 作为开发人员,必须保证所编写的系统的平安性。但是,平安性不是一个可被添加到现有系统的功能部件。和许多用收缩性薄膜包装用户商品的供给商所认为的相反,不能在完成系统之后把有效的平安性象拧螺丝一样拧到系统中去。平安性是软件系统在系统范围存在的特性。因此,从设计软件的最开场就应该考虑到平安性。平安性就象保险、可依赖性、可靠性或任何其它的软件 特性。就如同使用一个不可靠系统再添加一个“可靠性模块然后希望获得无
3、错的软件是不可能的一样,把平安性象另外一个功能部件一样添加到应用程序也是不可能的。“插入修补方法不是一个好方法 许多众所周知的软件供给商好象不理解平安性不是一种可添加的功能部件。他们继续以惊人的速度设计并消费产品,而很少注意平安性。他们只有在其产品遭到公开地并且经常是突如其来地损害时才开场担忧平安性。然后,他们匆忙赶制出一个补丁程序,而不是意识到从一开场就考虑平安性是更好的方法。软件开发的平安性n这种方法在电子商务应用程序中行不通。 问题包括:开发人员只可以修补他们知道的问题。攻击者可能会找到他们决不会向开发人员报告的问题。 由于系统管理员通常工作过度,并且他们不想更改“有效的系统,因此他们一
4、般不会应用补丁程序。有时管理员甚至没有意识到应该将某一重要的补丁程序应用到系统上。 供给商们通常是迫于市场压力才赶制出补丁程序,因此经常会在补丁程序中引入新的问题。 补丁程序仅仅只是修补某一问题的病症,它们不能解决根本的原因。 n因此,我们应该防止遇到试图修补一个遭到攻击者猛烈攻击的问题的绝望场面。从简单的经济性考虑,在发布软件系统之前找到并除去错误的本钱比发布后再试图修复系统的本钱要低得多也有效得多。通过设计平安系统、仔细实现该系统、然后在发布之前全面测试该系统,我们可以消除这些问题,并开发出一个不依赖补丁程序的真正平安的系统。平安保证的四招:平安性保证 设计系统时要有平安性观念。 应该在开
5、发周期的所有阶段中考虑平安性,而不是事后想到它时再补救。平安性并不是一个随时都可以添加到系统中的根本功能部件。平安性就象容错;它是一个需要有效、仔细地规划和设计的遍布于整个系统的特性。 例如:从运行支撑环境平安角度出发,应考虑操作系统、数据库、应用效劳器、第三方控件等的平安性;从用户的使用角度出发,应考虑权限管理、身份验证;从数据的平安性出发,信誉卡号是敏感信息,应该保护它们防止可能的窃听 根据和预期的风险分析系统。 识别潜在的风险、发生这些风险的可能性以及它们可能到达的严重程度。首先识别的攻击可能会应用到身边系统的何处,然后按严重性给它们划分等级。风险的相对严重性非常依赖于身边系统的需要和目
6、的。风险评估是确定如何分配测试和分析资源的关键。编写平安代码 平安性测试技术 进展风险测试。 从设计过程开场对破坏的系统重复以上步骤。静态分析,它不实际运行代码而只是通过查看代码以找出潜在的脆弱性动态分析,它通过实际运行代码来测试代码。应用常见平安性技术 许多系统架构设计师的一个常见的误解是,使系统平安的方法归根结底是防火墙和密码术。破绽概述Bug与破绽破绽挖掘破绽分析破绽利用缓冲区溢出破绽缓冲区溢出破绽十年来最大的平安问题十年来最大的平安问题在信息平安日益被人们所关注的今天,缓冲区溢出毫无疑问的是最大的平安威胁之一。Internet上的第一例蠕虫Morris攻击,就是利用了fingerd的缓
7、冲区溢出破绽。SANS评选出的2005年威胁最大的20个破绽中,有8个跟缓冲区溢出有关。根据CERT的统计数据,近几年与缓冲区溢出有关的平安事件在50%以上。代码注入攻击是指攻击者本地或者远程向进程的线性地址空间注入一段可执行的二进制代码,然后通过某种手段修改进程的正常控制流程,使进程执行这段代码,从而到达预定目的的攻击行为。缓冲区溢出攻击 在严格意义上是指这一类攻击的一个子类。由于攻击者注入代码的位置通常在缓冲区,而且修改进程的正常流程往往需要利用对缓冲区缺乏边界检查的编程错误,所以,以“缓冲区溢出攻击指代全体。缓冲区溢出的原理当程序写入超过缓冲区的边界时,这就是所谓的“缓冲区溢出。发生缓冲
8、区溢出时,会覆盖下一个相邻的内存块。由于 C 语言本质上的不平安性,所以它允许程序随意或者更准确地说是完全出于偶尔溢出缓冲区。没有运行时检查来这一防止写入超过缓冲区末尾,所以程序员必须在其自己的代码中执行这一检查,否那么继续下去会遇到问题。通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以到达攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。例如下面程序:void functionchar *str char buffer16; strcpybuffer,str;为什么缓冲区溢出是平安性问题?问题问题:往杯子里倒过多的水使水
9、溢出杯子对人能造成多大的伤害?当缓冲区溢出时,额外的数据会摧残程序将来可能要访问的其它有用的数据。有时,这些其它数据的更改会导致平安性问题。读取或写入超过缓冲区的末尾时,会导致许多不同并且通常是不可意料的行为:1 程序的执行很奇怪,2 程序完全失败,或者 3 程序可以继续,而且在执行中没有任何明显不同。缓冲区溢出的副作用取决于:写入的数据中有多少超过缓冲区边界 当缓冲区已满并且溢出时,覆盖了哪些数据假如有的话 程序是否试图读取溢出期间被覆盖的数据 哪些数据最终交换被覆盖的内存 存在缓冲区溢出的程序的不确定行为使得对它们的调试异常棘手。最坏的情况是:程序可能正发生缓冲区溢出,但根本没有任何副作用
10、的迹象。因此,缓冲区溢出问题常常在标准测试期间是发现不了的。认识缓冲区溢出的重要一点是:在发生溢出时,会潜在地修改碰巧分配在缓冲区附近的任何数据。缓冲区溢出破绽的危害 缓冲区溢出破绽比其他一些黑客攻击手段更具有破坏力和隐蔽性。这也是利用缓冲区溢出破绽进展攻击日益普遍的原因。它极容易使效劳程序停顿运行,效劳器死机甚至删除效劳器上的数据。它的隐蔽性主要表如今下面几点:首先,破绽被发现之前一般程序员是不会意识到自己的程序存在破绽,破绽的发现者往往并非编写程序的程序员,从而忽略监测;其次,shellcode都很短,执行时间也非常短,很难在执行过程中被发现;第三,由于破绽存在于防火墙内部,攻击者所发送的
11、字符串一般情况下防火墙不会阻拦,而攻击者通过执行shellcode所获得的是本来不被允许或没有权限的操作,在防火墙看来也是合理合法的。防火墙在对远程缓冲区溢出攻击的监测方面有先天的缺乏;第四,一个完好的shellcode的执行并不一定会使系统报告错误,并可能不影响正常程序的运行;第五,攻击的随机性和不可预测性使得防御攻击变得异常困难,而没有攻击时,攻击程序并不会有什么变化这和木马有着本质的区别,这也是堆栈溢出最难被 发现的原因;最后,缓冲区溢出破绽的普遍存在,使得针对这种破绽的攻击防不胜防各种补丁程序也可能存在着这种破绽。另外,还存在着攻击者成心分布存在破绽的应用程序的可能。攻击者还可以借用木
12、马植入的方法,成心在被攻击者的系统中留下存在破绽的程序,这样做不会因为含有非法字段而被防火墙回绝;或者利用病毒传播的方式来传播有破绽的程序,和病毒不同的是,它在一个系统中只留下一份拷贝 要发现这种情况几乎是不可能的。 缓冲区攻击的目的缓冲区攻击的目的n攻击的目的利用缓冲区破绽造成被攻击者的效劳回绝利用缓冲区破绽提升权限直接利用远程效劳的缓冲区溢出破绽,从远程得到目的的控制权。n攻击程序所要解决的两个问题在被攻击程序的地址空间安排适当的代码。通过适当的初始化存放器和内存,让程序跳转到入侵者安排的地址空间执行。缓冲区溢出攻击策略之瞒天过海代码植入/以下代码执行数组shellcodeunsigned
13、 char shellcode =xEBx42x8Bx59x3Cx8Bx5Cx0Bx78x03xD9x8Bx73x20 x03xF1x33xFFx4Fx47xADx33xEDx0FxB6x14x01x38xF2x74x08xC1xCDx03x03xEAx40 xEBxF0 x3Bx6Cx24x04x75xE6x8Bx73x24x03xF1x66x8Bx3Cx7Ex8Bx73x1Cx03xF1x8Bx04xBEx03xC1x5Bx5Fx53xC3xEBx4Fx33xC0 x64x33x40 x30 x8Bx40 x0Cx8Bx70 x1CxADx8Bx48x08x58x33xDBx33xFFx6
14、6xBFx33x32x57x68x75x73x65x72x8BxFCx53x51x53x50 x50 x53x57x68x54x12x81x20 xE8x8AxFFxFFxFFxFFxD0 x8BxC8x68x25x59x3AxE4xE8x7CxFFxFFxFFxFFxD0 x59x68x97x19x6Cx2DxE8x6FxFFxFFxFFxFFxD0 xE8xACxFFxFFxFFhello,world!;void main void *&shellcode0; 缓冲区溢出攻击策略之瞒天过海代码植入将需要运行的代码放从文件中读入#include void mainunsigned char
15、shellcode1000;FILE * fp = fopenshellcode.txt,r;freadshellcode,166,1,fp;shellcode166=0;fclosefp;void *&shellcode0; 进一步联想,假如是一个网络程序例如效劳器,从网络接收一串数据保存到数组中并运行,而这串代码又是恶意代码. 傻不傻啊,居然会有这样的软件设计学生甲留!OK,他不能,我们让他能!缓冲区溢出攻击之第二招:劫持EIP。缓冲区溢出攻击策略之劫持EIPEIP的作用函数调用的本质改变程序的执行流程#include void MyCopy char* str char buff4; s
16、trcpy buff, str ; void main char input = aaaaaaaaaaaa; MyCopy input ; n#include string.h void MyCopy char* str char buff4; strcpy buff, str ; nint main char buffer = aaaaaaaax12x45xfax7f x55x8BxECx33xC0 x50 x50 x50 xC6x45xF4x4DxC6x45xF5x53 xC6x45xF6x56xC6x45xF7x43xC6x45xF8x52xC6x45xF9x54xC6x45xFAx2ExC6 x45xFBx4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 脑出血临床症状解析及护理原则
- 华光花园设计软件介绍
- 市场调研方式方法
- 抗原试剂盒的使用方法
- 考研专业选择方法指标
- 哮喘病的临床表现及护理要点
- 有营养的宝宝小班
- 放射科胸部CT检查注意事项
- 家庭康复精细运动训练指南
- 皮肤科普常见病
- 家谱中奶奶的纪传范文
- 夯实基础33课件讲解
- 中学生寝室内务及管理
- 2023全国卷甲卷应用文写作课件高三英语二轮复习
- 恶性肿瘤支持治疗
- 《初中女生的青春期教育》专题课件
- 影视画面分析-镜头课件
- 箱变技术要求
- 闪亮的星星-悦纳自我(说课稿)-一年级心理健康通用版
- GB/T 9740-2008化学试剂蒸发残渣测定通用方法
- GB/T 25098-2010绝缘体带电清洗剂使用导则
评论
0/150
提交评论