好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

第8讲缓冲区溢出攻击及防御技术课件.ppt

143页
  • 卖家[上传人]:des****85
  • 文档编号:320666783
  • 上传时间:2022-07-01
  • 文档格式:PPT
  • 文档大小:1.04MB
  • / 143 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 网络安全攻防技术讲义第八讲 缓冲区溢出攻击及防御技术1网络安全攻防技术讲义一二请在这里输入您的主要叙述内容整体概述三请在这里输入您的主要叙述内容请在这里输入您的主要叙述内容2网络安全攻防技术讲义2022/7/13本章内容安排o8.1 缓冲区溢出概述 o8.2 缓冲区溢出原理 o8.3 缓冲区溢出的过程 o8.4 代码植入技术o8.5 实例:ida溢出漏洞攻击o8.6 缓冲区溢出的防御 o8.7 小结 3网络安全攻防技术讲义8.1 缓冲区溢出概述o什么是缓冲区?它是包含相同数据类型实例的一个连续的计算机内存块是程序运行期间在内存中分配的一个连续的区域,可以保存相同数据类型的多个实例,用于保存包括字符数组在内的各种数据类型o所谓溢出,就是灌满, 使内容物超过顶端, 边缘,或边界,其实就是所填充的数据超出了原有的缓冲区边界o两者结合进来,所谓缓冲区溢出,就是向固定长度的缓冲区中写入超出其预先分配长度的内容,造成缓冲区中数据的溢出,从而覆盖了缓冲区周围的内存空间黑客借此精心构造填充数据,导致原有流程的改变,让程序转而执行特殊的代码,最终获取控制权2022/7/14网络安全攻防技术讲义8.1 缓冲区溢出概述o利用缓冲区溢出漏洞进行攻击最早可追溯到1988年Morris蠕虫,它所利用的就是fingerd程序的缓冲区溢出漏洞。

      o1989年,Spafford提交了一份分析报告,描述了VAX机上BSD版Unix的Fingerd的缓冲区溢出程序的技术细节,引起了一部分安全人士对这个研究领域的重视o1996年,Aleph One发表了题为“Smashing the stack for fun and profit”的文章后,首次详细地介绍了Unix/Linux下栈溢出攻击的原理、方法和步骤,揭示了缓冲区溢出攻击中的技术细节o1999年w00w00安全小组的Matt Conover写了基于堆缓冲区溢出专著,对堆溢出的机理进行了探索2022/7/15网络安全攻防技术讲义8.1 缓冲区溢出概述oWindows系统中缓冲区溢出的事例更是层出不穷o2001年“红色代码”蠕虫利用微软IIS Web Server中的缓冲区溢出漏洞使300 000多台计算机受到攻击;o2003年1月,Slammer 蠕虫爆发,利用的是微软SQL Server 2000中的缺陷;o2004年5月爆发的“振荡波”利用了Windows系统的活动目录服务缓冲区溢出漏洞;o2005年8月利用Windows即插即用缓冲区溢出漏洞的“狙击波”被称为历史上最快利用微软漏洞进行攻击的恶意代码。

      o2008年底至2009年的Conficker蠕虫利用的是Windows处理远程RPC请求时的漏洞(MS08-067)6网络安全攻防技术讲义8.1 缓冲区溢出概述o目前,利用缓冲区溢出漏洞进行的攻击已经占所有系统攻击总数的80%以上 o缓冲区溢出攻击之所以日益普遍,其原因在于各种操作系统和应用软件上存在的缓冲区溢出问题数不胜数,而其带来的影响不容小觑o对缓冲区溢出漏洞攻击,可以导致程序运行失败、系统崩溃以及重新启动等后果o更为严重的是,可以利用缓冲区溢出执行非授权指令,甚至取得系统特权,进而进行各种非法操作o如何防止和检测出利用缓冲区溢出漏洞进行的攻击,就成为防御网络入侵以及入侵检测的重点之一 2022/7/17网络安全攻防技术讲义8.1 缓冲区溢出概述o与其他的攻击类型相比,缓冲区溢出攻击n不需要太多的先决条件n杀伤力很强n技术性强o缓冲区溢出比其他一些黑客攻击手段更具有破坏力和隐蔽性这也是利用缓冲区溢出漏洞进行攻击日益普遍的原因2022/7/18网络安全攻防技术讲义8.1 缓冲区溢出概述o破坏性:n它极容易使服务程序停止运行,服务器死机甚至删除服务器上的数据o隐蔽性:n首先,漏洞被发现之前,程序员一般是不会意识到自己的程序存在漏洞的(事实上,漏洞的发现者往往并非编写者),于是疏于监测;n其次,被植入的攻击代码一般都很短,执行时间也非常短,很难在执行过程中被发现,而且其执行并不一定会使系统报告错误,并可能不影响正常程序的运行;2022/7/19网络安全攻防技术讲义8.1 缓冲区溢出概述o隐蔽性:n第三,由于漏洞存在于防火墙内部的主机上,攻击者可以在防火墙内部堂而皇之地取得本来不被允许或没有权限的控制权;n第四,攻击的随机性和不可预测性使得防御变得异常艰难,没有攻击时,被攻击程序本身并不会有什么变化,也不会存在任何异常的表现;n最后,缓冲区溢出漏洞的普遍存在,针对它的攻击让人防不胜防(各种补丁程序也可能存在着这种漏洞)。

      10网络安全攻防技术讲义8.2 缓冲区溢出原理o8.2.1 栈溢出o8.2.2 堆溢出o8.2.3 BSS溢出o8.2.4 格式化串溢出11网络安全攻防技术讲义2022/7/1128.2 缓冲区溢出原理o当程序运行时,计算机会在内存区域中开辟一段连续的内存块,包括代码段、数据段和堆栈段三部分12网络安全攻防技术讲义8.2 缓冲区溢出原理o程序在内存中的存放形式13网络安全攻防技术讲义8.2 缓冲区溢出原理o代码段(.text),也称文本段(Text Segment),存放着程序的机器码和只读数据,可执行指令就是从这里取得的如果可能,系统会安排好相同程序的多个运行实体共享这些实例代码这个段在内存中一般被标记为只读,任何对该区的写操作都会导致段错误(Segmentation Fault)o数据段,包括已初始化的数据段(.data)和未初始化的数据段(.bss),前者用来存放保存全局的和静态的已初始化变量,后者用来保存全局的和静态的未初始化变量数据段在编译时分配 14网络安全攻防技术讲义8.2 缓冲区溢出原理o堆栈段分为堆和栈o堆(Heap):位于BSS内存段的上边,用来存储程序运行时分配的变量。

      o堆的大小并不固定,可动态扩张或缩减其分配由malloc()、new()等这类实时内存分配函数来实现当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)o堆的内存释放由应用程序去控制,通常一个new()就要对应一个delete(),如果程序员没有释放掉,那么在程序结束后操作系统会自动回收15网络安全攻防技术讲义8.2 缓冲区溢出原理o栈(Stack)是一种用来存储函数调用时的临时信息的结构,如函数调用所传递的参数、函数的返回地址、函数的局部变量等o在程序运行时由编译器在需要的时候分配,在不需要的时候自动清除 o栈的特性: 最后一个放入栈中的物体总是被最先拿出来,这个特性通常称为先进后出(FILO)队列o栈的基本操作: nPUSH操作:向栈中添加数据,称为压栈,数据将放置在栈顶;nPOP操作:POP操作相反,在栈顶部移去一个元素,并将栈的大小减一,称为弹栈16网络安全攻防技术讲义堆和栈的区别o分配和管理方式不同n堆是动态分配的,其空间的分配和释放都由程序员控制n栈由编译器自动管理栈有两种分配方式:静态分配和动态分配。

      静态分配由编译器完成,比如局部变量的分配动态分配由alloca()函数进行分配,但是栈的动态分配和堆是不同的,它的动态分配是由编译器进行释放,无须手工控制o产生碎片不同n对堆来说,频繁的new/delete或者malloc/free势必会造成内存空间的不连续,造成大量的碎片,使程序效率降低n对栈而言,则不存在碎片问题,因为栈是先进后出的队列,永远不可能有一个内存块从栈中间弹出o生长方向不同n堆是向着内存地址增加的方向增长的,从内存的低地址向高地址方向增长n栈的生长方向与之相反,是向着内存地址减小的方向增长,由内存的高地址向低地址方向增长17网络安全攻防技术讲义8.2 缓冲区溢出原理o在这里,我们假设现在有一个程序, 它的函数调用顺序如下 main() -; func_1() -; func_2() -; func_3() 即: 主函数main调用函数func_1; 函数func_1调用函数func_2; 函数func_2调用函数func_3其详细结构图如下页图所示2022/7/118网络安全攻防技术讲义2022/7/119网络安全攻防技术讲义栈例子(1)void function(int a, int b, in c)char buffer15;char buffer210; void main (int argc, char *argv)char large_string256;function(1, 2, 3);程序从此开始执行程序流程转到此函数20网络安全攻防技术讲义Main函数栈Large_string(局部变量)保存的框架指针(上一个FP)返回的指令指针argv内存低端内存高端填充方向argcSPMain函数的栈帧首先,以从后往前的顺序将function的三个参数压入栈中:21网络安全攻防技术讲义Function函数被调用后Large_string(局部变量)保存的框架指针(上一个FP)返回的指令指针argv内存低端内存高端填充方向argcSPMain函数的栈帧cba返回的指令指针(RET)上一个FP(SFP)(main函数的FP)buffer1buffer2Function函数的栈帧然后,调用function()。

      指令call会把指令指针(IP)也压入栈中,将帧指针EBP压入栈中然后把当前的SP复制到EBP,使其成为新的帧指针接下来将SP的值减小,为局部变量保留空间22网络安全攻防技术讲义程序在内存中的影像o随着函数调用层数的增加,函数栈帧是一块块地向内存低地址方向延伸的 o随着进程中函数调用层数的减少,即各函数调用的返回,栈帧会一块块地被遗弃而向内存的高址方向回缩 o各函数的栈帧大小随着函数的性质的不同而不等,由函数的局部变量的数目决定o在缓冲区溢出中,我们主要关注数据区和堆栈区2022/7/123网络安全攻防技术讲义程序所使用的栈o在使用栈时,引用栈帧需要借助两个寄存器o一个是SP(ESP),即栈顶指针,它随着数据入栈出栈而发生变化o另一个是BP(EBP),即基地址指针,它用于标识栈中一个相对稳定的位置,通过BP,再加上偏移地址,可以方便地引用函数参数以及局部变量2022/7/124网络安全攻防技术讲义程序所使用的栈o函数被调用的时候,栈中的压入情况如下:FuncFuncFuncFunc函数中的局部变量函数中的局部变量调用调用FuncFuncFuncFunc函数前的函数前的EBPEBPEBPEBP退出退出FuncFuncFuncFunc函数后的返回地址函数后的返回地址传递给传递给FuncFuncFuncFunc的实参的实参内存低地址内存低地址内存高地址内存高地址最先压入栈最后压入栈2022/7/125网络安全攻防技术讲义程序所使用的栈o在局部变量的下面,是前一个调用函数的EBP,接下来就是返回地址。

      o如果局部变量发生溢出,很有可能会覆盖掉EBP甚至RET(返回地址),这就是缓冲区溢出攻击的“奥秘”所在2022/7/126网络安全攻防技术讲义8.2 缓冲区溢出原理o如果在堆栈中压入的数据超过预先给堆栈分配的容量时,就会出现堆栈溢出,从而使得程序运行失败;如果发生溢出的是大型程序还有可能会导致系统崩溃 2022/7/127网络安全攻防技术讲义8.2.1 栈溢出o程序中发生函数调用时,计算机做如下操作:首先把指令寄存器EIP(它指向当前CPU将要运行的下一条指令的地址)中的内容压入栈,作为程序的返回地址(下文中用RET表示);之后放入栈的是基址寄存器EBP,它指向当前函数栈帧(stack frame)的底部;然后把当前的栈指针ESP拷贝到EBP,作为新的基地址,最后为本地变量的动态存储分配留出一定空间,并把ESP减去适当的数值28网络安全攻防技术讲义8.2.1 栈溢出实例o我们来看一段简单程序的执行过程中对栈的操作和溢出的产生过程include int 。

      点击阅读更多内容
      相关文档
      高等学校学生手册.doc 2025年区教育系统招聘编外教师储备人才事业单位考试押题.docx 2025年秋季青岛版三年级数学上册认识轴对称现象教学课件.pptx 2025年秋季青岛版三年级数学上册用乘法估算解决问题教学课件.pptx 2025年秋季青岛版三年级数学上册两、三位数乘一位数的笔算(不进位)教学课件.pptx 2025年秋季青岛版三年级数学上册1200张纸有多厚教学设计范文.docx 2025年秋季青岛版三年级数学上册多位数除以一位数教学课件.pptx 2025年秋季青岛版三年级数学上册认识平移、旋转现象教学课件.pptx 2025年秋季青岛版三年级数学上册多位数乘一位数教学设计范本.docx 2025年秋季青岛版三年级数学上册认识平移与旋转教学设计范文.docx 2025年秋季青岛版三年级数学上册乘数中间有0或末尾有0的乘法教学课件.pptx 2025年秋季青岛版三年级数学上册两位数乘一位数的笔算(进位)教学课件.pptx 2025年秋季青岛版三年级数学上册《两、三位数乘一位数的笔算(不进位)》教学设计与意图.docx 2025年秋季青岛版三年级数学上册我学会了吗教学课件.pptx 2025年连云港市妇幼保健院招聘专业技术人员考试笔试试题.docx 2025年深圳市大鹏新区发展和财政局招聘考试笔试试卷.docx 2025年绵阳市梓潼县财政投资评审中心招聘考试试题.docx 2025年来宾市妇幼保健院招聘考试笔试试题.docx 2025年无极县教育系统招聘教师考试笔试试卷.docx 2025年灵山县第三中学调配教师考试笔试试题.docx
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.