![缓冲区溢出攻击课件_第1页](http://file4.renrendoc.com/view/0594727f5b34cbb2aafc8378ebc19bc7/0594727f5b34cbb2aafc8378ebc19bc71.gif)
![缓冲区溢出攻击课件_第2页](http://file4.renrendoc.com/view/0594727f5b34cbb2aafc8378ebc19bc7/0594727f5b34cbb2aafc8378ebc19bc72.gif)
![缓冲区溢出攻击课件_第3页](http://file4.renrendoc.com/view/0594727f5b34cbb2aafc8378ebc19bc7/0594727f5b34cbb2aafc8378ebc19bc73.gif)
![缓冲区溢出攻击课件_第4页](http://file4.renrendoc.com/view/0594727f5b34cbb2aafc8378ebc19bc7/0594727f5b34cbb2aafc8378ebc19bc74.gif)
![缓冲区溢出攻击课件_第5页](http://file4.renrendoc.com/view/0594727f5b34cbb2aafc8378ebc19bc7/0594727f5b34cbb2aafc8378ebc19bc75.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022/7/28计算机系统安全原理与技术(第2版)1应用系统的编程安全1 缓冲区溢出2 格式化字符串漏洞3 安全编程2022/7/28计算机系统安全原理与技术(第2版)21 缓冲区溢出1)什么是缓冲区溢出简单的说,缓冲区溢出(Buffer Overflow)就是通过在程序的缓冲区写入超出其长度的内容,从而破坏程序的堆栈,使程序转而执行其他指令,以达到攻击的目的。2022/7/28计算机系统安全原理与技术(第2版)31 缓冲区溢出1)什么是缓冲区溢出程序是从内存低端向高端按顺序存放的,输入的形参按照自右至左的顺序入栈,而堆栈的生长方向与内存的生长方向相反,因此在堆栈中压入的数据超过预先给堆栈分
2、配的容量时,就会出现堆栈溢出。简单地说,缓冲区溢出的原因是由于字符串处理等函数没有对数组的越界加以监视和限制,结果覆盖了堆栈数据。缓冲区的溢出有各种不同的类型。2022/7/28计算机系统安全原理与技术(第2版)41 缓冲区溢出1)什么是缓冲区溢出一般而言,有以下几种缓冲区溢出攻击的方式:1)攻击者可用任意数据覆盖堆栈中变量的内容。2)覆盖堆栈中保存的寄存器内容,导致程序崩溃。3)把堆栈里面的返回地址覆盖,替换成一个自己指定的地方,而在那个地方,可以植入一些精心设计了的代码以达到攻击的目的。2022/7/28计算机系统安全原理与技术(第2版)51 缓冲区溢出基础知识-寄存器32位CPU所含有的
3、寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 2022/7/28计算机系统安全原理与技术(第2版)61 缓冲区溢出基础知识-寄存器4个数据寄存器(EAX、EBX、ECX和EDX):数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。2022/7/28计算机系统安全原理与技术(第2版)71 缓冲区溢出基础知识-寄存器2个变址寄存器(ESI和EDI) :寄存器
4、ESI、EDI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。2022/7/28计算机系统安全原理与技术(第2版)81 缓冲区溢出基础知识-寄存器2个指针寄存器(ESP和EBP) :它们主要用于访问堆栈内的存储单元,并且规定:EBP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据; ESP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。 2022/7/28计算机系统安全原理与技术(第2版)91 缓冲区溢出基础知识-寄存器6个段寄存器(E
5、S、CS、SS、DS、FS和GS):段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。CPU内部的段寄存器:ECS代码段寄存器(Code Segment Register),EDS数据段寄存器(Data Segment Register),2022/7/28计算机系统安全原理与技术(第2版)101 缓冲区溢出基础知识-寄存器EES附加段寄存器(Extra Segment Register),ESS堆栈段寄存器(Stack Segment Register),EFS附加段寄存器(Ext
6、ra Segment Register),EGS附加段寄存器(Extra Segment Register),2022/7/28计算机系统安全原理与技术(第2版)111 缓冲区溢出基础知识-寄存器1个指令指针寄存器(EIP):指令指针EIP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。121 缓冲区溢出基础知识-常用汇编指令sub:减法指令第一个参数是被减数所在的寄存器,第二个参数是减数。add:加法指令第一个参数是被加数所在的寄存器,第二个参数是加数。注:sub和add指令常被用来操作堆栈,例如,如果要在堆栈中分配四个四字节长整型数的空间,就没有必要调用
7、四次push指令,简单调用sub esp,16(16=4*4)就可以了,当然也可以调用add指令恢复堆栈。131 缓冲区溢出基础知识-常用汇编指令push:入栈指令32位平台,push指令将一个32位的操作数压入堆栈,导致esp减4。因为esp指向栈顶,且堆栈是向小地址生长的,所以会导致esp减4。pop:出桟指令跟push指令对应,在32位平台,pop指令将一个32的数弹出堆栈,会导致esp加4. pop指令的参数一般是寄存器,将栈顶的数据弹出到寄存器。2022/7/28计算机系统安全原理与技术(第2版)141 缓冲区溢出基础知识-常用汇编指令call:调用函数call指令和jmp指令不同,
8、call指令会先把下一条要执行的指令入栈,然后跳到被调用的函数的地方。所以,call指令相当于push+jmp。 ret:从函数返回ret指令和jmp指令不同,ret指令会先把函数的返回地址出桟,再跳到返回的地址。所以,ret指令相当于pop+jmp。栈帧的一般结构2022/7/28计算机系统安全原理与技术(第2版)15local1 local2 localnEBPRET地址参数1 参数2参数n缓冲区溢出程序1(test)关注函数调用时堆栈变化void foo(int m,int n)int local;local=m+n; void main()int t1=0 x1111;int t2=0
9、 x2222;foo(t1,t2);2022/7/28计算机系统安全原理与技术(第2版)16缓冲区溢出方式缓冲区溢出的原因是由于字符串处理等函数( strcpy 、strcmp)没有对数组的越界加以监视和限制,结果覆盖了堆栈数据。有以下几种缓冲区溢出攻击方式:1)攻击者可用任意数据覆盖堆栈中变量的内容;2)覆盖堆栈中保存的寄存器内容,导致程序崩溃;3)把堆栈里面的返回地址覆盖,替换成一个自己指定的地方,而在这个个地方,可以植入一些精心设计了的代码以达到攻击的目的。2022/7/28计算机系统安全原理与技术(第2版)172022/7/28计算机系统安全原理与技术(第2版)18 缓冲区溢出程序22
10、)覆盖堆栈中变量的内容(7-2pass)2022/7/28计算机系统安全原理与技术(第2版)19 缓冲区溢出程序33)覆盖堆栈中寄存器的内容( 7-3字符覆盖溢出)在栈上声明的各种变量的位置就紧靠着调用函数的返回地址。如果用户输入的数据越过边界就会将调用函数的返回地址覆盖,造成程序崩溃。 缓冲区溢出程序4void come()printf(Success!);void test(int i)char buf12;/用于发生溢出的数组int addr4;int k=(int)&i-(int)buf;int go=(int)&come;addr0=(go24;addr1=(go24;addr2=(
11、go24;addr3=go24;for(int j=0;j4;j+)bufk-j-1=addr3-j;void main()void test(int i);test(1);202022/7/28计算机系统安全原理与技术(第2版)212 格式化字符串漏洞格式化字符串的漏洞产生于数据输出函数中对输出格式解析的缺陷,其根源也是C程序中不对数组边界进行检查的缓冲区错误。以printf()函数为例:int printf(const char*format,agr1,agr2,);format的内容可能为(%s,%d,%p,%x,%n),将数据格式化后输出。这种函数的问题在于函数printf不能确定数据
12、参数arg1,arg2,究竟在什么地方结束,也就是说,它不知道参数的个数。printf函数只会根据format中的打印格式的数目依次打印堆栈中参数format后面地址的内容。2022/7/28计算机系统安全原理与技术(第2版)222 格式化字符串漏洞1printf中的缺陷第一个printf调用是正确的,第二个调用中则缺少了输出数据的变量列表。那么第二个调用将引起编译错误还是照常输出数据?如果输出数据又将是什么类型的数据呢?2022/7/28计算机系统安全原理与技术(第2版)232 格式化字符串漏洞1printf中的缺陷2022/7/28计算机系统安全原理与技术(第2版)242 格式化字符串漏洞
13、2用printf读取内存数据输入“%p,%p,%p”,实际上可以读出栈中的数据2022/7/28计算机系统安全原理与技术(第2版)252 格式化字符串漏洞3用printf向内存写数据在格式化控制符中,有一种鲜为人知的控制符%n。这个控制符用于把当前输出的所有数据的长度写回一个变量中去2022/7/28计算机系统安全原理与技术(第2版)262 格式化字符串漏洞3用printf向内存写数据2022/7/28计算机系统安全原理与技术(第2版)272 格式化字符串漏洞3用printf向内存写数据这是因为程序中将变量num的地址压入堆栈,作为printf()的第二个参数,“%n”会将打印总长度保存到对应
14、参数的地址中去。打印结果见图7-25,0 x616161的十进制值为1633771873,按照DWORD类型,其值长度为20。 2022/7/28计算机系统安全原理与技术(第2版)283 安全编程程序的正确性是由程序的编写者来保证的。为了避免出现缓冲区溢出的漏洞,在编写程序的一开始就必须将安全因素考虑在内。忽略了编码的安全性大致来说有两种。第一种是直接进行设计、编写、测试,然后发布,忘记了程序的安全性。或者设计者自认为已经考虑到了,而做出了错误的设计。第二种错误是在程序完成以后才考虑添加安全因素,在已经完成了的功能外包裹上安全功能。这样做不仅要付出非常昂贵的代价,更重要的是添加的安全功能有可能
15、会影响已经实现的功能,甚至会造成某些功能的不可实现。2022/7/28计算机系统安全原理与技术(第2版)293 安全编程1C语言的安全编程(1)对内存访问错误的检测和修改。(2)对于缓冲区溢出的覆盖错误,可由程序员预设缓冲区的大小。(3)指针引用是C中最灵活、最核心、最复杂,也是最易出错的部分。(4)出于保密的需要,在程序设计时要涉及到创建密钥或密码等问题,具体到C程序设计中则是随机数的选取和使用问题。2022/7/28计算机系统安全原理与技术(第2版)303 安全编程1C语言的安全编程(5)C语言没有提供异常处理机制,其异常检测处理是由程序员预设完成的。微软的Michael Howard与D
16、avid LeBlanc所合著的“Writing Secure Code”(编写安全的代码)一书中集中讨论了编写安全代码的方方面面,读者可进一步阅读。2022/7/28计算机系统安全原理与技术(第2版)317.4 软件保护7.4.1 软件技术保护的基本原则7.4.2 密码保护技术7.4.3 电子注册保护技术7.4.4 结合硬件的保护技术7.4.5 基于数字签名的保护技术7.4.6 软件水印7.4.7 软件的反动态跟踪技术2022/7/28计算机系统安全原理与技术(第2版)327.4.1 安全编程软件技术保护的基本原则(1)实用性。用户购买的软件,当然会频繁地使用,对合法用户来说,如果在使用或安
17、装过程中加入太多的障碍,甚至需要改变计算机的硬件结构,会影响用户购买的积极性。除非是功能上的需要,或是特定用户群的强制性要求,任何纯为加密而对用户提出的一些硬件上的要求,都是不可接受的。况且,目前大多数计算机用户都不敢自行改变计算机的硬件。2022/7/28计算机系统安全原理与技术(第2版)337.4.1 安全编程软件技术保护的基本原则2)局部可共享特性。相当多的计算机用户,都需要一定范围内非商业目的的软件交流,或学术性,或社交性,必须满足他们这方面的要求。不能交流的软件是没有活力的,也是难以推广的。当然,这种交流不应该是大范围的、无限制性的。3)可重复使用性。计算机软件被装在计算机上,难免被
18、损坏而需要重新安装,如果因为加密而使买来的计算机软件不能重新安装,便可能给用户带来不必要的损失。2022/7/28计算机系统安全原理与技术(第2版)347.4.2 密码保护技术密码保护技术是在每一件软件产品中都附带一个密码,在软件安装和运行过程中的某些关键环节要求用户输入该密码,只有用户输入正确的密码,软件才能正确地安装和正常地运行。优点是:简便易行,且无附加成本,是目前很流行的保护方法。缺点是:由于其密码相对固定,要保证合法用户获得有效的密码,就不能防止盗版者通过合法途径获取密码后再进行非法复制流通。2022/7/28计算机系统安全原理与技术(第2版)357.4.2 密码保护技术在软件载体上
19、所附的序列号并不能直接输入,对软件实现解密,而只能将其作为该软件的身份识别标志,并通过向软件生产者提供该标识,以换取针对该软件的解密密码(即授权号),便可以限制该软件的序列号直接被盗版流通,即使发生了盗版行为,也可能通过该授权过程来追访盗版者的踪迹。可以在授权系统中对每一份软件的可授权次数加以适当的限制。为了更进一步防范盗版者在购买正版软件后,先通过正当途径获取授权号,然后再将授权号随同盗版软件一起复制传播,可以考虑在授权号中加入授权日期信息。那样,该授权号可以预先设定其有效时间,如果超过了规定的日期后,该授权号即自行失效。2022/7/28计算机系统安全原理与技术(第2版)367.4.3 电
20、子注册保护技术用户可在网上获得使用采用该技术加密的软件,这时该软件一般是功能受限制,或者使用时间受限制,或者经常出现要求注册的画面等。用户使用后觉得满意,可按要求进行注册,注册法因开发商而异。2022/7/28计算机系统安全原理与技术(第2版)377.4.3 电子注册保护技术下面给出4种注册法:1)用户交费之后,软件公司会告诉用户一个地址、用户名和密码,然后用户去那个地址就可以下载到正式版。2)用户交费之后,软件公司会通过E-mail传给用户一个文件,用户把这个文件复制到软件安装的目录之后,就成为正式用户了。一般来说,这个文件很小(几百个Bytes和几K)。这些文件一般来说扩展名是*.reg(
21、注册表文件)或*.1ic。3)软件给出该软件的序列号,用户交费时把这一序列号一起寄给软件提供商或开发商,软件开发商利用注册机(软件)产生该软件的注册号寄给用户即可。4)用户按要求填写个人资料,交费时把这份个人资料一起寄给软件提供商或开发商,软件开发商利用注册机(软件)产生该软件的注册号寄给用户即可。2022/7/28计算机系统安全原理与技术(第2版)387.4.3 电子注册保护技术电子注册保护方式的优点是:不需要任何硬件或软盘,方便易用,价格低廉。电子注册保护方式的缺点是:网上付费方式尚未标准化,能够接受的人不2022/7/28计算机系统安全原理与技术(第2版)397.4.4 结合硬件的保护技
22、术1“钥匙盘”2光盘3ROM片4软件狗2022/7/28计算机系统安全原理与技术(第2版)407.4.5 基于数字签名的保护技术一种签名方案,该系统由三部分组成:1)签证中心。中心的任务是对每个软件供应商的资格进行审查,审查合格者,发给签证密钥。2)软件供应商。发行软件的售主或个人。3)用户。从软件供应商那里购买软件的顾客。2022/7/28计算机系统安全原理与技术(第2版)417.4.5 基于数字签名的保护技术系统包含三个阶段:1)预约阶段。在本阶段里,软件供应商向中心提出申请,中心审查软件供应商资格,若审查通过,中心就向他发放一个签证密钥。这种发放的优点是用户可确认中心是否向软件供应商授权
23、。2)分发阶段。在本阶段里,软件供应商用签证密钥来签署他们所发行的程序,并把签名的程序分发给用户。3)鉴别阶段。当用户得到程序时,启用基于身份的代理签名系统验证这些程序是否确实为软件供应商所发行,并进一步验证是否存在讹误。2022/7/28计算机系统安全原理与技术(第2版)427.4.6 软件水印所谓软件水印,就是把程序的版权信息和用户身份信息嵌入到程序中。它是近年来出现的软件产品版权保护技术,可以用来标识作者、发行者、所有者、使用者等,并携带有版权保护信息和身份认证信息,可以鉴别出非法复制和盗用的软件产品。2022/7/28计算机系统安全原理与技术(第2版)437.4.6 软件水印根据水印的
24、嵌入位置,软件水印可以分为代码水印和数据水印。代码水印隐藏在程序的指令部分数据水印则隐藏在包括头文件、字符串和调试信息等数据中。根据水印被加载的时刻,软件水印可分为静态水印和动态水印。静态水印存储在可执行程序代码中,比较典型的是把水印信息放在安装模块部分,或者是指令代码中,或者是调试信息的符号部分。区别于静态水印,动态水印则保存在程序的执行状态中,而不是程序源代码本身。这种水印可用于证明程序是否经过了迷乱变换处理。2022/7/28计算机系统安全原理与技术(第2版)447.4.6 软件水印根据水印的嵌入位置,软件水印可以分为代码水印和数据水印。代码水印隐藏在程序的指令部分数据水印则隐藏在包括头
25、文件、字符串和调试信息等数据中。根据水印被加载的时刻,软件水印可分为静态水印和动态水印。静态水印存储在可执行程序代码中,比较典型的是把水印信息放在安装模块部分,或者是指令代码中,或者是调试信息的符号部分。区别于静态水印,动态水印则保存在程序的执行状态中,而不是程序源代码本身。这种水印可用于证明程序是否经过了迷乱变换处理。2022/7/28计算机系统安全原理与技术(第2版)457.4.7 软件的反动态跟踪技术软件的反动态跟踪技术,是指防止破译者利用各种各样的软件动态调试、动态跟踪工具,对被保护的软件进行动态跟踪、分析和破译的技术。2022/7/28计算机系统安全原理与技术(第2版)467.5 安
26、全软件工程7.5.1 需求分析7.5.2 设计与验证7.5.3 编程控制7.5.4 测试控制7.5.5 运行维护管理7.5.6 行政管理控制2022/7/28计算机系统安全原理与技术(第2版)477.5.1 需求分析阶段的安全措施详细说明安全与保密要求;把安全保密分配到处理流程中;确定用户数据的敏感等级;确定安全计划,建立安全模型。2022/7/28计算机系统安全原理与技术(第2版)487.5.2设计验证阶段的安全措施验证安全模型的正确性设计整体安全机制和安全方案(自己实现的和利用系统安全功能)把安全要求分解到相关模块中,把对数据的安全要求体现在安全数据库的设计中。2022/7/28计算机系统
27、安全原理与技术(第2版)497.5.3编程阶段的安全控制按要求实现各模块的安全功能;组织独立人员审查模块代码;(仔细阅读源程序)保护源代码不与无关人员接触。2022/7/28计算机系统安全原理与技术(第2版)507.5.4测试阶段安全控制测试各模块安全功能,最好通过第三方独立测试;根据安全要求综合测试程序与运行环境;组织安全专业人员进行攻击性测试。2022/7/28计算机系统安全原理与技术(第2版)517.5.5运行维护阶段的安全控制成立软件配置管理机构对提交运行的软件,对其任何修改必须得到批准;对修改后的源程序需要再审查;由配置管理机构自己对源代码编译生成目标代码,防止引入不安全功能。202
28、2/7/28计算机系统安全原理与技术(第2版)527.4.6 行政管理控制1、指定程序开发标准 1)设计标准:专用设计工具、语言或方法的使用;2)文件、语言和编码风格的标准;3)编程标准,包括强制性的程序员对等检查,以及对程序的正确性和与标准的一致性进行周期性的代码审查;4)测试标准,验证技术、独立测试、测试结果的存档备查;5)配置管理标准:控制对成品程序的访问与修改;2022/7/28计算机系统安全原理与技术(第2版)537.4.6 行政管理控制2、实施程序开发标准遵循程序开发标准有利于项目的持续进行,即使项目中途换人,也不影响项目按标准完成。对开发安全软件的公司需要进行安全审计。由一个独立的安全评价小组以不声张的方式检查每一个项目。该小组检查设计、文件和代码。这本身就是一种警告性措施。程序员不太可能在模块中放入可疑代码。2022/7/28计算机系统安全原理与技术(第2版)547.4.6 行政管理控制3、责任分开:模块化编程和设计迫使程序员取得非法的程序结果必须合谋,由独立测试小组而不是由编写这段程序的程序员对模块进行测试,这些分离措施可以使程序具有更高的安全性。4、对职员的管理:招收雇员时需要调查其背景,在公司对他取得信任之前,应限制其访问权限。为了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 陕西省安康市2024-2025学年八年级(上)期末语文试卷
- 2025年全球及中国氯雷他定片行业头部企业市场占有率及排名调研报告
- 2025-2030全球工商用管道除湿机行业调研及趋势分析报告
- 2025年全球及中国划线轮(描线轮)行业头部企业市场占有率及排名调研报告
- 2025-2030全球PTFE化学镀镍行业调研及趋势分析报告
- 2025年全球及中国汽车超高频天线行业头部企业市场占有率及排名调研报告
- 2025年全球及中国多托盘货叉行业头部企业市场占有率及排名调研报告
- 2025-2030全球汽车行业用生物基聚酰胺行业调研及趋势分析报告
- 2025年全球及中国树木介绍牌行业头部企业市场占有率及排名调研报告
- 2025-2030全球医美用A型肉毒毒素行业调研及趋势分析报告
- 2025-2030年中国纳米氧化铝行业发展前景与投资战略研究报告新版
- 2025年度正规离婚协议书电子版下载服务
- 2025年贵州蔬菜集团有限公司招聘笔试参考题库含答案解析
- 煤矿安全生产方针及法律法规课件
- 2025年教科室工作计划样本(四篇)
- 2024年版古董古玩买卖合同:古玩交易税费及支付规定
- 【7历期末】安徽省宣城市2023-2024学年七年级上学期期末考试历史试题
- 春节后安全生产开工第一课
- 2025光伏组件清洗合同
- 电力电缆工程施工组织设计
- 2024年网格员考试题库完美版
评论
0/150
提交评论