电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

缓冲区溢出攻击.

58页
  • 卖家[上传人]:F****n
  • 文档编号:88099846
  • 上传时间:2019-04-18
  • 文档格式:PPT
  • 文档大小:385.50KB
  • / 58 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、2019/4/18,计算机系统安全原理与技术(第2版),1,应用系统的编程安全,1 缓冲区溢出 2 格式化字符串漏洞 3 安全编程,2019/4/18,计算机系统安全原理与技术(第2版),2,1 缓冲区溢出,1)什么是缓冲区溢出 简单的说,缓冲区溢出(Buffer Overflow)就是通过在程序的缓冲区写入超出其长度的内容,从而破坏程序的堆栈,使程序转而执行其他指令,以达到攻击的目的。,2019/4/18,计算机系统安全原理与技术(第2版),3,1 缓冲区溢出,1)什么是缓冲区溢出 程序是从内存低端向高端按顺序存放的,输入的形参按照自右至左的顺序入栈,而堆栈的生长方向与内存的生长方向相反,因此在堆栈中压入的数据超过预先给堆栈分配的容量时,就会出现堆栈溢出。 简单地说,缓冲区溢出的原因是由于字符串处理等函数没有对数组的越界加以监视和限制,结果覆盖了堆栈数据。缓冲区的溢出有各种不同的类型。,2019/4/18,计算机系统安全原理与技术(第2版),4,1 缓冲区溢出,1)什么是缓冲区溢出 一般而言,有以下几种缓冲区溢出攻击的方式: 1)攻击者可用任意数据覆盖堆栈中变量的内容。 2)覆盖堆栈

      2、中保存的寄存器内容,导致程序崩溃。 3)把堆栈里面的返回地址覆盖,替换成一个自己指定的地方,而在那个地方,可以植入一些精心设计了的代码以达到攻击的目的。,2019/4/18,计算机系统安全原理与技术(第2版),5,1 缓冲区溢出基础知识-寄存器,32位CPU所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags),2019/4/18,计算机系统安全原理与技术(第2版),6,1 缓冲区溢出基础知识-寄存器,4个数据寄存器(EAX、EBX、ECX和EDX): 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。,2019/4/18,计算机系统安全原理与技术(第2版),7,1 缓冲区溢出基础知识-寄存器,2个变址寄存器(ESI和EDI) : 寄存器ESI、EDI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它

      3、们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。,2019/4/18,计算机系统安全原理与技术(第2版),8,1 缓冲区溢出基础知识-寄存器,2个指针寄存器(ESP和EBP) : 它们主要用于访问堆栈内的存储单元,并且规定: EBP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据; ESP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。,2019/4/18,计算机系统安全原理与技术(第2版),9,1 缓冲区溢出基础知识-寄存器,6个段寄存器(ES、CS、SS、DS、FS和GS): 段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。 CPU内部的段寄存器: ECS代码段寄存器(Code Segment Register), EDS数据段寄存器(Data Segment Register),,2019/4/18,计算机系统安全原理与技术(第2版),10,1 缓冲区溢出基础知识-寄存器,EES附加段寄存器(Extr

      4、a Segment Register), ESS堆栈段寄存器(Stack Segment Register), EFS附加段寄存器(Extra Segment Register), EGS附加段寄存器(Extra Segment Register),,2019/4/18,计算机系统安全原理与技术(第2版),11,1 缓冲区溢出基础知识-寄存器,1个指令指针寄存器(EIP): 指令指针EIP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。,12,1 缓冲区溢出基础知识-常用汇编指令,sub:减法指令 第一个参数是被减数所在的寄存器,第二个参数是减数。 add:加法指令 第一个参数是被加数所在的寄存器,第二个参数是加数。 注:sub和add指令常被用来操作堆栈,例如,如果要在堆栈中分配四个四字节长整型数的空间,就没有必要调用四次push指令,简单调用sub esp,16(16=4*4)就可以了,当然也可以调用add指令恢复堆栈。,1 缓冲区溢出基础知识-常用汇编指令,push:入栈指令 32位平台,push指令将一个32位的操作数压入堆栈,导致esp减4

      5、。因为esp指向栈顶,且堆栈是向小地址生长的,所以会导致esp减4。 pop:出桟指令 跟push指令对应,在32位平台,pop指令将一个32的数弹出堆栈,会导致esp加4. pop指令的参数一般是寄存器,将栈顶的数据弹出到寄存器。,2019/4/18,计算机系统安全原理与技术(第2版),14,1 缓冲区溢出基础知识-常用汇编指令,call:调用函数 call指令和jmp指令不同,call指令会先把下一条要执行的指令入栈,然后跳到被调用的函数的地方。所以,call指令相当于push+jmp。 ret:从函数返回 ret指令和jmp指令不同,ret指令会先把函数的返回地址出桟,再跳到返回的地址。所以,ret指令相当于pop+jmp。,栈帧的一般结构,2019/4/18,计算机系统安全原理与技术(第2版),15,local1 local2 localnEBPRET地址参数1 参数2参数n,缓冲区溢出程序1(test),关注函数调用时堆栈变化 void foo(int m,int n) int local; local=m+n; void main() int t1=0x1111; int

      6、t2=0x2222; foo(t1,t2); ,2019/4/18,计算机系统安全原理与技术(第2版),16,缓冲区溢出方式,缓冲区溢出的原因是由于字符串处理等函数( strcpy 、strcmp)没有对数组的越界加以监视和限制,结果覆盖了堆栈数据。有以下几种缓冲区溢出攻击方式: 1)攻击者可用任意数据覆盖堆栈中变量的内容; 2)覆盖堆栈中保存的寄存器内容,导致程序崩溃; 3)把堆栈里面的返回地址覆盖,替换成一个自己指定的地方,而在这个个地方,可以植入一些精心设计了的代码以达到攻击的目的。,2019/4/18,计算机系统安全原理与技术(第2版),17,2019/4/18,计算机系统安全原理与技术(第2版),18,缓冲区溢出程序2,2)覆盖堆栈中变量的内容(7-2pass),2019/4/18,计算机系统安全原理与技术(第2版),19,缓冲区溢出程序3,3)覆盖堆栈中寄存器的内容( 7-3字符覆盖溢出) 在栈上声明的各种变量的位置就紧靠着调用函数的返回地址。如果用户输入的数据越过边界就会将调用函数的返回地址覆盖,造成程序崩溃。,20,缓冲区溢出程序4,void come() printf

      7、(“Success!“); void test(int i) char buf12;/用于发生溢出的数组 int addr4; int k=(int) ,2019/4/18,计算机系统安全原理与技术(第2版),21,2 格式化字符串漏洞,格式化字符串的漏洞产生于数据输出函数中对输出格式解析的缺陷,其根源也是C程序中不对数组边界进行检查的缓冲区错误。 以printf()函数为例: int printf(const char*format,agr1,agr2,); format的内容可能为(%s,%d,%p,%x,%n),将数据格式化后输出。这种函数的问题在于函数printf不能确定数据参数arg1,arg2,究竟在什么地方结束,也就是说,它不知道参数的个数。printf函数只会根据format中的打印格式的数目依次打印堆栈中参数format后面地址的内容。,2019/4/18,计算机系统安全原理与技术(第2版),22,2 格式化字符串漏洞,1printf中的缺陷 第一个printf调用是正确的,第二个调用中则缺少了输出数据的变量列表。那么第二个调用将引起编译错误还是照常输出数据?如果输出

      8、数据又将是什么类型的数据呢?,2019/4/18,计算机系统安全原理与技术(第2版),23,2 格式化字符串漏洞,1printf中的缺陷,2019/4/18,计算机系统安全原理与技术(第2版),24,2 格式化字符串漏洞,2用printf读取内存数据 输入“%p,%p,%p”,实际上可以读出栈中的数据,2019/4/18,计算机系统安全原理与技术(第2版),25,2 格式化字符串漏洞,3用printf向内存写数据 在格式化控制符中,有一种鲜为人知的控制符%n。这个控制符用于把当前输出的所有数据的长度写回一个变量中去,2019/4/18,计算机系统安全原理与技术(第2版),26,2 格式化字符串漏洞,3用printf向内存写数据,2019/4/18,计算机系统安全原理与技术(第2版),27,2 格式化字符串漏洞,3用printf向内存写数据,这是因为程序中将变量num的地址压入堆栈,作为printf()的第二个参数,“%n”会将打印总长度保存到对应参数的地址中去。打印结果见图7-25,0x616161的十进制值为1633771873,按照DWORD类型,其值长度为20。,2019/4/1

      9、8,计算机系统安全原理与技术(第2版),28,3 安全编程,程序的正确性是由程序的编写者来保证的。为了避免出现缓冲区溢出的漏洞,在编写程序的一开始就必须将安全因素考虑在内。 忽略了编码的安全性大致来说有两种。 第一种是直接进行设计、编写、测试,然后发布,忘记了程序的安全性。或者设计者自认为已经考虑到了,而做出了错误的设计。 第二种错误是在程序完成以后才考虑添加安全因素,在已经完成了的功能外包裹上安全功能。这样做不仅要付出非常昂贵的代价,更重要的是添加的安全功能有可能会影响已经实现的功能,甚至会造成某些功能的不可实现。,2019/4/18,计算机系统安全原理与技术(第2版),29,3 安全编程,1C语言的安全编程 (1)对内存访问错误的检测和修改。 (2)对于缓冲区溢出的覆盖错误,可由程序员预设缓冲区的大小。 (3)指针引用是C中最灵活、最核心、最复杂,也是最易出错的部分。 (4)出于保密的需要,在程序设计时要涉及到创建密钥或密码等问题,具体到C程序设计中则是随机数的选取和使用问题。,2019/4/18,计算机系统安全原理与技术(第2版),30,3 安全编程,1C语言的安全编程 (5)C语言没有提供异常处理机制,其异常检测处理是由程序员预设完成的。 微软的Michael Howard与David LeBlanc所合著的“Writing Secure Code”(编写安全的代码)一书中集中讨论了编写安全代码的方方面面,读者可进一步阅读。,2019/4/18,计算机系统安全原理与技术(第2版),31,7.4 软件保护,7.4.1 软件技术保护的基本原则 7.4.2 密码保护技术 7.4.3 电子注册保护技术 7.4.4 结合硬件的保护技术 7.4.5 基于数字签名的保护技术 7.4.6 软件水印 7.4.7 软件的反动态跟踪技术,2019/4/18,计算机系统安全原理与技术(第2版),32,7.4.1 安全编程,软件技术保护的基本原则 (1)实用性。用户购买的软件,当然会频繁地使用,对合法用户来说,如果在使用或安装过程中加入太多的障碍,甚至需要改变计算机的硬件结构,会

      《缓冲区溢出攻击.》由会员F****n分享,可在线阅读,更多相关《缓冲区溢出攻击.》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.