缓冲区溢出攻击课件.ppt

上传人:牧羊曲112 文档编号:1549795 上传时间:2022-12-04 格式:PPT 页数:58 大小:866KB
返回 下载 相关 举报
缓冲区溢出攻击课件.ppt_第1页
第1页 / 共58页
缓冲区溢出攻击课件.ppt_第2页
第2页 / 共58页
缓冲区溢出攻击课件.ppt_第3页
第3页 / 共58页
缓冲区溢出攻击课件.ppt_第4页
第4页 / 共58页
缓冲区溢出攻击课件.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《缓冲区溢出攻击课件.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)实用性。用户购买的软件,当然会频繁地使用,对合法用户来说,如果在使用或安装

17、过程中加入太多的障碍,甚至需要改变计算机的硬件结构,会影响用户购买的积极性。除非是功能上的需要,或是特定用户群的强制性要求,任何纯为加密而对用户提出的一些硬件上的要求,都是不可接受的。况且,目前大多数计算机用户都不敢自行改变计算机的硬件。,2022/12/4,计算机系统安全原理与技术(第2版),33,7.4.1 安全编程,软件技术保护的基本原则2)局部可共享特性。相当多的计算机用户,都需要一定范围内非商业目的的软件交流,或学术性,或社交性,必须满足他们这方面的要求。不能交流的软件是没有活力的,也是难以推广的。当然,这种交流不应该是大范围的、无限制性的。3)可重复使用性。计算机软件被装在计算机上

18、,难免被损坏而需要重新安装,如果因为加密而使买来的计算机软件不能重新安装,便可能给用户带来不必要的损失。,2022/12/4,计算机系统安全原理与技术(第2版),34,7.4.2 密码保护技术,密码保护技术是在每一件软件产品中都附带一个密码,在软件安装和运行过程中的某些关键环节要求用户输入该密码,只有用户输入正确的密码,软件才能正确地安装和正常地运行。优点是:简便易行,且无附加成本,是目前很流行的保护方法。缺点是:由于其密码相对固定,要保证合法用户获得有效的密码,就不能防止盗版者通过合法途径获取密码后再进行非法复制流通。,2022/12/4,计算机系统安全原理与技术(第2版),35,7.4.2

19、 密码保护技术,在软件载体上所附的序列号并不能直接输入,对软件实现解密,而只能将其作为该软件的身份识别标志,并通过向软件生产者提供该标识,以换取针对该软件的解密密码(即授权号),便可以限制该软件的序列号直接被盗版流通,即使发生了盗版行为,也可能通过该授权过程来追访盗版者的踪迹。可以在授权系统中对每一份软件的可授权次数加以适当的限制。为了更进一步防范盗版者在购买正版软件后,先通过正当途径获取授权号,然后再将授权号随同盗版软件一起复制传播,可以考虑在授权号中加入授权日期信息。那样,该授权号可以预先设定其有效时间,如果超过了规定的日期后,该授权号即自行失效。,2022/12/4,计算机系统安全原理与

20、技术(第2版),36,7.4.3 电子注册保护技术,用户可在网上获得使用采用该技术加密的软件,这时该软件一般是功能受限制,或者使用时间受限制,或者经常出现要求注册的画面等。用户使用后觉得满意,可按要求进行注册,注册法因开发商而异。,2022/12/4,计算机系统安全原理与技术(第2版),37,7.4.3 电子注册保护技术,下面给出4种注册法:1)用户交费之后,软件公司会告诉用户一个地址、用户名和密码,然后用户去那个地址就可以下载到正式版。2)用户交费之后,软件公司会通过E-mail传给用户一个文件,用户把这个文件复制到软件安装的目录之后,就成为正式用户了。一般来说,这个文件很小(几百个Byte

21、s和几K)。这些文件一般来说扩展名是*.reg(注册表文件)或*.1ic。3)软件给出该软件的序列号,用户交费时把这一序列号一起寄给软件提供商或开发商,软件开发商利用注册机(软件)产生该软件的注册号寄给用户即可。4)用户按要求填写个人资料,交费时把这份个人资料一起寄给软件提供商或开发商,软件开发商利用注册机(软件)产生该软件的注册号寄给用户即可。,2022/12/4,计算机系统安全原理与技术(第2版),38,7.4.3 电子注册保护技术,电子注册保护方式的优点是:不需要任何硬件或软盘,方便易用,价格低廉。电子注册保护方式的缺点是:网上付费方式尚未标准化,能够接受的人不,2022/12/4,计算

