缓冲区溢出

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/26 15:44:58
缓冲区溢出

缓冲区溢出
缓冲区溢出

缓冲区溢出
为了便于理解,我们不妨打个比方.缓冲区溢出好比是将十磅的糖放进一个只能装五磅的容器里.一旦该容器放满了,余下的部分就溢出在柜台和地板上,弄得一团糟.由于计算机程序的编写者写了一些编码,但是这些编码没有对目的区域或缓冲区——五磅的容器——做适当的检查,看它们是否够大,能否完全装入新的内容——十磅的糖,结果可能造成缓冲区溢出的产生.如果打算被放进新地方的数据不适合,溢得到处都是,该数据也会制造很多麻烦.但是,如果缓冲区仅仅溢出,这只是一个问题.到此时为止,它还没有破坏性.当糖溢出时,柜台被盖住.可以把糖擦掉或用吸尘器吸走,还柜台本来面貌.与之相对的是,当缓冲区溢出时,过剩的信息覆盖的是计算机内存中以前的内容.除非这些被覆盖的内容被保存或能够恢复,否则就会永远丢失.
在丢失的信息里有能够被程序调用的子程序的列表信息,直到缓冲区溢出发生.另外,给那些子程序的信息——参数——也丢失了.这意味着程序不能得到足够的信息从子程序返回,以完成它的任务.就像一个人步行穿过沙漠.如果他依赖于他的足迹走回头路,当沙暴来袭抹去了这些痕迹时,他将迷失在沙漠中.这个问题比程序仅仅迷失方向严重多了.入侵者用精心编写的入侵代码(一种恶意程序)使缓冲区溢出,然后告诉程序依据预设的方法处理缓冲区,并且执行.此时的程序已经完全被入侵者操纵了.
入侵者经常改编现有的应用程序运行不同的程序.例如,一个入侵者能启动一个新的程序,发送秘密文件(支票本记录,口令文件,或财产清单)给入侵者的电子邮件.这就好像不仅仅是沙暴吹了脚印,而且后来者也会踩出新的脚印,将我们的迷路者领向不同的地方,他自己一无所知的地方.
缓冲区溢出的处理
你屋子里的门和窗户越少,入侵者进入的方式就越少……
由于缓冲区溢出是一个编程问题,所以只能通过修复被破坏的程序的代码而解决问题.如果你没有源代码,从上面“堆栈溢出攻击”的原理可以看出,要防止此类攻击,我们可以:
1、开放程序时仔细检查溢出情况,不允许数据溢出缓冲区.由于编程和编程语言的原因,这非常困难,而且不适合大量已经在使用的程序;
2、使用检查堆栈溢出的编译器或者在程序中加入某些记号,以便程序运行时确认禁止黑客有意造成的溢出.问题是无法针对已有程序,对新程序来讲,需要修改编译器;
3、经常检查你的操作系统和应用程序提供商的站点,一旦发现他们提供的补丁程序,就马上下载并且应用在系统上,这是最好的方法.但是系统管理员总要比攻击者慢一步,如果这个有问题的软件是可选的,甚至是临时的,把它从你的系统中删除.举另外一个例子,你屋子里的门和窗户越少,入侵者进入的方式就越少.

缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是 程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间想匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区 又被称为"堆栈". 在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出...

全部展开

缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是 程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间想匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区 又被称为"堆栈". 在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出

收起