- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
缓冲区溢出攻击的分析及防范策略
一、 缓冲区与出的概念及原理
(一)何谓缓冲区溢出
缓冲区是用户为程序运行时在计算机中申请得的一段连续的内存,它保存了给定类型的数据。缓冲区溢出指的是一种常见且危害很大的系统攻击手段,通过向程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他的指令,以达到攻击的目的。
(二)缓冲区溢出的原理
从上面的缓冲区溢出概念可以看出,缓冲区溢出就是将一个超过缓冲区长度的字符串置入缓冲区的结果,这是由于程序设计语言的一些漏洞,如C/C++语言中,不对缓冲区、数组及指针进行边界检查,(strcpy()、strcat()、sprintf()、gets()等语句),在程序员也忽略对边界进行检查而向一个有限空间的缓冲区中置入过长的字符串可能会带来两种结果:一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另一种后果是利用这种漏洞可以执行任意指令,甚至可以取得系统特权,由此而引发多种攻击方法。
缓冲区溢出对系统的安全性带来很大的威胁,比如向程序的有限空间的缓冲区中置入过长的字符串,造成缓冲区溢出,从而破坏程序的堆栈,使程序转去执行其他的指令,如果这些指令是放在有Root权限的内存里,那么一旦这些指令得到了运行,入侵者就以Root的权限控制了系统,这也是我们所说的U2R(User to Root Attacks)攻击。例如在Unix系统中,使用一些精心编写的程序,利用SUID程序(如FDFORMAT)中存在的缓冲区溢出错误就可以取得系统超级用户权限,在Unix取得超级用户权限就意味着黑客可以随意控制系统。为了避免这种利用程序设计语言漏洞而对系统的恶意攻击,我们必须要仔细分析缓冲区溢出攻击的产生及类型,从而做出相应的防范策略。
二 、缓冲区溢出攻击的分析
(一)缓冲区溢出攻击的产生
C编程语言中,静态变量分配在数据段中,动态变量分配在堆栈段中,C语言允许程序员在运行时在内存的两个不同部分(堆栈和堆)中创建存储器。通常,分配到堆的数据是那些malloc()或新建时获得的数据,而分配到堆栈的数据一般包括非静态的局部变量和所有按值传递的参数。大部分其它信息存储在全局静态存储器中。一个程序在内存中通常分为程序段、数据段和堆栈三个部分。程序段里为程序的机器码和只读数据,这个段通常是只读代码,故禁止对程序段进行写操作。数据段放的是程序中的静态数据。
存储器主要分为三个部分,一是文本区域,即程序区,用来存储程序指令,只读属性;二是数据区域,它的大小可以由brk系统调用来改变;三是堆栈,其特点是LIFO(last in, first out)。当C程序调用函数的时候,首先将参数压入堆栈,然后保存指令寄存器(IP)中的内容作为返回地址(RET),放入堆栈的是地址寄存器(FP),然后把当前的栈指针(SP)拷贝到FP,作为新的基地址,并为本地变量留出一定的空间,把SP减去适当的数值。计算机执行一条指令,并保留指向下一条指令的指针(IP)。当函数或过程被调用的时候,在堆栈中被保留下来的指令指针将被作为返回地址(RET)。执行完成后,RET替换IP,程序接着继续执行本来的流程。
(二)缓冲区溢出攻击的类型
缓冲区溢出的目的在于扰乱具有某些特权运行程序的功能,这样就可以让攻击者取得程序的控制权,如果该程序具有足够的权限,那么整个主机甚至服务器就被控制了。一般而言,攻击者攻击root程序,然后执行类似“exec(sh)”的执行代码来获得root的shell。但并不总是这样,为了达到这个目的,攻击者必须达到如下两个目标:
在程序的地址空间里安排适当的代码通过适当地初始化寄存器和存储器,让程序跳转到安排好的地址空间执行。我们可以根据这两个目标来对缓冲区溢出攻击进行分类。
三、 缓冲区溢出攻击的防范策略
缓冲区溢出攻击的防范是和整个系统的安全性分不开的。如果整个网络系统的安全设计很差,则遭受缓冲区溢出攻击的机会也大大增加。针对缓冲区溢出,我们可以采取多种防范策略。
(一)系统管理上的防范策略
1、关闭不需要的特权程序
由于缓冲区溢出只有在获得更高的特权时才有意义,所以带有特权的Unix
下的suid程序和Windows下由系统管理员启动的服务进程都经常是缓冲区溢出攻击的目标。这时候,关闭一些不必要的特权程序就可以降低被攻击的风险。如Solaris下的fdformat是个有缓冲区溢出漏洞的suid程序,因为这个格式化软盘的命令用的较少,最直接的措施是去掉这个程序或者去掉suid位。当有缓冲区溢出漏洞的程序还没有补丁时,就可以用这种方法。
2、及时给程序漏洞打补丁
这是漏洞出现后最迅速有效的补救措施。大部分的入侵是利用一些已被公布的漏洞达成的,如能及时补上这些漏洞,无疑极大的增强了系统抵抗攻击
您可能关注的文档
最近下载
- (高清版)B 26410-2011 防爆通风机.pdf VIP
- 新技术揭细菌生物被膜结构细节.pdf VIP
- 国家标准 GBT 895.2-1986 轴用钢丝挡圈.pdf VIP
- 景观标准做法手册(硬景篇).docx VIP
- HGT 3973-2023 一般用途钢丝绳芯阻燃输送带.pdf VIP
- 2023-2024学年浙江省嘉兴市高一下学期6月期末地理试题(解析版).docx VIP
- 2025年山东黄金集团井下技能工人招聘(2025人)笔试历年参考题库附带答案详解(10卷合集).docx
- SL 339-2006水库水文泥沙观测规范.pdf
- 抽搐护理常规.pptx
- 深圳市南山外国语学校新初一分班英语试卷含答案.doc VIP
文档评论(0)