22、机系统安全原理与技术(第2版),39,7.4.4 结合硬件的保护技术,1“钥匙盘”2光盘3ROM片4软件狗,2022/12/4,计算机系统安全原理与技术(第2版),40,7.4.5 基于数字签名的保护技术,一种签名方案,该系统由三部分组成:1)签证中心。中心的任务是对每个软件供应商的资格进行审查,审查合格者,发给签证密钥。2)软件供应商。发行软件的售主或个人。3)用户。从软件供应商那里购买软件的顾客。,2022/12/4,计算机系统安全原理与技术(第2版),41,7.4.5 基于数字签名的保护技术,系统包含三个阶段:1)预约阶段。在本阶段里,软件供应商向中心提出申请,中心审查软件供应商资格,若

23、审查通过,中心就向他发放一个签证密钥。这种发放的优点是用户可确认中心是否向软件供应商授权。2)分发阶段。在本阶段里,软件供应商用签证密钥来签署他们所发行的程序,并把签名的程序分发给用户。3)鉴别阶段。当用户得到程序时,启用基于身份的代理签名系统验证这些程序是否确实为软件供应商所发行,并进一步验证是否存在讹误。,2022/12/4,计算机系统安全原理与技术(第2版),42,7.4.6 软件水印,所谓软件水印,就是把程序的版权信息和用户身份信息嵌入到程序中。它是近年来出现的软件产品版权保护技术,可以用来标识作者、发行者、所有者、使用者等,并携带有版权保护信息和身份认证信息,可以鉴别出非法复制和盗用

24、的软件产品。,2022/12/4,计算机系统安全原理与技术(第2版),43,7.4.6 软件水印,根据水印的嵌入位置,软件水印可以分为代码水印和数据水印。代码水印隐藏在程序的指令部分数据水印则隐藏在包括头文件、字符串和调试信息等数据中。根据水印被加载的时刻,软件水印可分为静态水印和动态水印。静态水印存储在可执行程序代码中,比较典型的是把水印信息放在安装模块部分,或者是指令代码中,或者是调试信息的符号部分。区别于静态水印,动态水印则保存在程序的执行状态中,而不是程序源代码本身。这种水印可用于证明程序是否经过了迷乱变换处理。,2022/12/4,计算机系统安全原理与技术(第2版),44,7.4.6

25、 软件水印,根据水印的嵌入位置,软件水印可以分为代码水印和数据水印。代码水印隐藏在程序的指令部分数据水印则隐藏在包括头文件、字符串和调试信息等数据中。根据水印被加载的时刻,软件水印可分为静态水印和动态水印。静态水印存储在可执行程序代码中,比较典型的是把水印信息放在安装模块部分,或者是指令代码中,或者是调试信息的符号部分。区别于静态水印,动态水印则保存在程序的执行状态中,而不是程序源代码本身。这种水印可用于证明程序是否经过了迷乱变换处理。,2022/12/4,计算机系统安全原理与技术(第2版),45,7.4.7 软件的反动态跟踪技术,软件的反动态跟踪技术,是指防止破译者利用各种各样的软件动态调试

26、、动态跟踪工具,对被保护的软件进行动态跟踪、分析和破译的技术。,2022/12/4,计算机系统安全原理与技术(第2版),46,7.5 安全软件工程,7.5.1 需求分析7.5.2 设计与验证7.5.3 编程控制7.5.4 测试控制7.5.5 运行维护管理7.5.6 行政管理控制,2022/12/4,计算机系统安全原理与技术(第2版),47,7.5.1 需求分析阶段的安全措施,详细说明安全与保密要求;把安全保密分配到处理流程中;确定用户数据的敏感等级;确定安全计划,建立安全模型。,2022/12/4,计算机系统安全原理与技术(第2版),48,7.5.2设计验证阶段的安全措施,验证安全模型的正确性

27、设计整体安全机制和安全方案(自己实现的和利用系统安全功能)把安全要求分解到相关模块中,把对数据的安全要求体现在安全数据库的设计中。,2022/12/4,计算机系统安全原理与技术(第2版),49,7.5.3编程阶段的安全控制,按要求实现各模块的安全功能;组织独立人员审查模块代码;(仔细阅读源程序)保护源代码不与无关人员接触。,2022/12/4,计算机系统安全原理与技术(第2版),50,7.5.4测试阶段安全控制,测试各模块安全功能,最好通过第三方独立测试;根据安全要求综合测试程序与运行环境;组织安全专业人员进行攻击性测试。,2022/12/4,计算机系统安全原理与技术(第2版),51,7.5.

