网络攻防原理 作者 吴礼发5-8 第06讲-缓冲区溢出攻击.pptVIP

网络攻防原理 作者 吴礼发5-8 第06讲-缓冲区溢出攻击.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六讲 缓冲区溢出攻击 吴礼发,洪征,李华波 (wulifa@ ) 基础知识回顾 什么是程序? 程序是指令的集合,告诉计算机如何完成指定的任务。 程序 = 算法 + 数据结构 什么是进程? 可并发执行的程序在一个数据集合上的运行过程。 动态性;并发性;独立性;异步性;结构特征(程序段、数据段及进程控制块) 内容提要 概念 缓冲区:用户为程序运行时在计算机中申请得的一段连续的内存,它保存了给定类型的数据。 缓冲区溢出:计算机程序向缓冲区内填充的数据位数超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。 缓冲区溢出攻击:(一般情况下,缓冲区溢出引起程序运行错误,但是在攻击者的设计下)向程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他的指令,以达到攻击的目的。 缓冲区溢出的根源 溢出的根源在于编程:如果缓冲区被写满,而程序没有去检查缓冲区边界,也没有停止接收数据,这时缓冲区溢出就会发生。 Unix和MS Windows系统由于要实现更好的性能和功能,往往在数据段中动态地放入可执行的代码。 C/C++语言问题:对数组下标访问边界不做检查或者少做检查。 程序员的编程习惯:忽略对输入数据进行严格的边界检查。 发展历史 1988年,Morris蠕虫攻击VAX 和 Sun机器,使当时Internet的大约10%崩溃。 1996年,Elias Levy发表文章“Smashing the stack for fun and profit”,显示了很多程序都存在缓冲区溢出的危险。缓冲区溢出攻击被广泛关注。 1999年,Dark spyrit AKA Barnaby jack提出使用系统核心dll中的“jmp esp”指令完成shellcode跳转的想法,开创了Win32平台下缓冲区溢出的新思路,大量windows平台下缓冲区溢出漏洞被利用。 2001年8月,“红色代码”利用微软IIS漏洞产生缓冲区存溢出,成为攻击企业网络的“罪魁祸首”。 2003年1月,Slammer蠕虫利用微软SQL漏洞产生缓冲区溢出对全球互联网产生冲击。。同年,“冲击波”蠕虫病毒利用微软RPC远程调用存在的缓冲区漏洞对Windows 2000/XP、Windows Server 2003进行攻击,波及全球网络系统。 危害性和普遍性 缓冲区溢出漏洞可以使一个匿名的Internet用户有机会获得一台主机的部分或全部的控制权。 缓冲区溢出攻击占了远程网络攻击的绝大多数,操作系统中超过50%的安全漏洞都是由内存溢出引起的。 任何平台、任何程序都可能存在缓冲区溢出的漏洞。 1998年Lincoln实验室用来评估入侵检测的的5种远程攻击中,有2种是缓冲区溢出。而在1998年CERT的13份建议中,有9份是是与缓冲区溢出有关的,在1999年,至少有半数的建议是和缓冲区溢出有关的。 Buffer Overflow 普遍性?1999年,CERT安全建议中50%以上同它有关。 严重性?获得系统最高权限。 没有有效预防措施 C语言问题 程序员编程习惯,安全意识薄弱 安全漏洞数量(CERT) 内容提要 三种内存分配模式(1) 静态分配:在进程创建时由系统一次性分配的整块静态内存,这块空间在进程运行期间保持不变。包括: 正文( TEXT)段:指令 数据( DATA)段:初始化的全局静态数据 BSS段:未初始化的全局数据 栈空间 三种内存分配模式(2) 栈(Stack)分配:调用程序的地址信息,函数参数的内存分配。 整个栈空间已在进程创建时分配好。进程刚启动时,栈空间是空的,里面没有实体。 在进程运行期间,对具体实体的栈分配是进程自行生成(压栈)和释放(弹出)实体,系统并不参与。 只要压入的实体的总长度不超过栈空间尺寸,栈分配就与系统无关。如果超过了,就会引发栈溢出错误。 三种内存分配模式(3) 堆(Heap)分配:当进程需要生成实体时,向系统申请分配空间;不再需要该实体时,可以向系统申请回收这块空间。 堆分配使用特定的函数:malloc();new()。 堆分配的空间利用率最高。 三种内存分配模式比较 内存布局—不同区域 内存布局 堆栈 堆栈是一种数据结构。堆栈中的对象具有一个特性:最后一个放入堆栈中的物体总是被最先拿出来,这个特性通常称为后进先出(LIFO)队列。 堆栈中两个最重要的操作是PUSH和POP:PUSH在堆栈的顶部加入一个元素, POP从堆栈顶部移去一个元素, 同时改变堆栈的大小。 堆栈的相关概念 SP:堆栈指针,指向堆栈的顶部; 堆栈的增长方向:向下增长(向内存低地址); FP:帧指针,指向堆栈的帧头。 栈帧的一般结构 函数调用的栈帧变化 假设过程P调用过程Q: Q的参数放在P的栈帧中; 当P调用Q时,P中的返回地址被压入栈

您可能关注的文档

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档