缓冲区溢出攻击课件.ppt
《缓冲区溢出攻击课件.ppt》由会员分享,可在线阅读,更多相关《缓冲区溢出攻击课件.ppt(58页珍藏版)》请在三一办公上搜索。
1、2022/12/4,计算机系统安全原理与技术(第2版),1,应用系统的编程安全,1 缓冲区溢出2 格式化字符串漏洞3 安全编程,2022/12/4,计算机系统安全原理与技术(第2版),2,1 缓冲区溢出,1)什么是缓冲区溢出简单的说,缓冲区溢出(Buffer Overflow)就是通过在程序的缓冲区写入超出其长度的内容,从而破坏程序的堆栈,使程序转而执行其他指令,以达到攻击的目的。,2022/12/4,计算机系统安全原理与技术(第2版),3,1 缓冲区溢出,1)什么是缓冲区溢出程序是从内存低端向高端按顺序存放的,输入的形参按照自右至左的顺序入栈,而堆栈的生长方向与内存的生长方向相反,因此在堆栈
2、中压入的数据超过预先给堆栈分配的容量时,就会出现堆栈溢出。简单地说,缓冲区溢出的原因是由于字符串处理等函数没有对数组的越界加以监视和限制,结果覆盖了堆栈数据。缓冲区的溢出有各种不同的类型。,2022/12/4,计算机系统安全原理与技术(第2版),4,1 缓冲区溢出,1)什么是缓冲区溢出一般而言,有以下几种缓冲区溢出攻击的方式:1)攻击者可用任意数据覆盖堆栈中变量的内容。2)覆盖堆栈中保存的寄存器内容,导致程序崩溃。3)把堆栈里面的返回地址覆盖,替换成一个自己指定的地方,而在那个地方,可以植入一些精心设计了的代码以达到攻击的目的。,2022/12/4,计算机系统安全原理与技术(第2版),5,1
3、缓冲区溢出基础知识-寄存器,32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags),2022/12/4,计算机系统安全原理与技术(第2版),6,1 缓冲区溢出基础知识-寄存器,4个数据寄存器(EAX、EBX、ECX和EDX):数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。,2022/12/4,计算机系统安全原理与技术(第2版),7,1 缓冲
4、区溢出基础知识-寄存器,2个变址寄存器(ESI和EDI) :寄存器ESI、EDI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。,2022/12/4,计算机系统安全原理与技术(第2版),8,1 缓冲区溢出基础知识-寄存器,2个指针寄存器(ESP和EBP) :它们主要用于访问堆栈内的存储单元,并且规定:EBP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据; ESP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。,2022/12/4,计算
5、机系统安全原理与技术(第2版),9,1 缓冲区溢出基础知识-寄存器,6个段寄存器(ES、CS、SS、DS、FS和GS):段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。CPU内部的段寄存器:ECS代码段寄存器(Code Segment Register),EDS数据段寄存器(Data Segment Register),,2022/12/4,计算机系统安全原理与技术(第2版),10,1 缓冲区溢出基础知识-寄存器,EES附加段寄存器(Extra Segment Register),
6、ESS堆栈段寄存器(Stack Segment Register),EFS附加段寄存器(Extra Segment Register),EGS附加段寄存器(Extra Segment Register),,2022/12/4,计算机系统安全原理与技术(第2版),11,1 缓冲区溢出基础知识-寄存器,1个指令指针寄存器(EIP):指令指针EIP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。,12,1 缓冲区溢出基础知识-常用汇编指令,sub:减法指令第一个参数是被减数所在的寄存器,第二个参数是减数。add:加法指令第一个参数是被加数所在的寄存器,第二个参数是
7、加数。注:sub和add指令常被用来操作堆栈,例如,如果要在堆栈中分配四个四字节长整型数的空间,就没有必要调用四次push指令,简单调用sub esp,16(16=4*4)就可以了,当然也可以调用add指令恢复堆栈。,13,1 缓冲区溢出基础知识-常用汇编指令,ush:入栈指令32位平台,push指令将一个32位的操作数压入堆栈,导致esp减4。因为esp指向栈顶,且堆栈是向小地址生长的,所以会导致esp减4。pop:出桟指令跟push指令对应,在32位平台,pop指令将一个32的数弹出堆栈,会导致esp加4. pop指令的参数一般是寄存器,将栈顶的数据弹出到寄存器。,2022/12/4,计算
8、机系统安全原理与技术(第2版),14,1 缓冲区溢出基础知识-常用汇编指令,call:调用函数call指令和jmp指令不同,call指令会先把下一条要执行的指令入栈,然后跳到被调用的函数的地方。所以,call指令相当于push+jmp。 ret:从函数返回ret指令和jmp指令不同,ret指令会先把函数的返回地址出桟,再跳到返回的地址。所以,ret指令相当于pop+jmp。,栈帧的一般结构,2022/12/4,计算机系统安全原理与技术(第2版),15,local1 local2 localnEBPRET地址参数1 参数2参数n,缓冲区溢出程序1(test),关注函数调用时堆栈变化void fo
9、o(int m,int n)int local;local=m+n; void main()int t1=0 x1111;int t2=0 x2222;foo(t1,t2);,2022/12/4,计算机系统安全原理与技术(第2版),16,缓冲区溢出方式,缓冲区溢出的原因是由于字符串处理等函数( strcpy 、strcmp)没有对数组的越界加以监视和限制,结果覆盖了堆栈数据。有以下几种缓冲区溢出攻击方式:1)攻击者可用任意数据覆盖堆栈中变量的内容;2)覆盖堆栈中保存的寄存器内容,导致程序崩溃;3)把堆栈里面的返回地址覆盖,替换成一个自己指定的地方,而在这个个地方,可以植入一些精心设计了的代码以
10、达到攻击的目的。,2022/12/4,计算机系统安全原理与技术(第2版),17,2022/12/4,计算机系统安全原理与技术(第2版),18,缓冲区溢出程序2,2)覆盖堆栈中变量的内容(7-2pass),2022/12/4,计算机系统安全原理与技术(第2版),19,缓冲区溢出程序3,3)覆盖堆栈中寄存器的内容( 7-3字符覆盖溢出)在栈上声明的各种变量的位置就紧靠着调用函数的返回地址。如果用户输入的数据越过边界就会将调用函数的返回地址覆盖,造成程序崩溃。,缓冲区溢出程序4,void come()printf(Success!);void test(int i)char buf12;/用于发生溢
11、出的数组int addr4;int k=(int),20,2022/12/4,计算机系统安全原理与技术(第2版),21,2 格式化字符串漏洞,格式化字符串的漏洞产生于数据输出函数中对输出格式解析的缺陷,其根源也是C程序中不对数组边界进行检查的缓冲区错误。以printf()函数为例:int printf(const char*format,agr1,agr2,);format的内容可能为(%s,%d,%p,%x,%n),将数据格式化后输出。这种函数的问题在于函数printf不能确定数据参数arg1,arg2,究竟在什么地方结束,也就是说,它不知道参数的个数。printf函数只会根据format中
12、的打印格式的数目依次打印堆栈中参数format后面地址的内容。,2022/12/4,计算机系统安全原理与技术(第2版),22,2 格式化字符串漏洞,1printf中的缺陷第一个printf调用是正确的,第二个调用中则缺少了输出数据的变量列表。那么第二个调用将引起编译错误还是照常输出数据?如果输出数据又将是什么类型的数据呢?,2022/12/4,计算机系统安全原理与技术(第2版),23,2 格式化字符串漏洞,1printf中的缺陷,2022/12/4,计算机系统安全原理与技术(第2版),24,2 格式化字符串漏洞,2用printf读取内存数据输入“%p,%p,%p”,实际上可以读出栈中的数据,2
13、022/12/4,计算机系统安全原理与技术(第2版),25,2 格式化字符串漏洞,3用printf向内存写数据在格式化控制符中,有一种鲜为人知的控制符%n。这个控制符用于把当前输出的所有数据的长度写回一个变量中去,2022/12/4,计算机系统安全原理与技术(第2版),26,2 格式化字符串漏洞,3用printf向内存写数据,2022/12/4,计算机系统安全原理与技术(第2版),27,2 格式化字符串漏洞,3用printf向内存写数据,这是因为程序中将变量num的地址压入堆栈,作为printf()的第二个参数,“%n”会将打印总长度保存到对应参数的地址中去。打印结果见图7-25,0 x616
14、161的十进制值为1633771873,按照DWORD类型,其值长度为20。,2022/12/4,计算机系统安全原理与技术(第2版),28,3 安全编程,程序的正确性是由程序的编写者来保证的。为了避免出现缓冲区溢出的漏洞,在编写程序的一开始就必须将安全因素考虑在内。忽略了编码的安全性大致来说有两种。第一种是直接进行设计、编写、测试,然后发布,忘记了程序的安全性。或者设计者自认为已经考虑到了,而做出了错误的设计。第二种错误是在程序完成以后才考虑添加安全因素,在已经完成了的功能外包裹上安全功能。这样做不仅要付出非常昂贵的代价,更重要的是添加的安全功能有可能会影响已经实现的功能,甚至会造成某些功能的
15、不可实现。,2022/12/4,计算机系统安全原理与技术(第2版),29,3 安全编程,1C语言的安全编程(1)对内存访问错误的检测和修改。(2)对于缓冲区溢出的覆盖错误,可由程序员预设缓冲区的大小。(3)指针引用是C中最灵活、最核心、最复杂,也是最易出错的部分。(4)出于保密的需要,在程序设计时要涉及到创建密钥或密码等问题,具体到C程序设计中则是随机数的选取和使用问题。,2022/12/4,计算机系统安全原理与技术(第2版),30,3 安全编程,1C语言的安全编程(5)C语言没有提供异常处理机制,其异常检测处理是由程序员预设完成的。微软的Michael Howard与David LeBlan
16、c所合著的“Writing Secure Code”(编写安全的代码)一书中集中讨论了编写安全代码的方方面面,读者可进一步阅读。,2022/12/4,计算机系统安全原理与技术(第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 软件的反动态跟踪技术,2022/12/4,计算机系统安全原理与技术(第2版),32,7.4.1 安全编程,软件技术保护的基本原则(1)实用性。用户购买的软件,当然会频繁地使用,对合法用户来说,如果在使用或安装
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 缓冲区 溢出 攻击 课件
链接地址:https://www.31ppt.com/p-1549795.html