28、5运行维护阶段的安全控制,成立软件配置管理机构对提交运行的软件,对其任何修改必须得到批准;对修改后的源程序需要再审查;由配置管理机构自己对源代码编译生成目标代码,防止引入不安全功能。,2022/12/4,计算机系统安全原理与技术(第2版),52,7.4.6 行政管理控制,1、指定程序开发标准 1)设计标准:专用设计工具、语言或方法的使用;2)文件、语言和编码风格的标准;3)编程标准,包括强制性的程序员对等检查,以及对程序的正确性和与标准的一致性进行周期性的代码审查;4)测试标准,验证技术、独立测试、测试结果的存档备查;5)配置管理标准:控制对成品程序的访问与修改;,2022/12/4,计算机系

29、统安全原理与技术(第2版),53,7.4.6 行政管理控制,2、实施程序开发标准遵循程序开发标准有利于项目的持续进行,即使项目中途换人,也不影响项目按标准完成。对开发安全软件的公司需要进行安全审计。由一个独立的安全评价小组以不声张的方式检查每一个项目。该小组检查设计、文件和代码。这本身就是一种警告性措施。程序员不太可能在模块中放入可疑代码。,2022/12/4,计算机系统安全原理与技术(第2版),54,7.4.6 行政管理控制,3、责任分开:模块化编程和设计迫使程序员取得非法的程序结果必须合谋,由独立测试小组而不是由编写这段程序的程序员对模块进行测试,这些分离措施可以使程序具有更高的安全性。4

30、、对职员的管理:招收雇员时需要调查其背景,在公司对他取得信任之前,应限制其访问权限。为了安全上的原因公司还应该要求其遵守一般的行为准则。,2022/12/4,计算机系统安全原理与技术(第2版),55,思考与练习,7.1 试述计算机病毒的一般构成、各个功能模块的作用和作用机制。7.2 简述计算机病毒的防治措施和感染病毒后的修复方法。7.3 什么是计算机病毒免疫?7.4 一个计算机程序能用来自动测试陷门吗?也就是说,你能够设计一个计算机程序,在给定另一个程序的源或目标代码以及对那个程序的适当描述后,能够对这个程序中是否存在陷门回答“是”与“否”吗?说明你的方法。,2022/12/4,计算机系统安全

31、原理与技术(第2版),56,7.5 使用瑞星杀毒软件单机版和网络版在实际环境下对单机和网络系统进行病毒的查杀,并检测系统漏洞,分析单机版和网络版在应用上和功能上的区别。7.6 如何防止把带有木马的程序装入内存运行,请给出几个有效的办法,并说明这些方法对系统运行效率的影响。7.7 模块化的影响有好有坏。一个过度模块化的程序以很小的模块方式完成它的操作,因而难以获得一个总的轮廓。要知道许多模块单独的功能很容易,但却不容易确定它们结合起来做什么。请建议一种能够在程序开发中用来维护这种轮廓的方法。,2022/12/4,计算机系统安全原理与技术(第2版),57,7.8 根据程序语言中出现的安全问题,如越

32、界问题、不安全的信息流问题,你觉得编译器应如何解决这些问题?7.9 开发一个安全程序的主要手段有哪些?说明这些手段发挥的作用各是什么?7.10 网络蠕虫的好坏作用有哪些?如果蠕虫进入网络中的一个计算机系统后,完成某项任务(如在屏幕上留下行公告信息或建立一个小进程)后,并未在系统中留下特殊的标记就退出该计算机系统,继续在网络中寻找另一个计算机系统。请问这种蠕虫会不会在在网络造成危害,为什么弘如果你的网络中出现这类蠕虫,你将如何消除它?,2022/12/4,计算机系统安全原理与技术(第2版),58,7.11病毒程序与蠕虫程序的主要差别有哪些?限制病毒的传播速度的有效措施有哪些?7.12 对照一般软件工程的概念,安全软件工程主要增添了哪些任务?7.13 实验:Web安全控制。实验主要内容:IE 6.0中新增安全功能的使用;使用IE Security工具;为Web应用程序建立、安装服务器证书;为Web应用程序(站点)配置SSL等。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号