缓冲区溢出攻击的原理

如题所述

看看下面的内容吧,挺多的:

如果把一加仑的水注入容量为一品脱的容量中,水会四处冒出,这时你就会充分理解溢出的含义。同样的道理,在计算机内部,如果你向一个容量有限的内存空间里存储过量数据,这时数据也会溢出存储空间。输入数据通常被存放在一个临时空间内,这个临时存放空间被称为缓冲区,缓冲区的长度事先已经被程序或者*作系统定义好了。

何为缓冲区溢出

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

当一个超长的数据进入到缓冲区时,超出部分就会被写入其他缓冲区,其他缓冲区存放的可能是数据、下一条指令的指针,或者是其他程序的输出内容,这些内容都被覆盖或者破坏掉。可见一小部分数据或者一套指令的溢出就可能导致一个程序或者*作系统崩溃。

溢出根源在于编程

缓冲区溢出是由编程错误引起的。如果缓冲区被写满,而程序没有去检查缓冲区边界,也没有停止接收数据,这时缓冲区溢出就会发生。缓冲区边界检查被认为是不会有收益的管理支出,计算机资源不够或者内存不足是编程者不编写缓冲区边界检查语句的理由,然而摩尔定律已经使这一理由失去了存在的基础,但是多数用户仍然在主要应用中运行十年甚至二十年前的程序代码。

缓冲区溢出之所以泛滥,是由于开放源代码程序的本质决定的。一些编程语言对于缓冲区溢出是具有免疫力的,例如Perl能够自动调节字节排列的大小,Ada95能够检查和阻止缓冲区溢出。但是被广泛使用的C语言却没有建立检测机制。标准C语言具有许多复制和添加字符串的函数,这使得标准C语言很难进行边界检查。C++略微好一些,但是仍然存在缓冲区溢出。一般情况下,覆盖其他数据区的数据是没有意义的,最多造成应用程序错误,但是,如果输入的数据是经过“黑客”或者病毒精心设计的,覆盖缓冲区的数据恰恰是“黑客”或者病毒的入侵程序代码,一旦多余字节被编译执行,“黑客”或者病毒就有可能为所欲为,获取系统的控制权。

溢出导致“黑客”病毒横行

缓冲区溢出是病毒编写者和特洛伊木马编写者偏爱使用的一种攻击方法。攻击者或者病毒善于在系统当中发现容易产生缓冲区溢出之处,运行特别程序,获得优先级,指示计算机破坏文件,改变数据,泄露敏感信息,产生后门访问点,感染或者攻击其他计算机。

2000年7月,微软Outlook以及Outlook Express被发现存在漏洞能够使攻击者仅通过发送邮件就能危及目标主机安全,只要邮件头部程序被运行,就会产生缓冲区溢出,并且触发恶意代码。2001年8月,“红色代码”利用微软IIS漏洞产生缓冲区存溢出,成为攻击企业网络的“罪魁祸首”。2003年1月,Slammer蠕虫利用微软SQL漏洞产生缓冲区溢出对全球互联网产生冲击。而在近几天,一种名为“冲击波”的蠕虫病毒利用微软RPC远程调用存在的缓冲区漏洞对Windows 2000/XP、Windows Server 2003进行攻击,波及全球网络系统。据CERT安全小组称,*作系统中超过50%的安全漏洞都是由内存溢出引起的,其中大多数与微软技术有关,这些与内存溢出相关的安全漏洞正在被越来越多的蠕虫病毒所利用。

缓冲区溢出是目前导致“黑客”型病毒横行的主要原因。从红色代码到Slammer,再到日前爆发的“冲击波”,都是利用缓冲区溢出漏洞的典型。缓冲区溢出是一个编程问题,防止利用缓冲区溢出发起的攻击,关键在于程序开发者在开发程序时仔细检查溢出情况,不允许数据溢出缓冲区。此外,用户需要经常登录*作系统和应用程序提供商的网站,跟踪公布的系统漏洞,及时下载补丁程序,弥补系统漏洞。
温馨提示:内容为网友见解,仅供参考
无其他回答

缓冲区溢出的基本原理是什么
原理:通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。

缓冲区溢出缓冲区攻击
缓冲区溢出攻击的原理是利用程序未能有效检查用户输入,导致数据超出缓冲区预设长度,进而破坏程序堆栈,引发程序错误或执行非预期指令。例如,以下代码中的function函数就存在问题:void function(char *str) { char buffer[16]; strcpy(buffer, str);} 若输入的str长度大于16,strcpy会导致buffer溢出,造成...

缓冲区溢出的原理是什么
原理:通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。概念:缓冲区溢出是一种非常普遍,非常危险的漏洞,在各种操作系统,应用软件中广泛存在。利用缓冲区...

缓冲区溢出攻击的基本原理是什么?
缓冲区溢出攻击之所以成为一种常见安全攻击手段其原因在于缓冲区溢出漏洞太普遍了,并且易于实现。而且,缓冲区溢出成为远程攻击的主要手段其原因在于缓冲区溢出漏洞给予了攻击者他所想要的一切:植入并且执行攻击代码。被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。在1998年Lincoln实验...

什么是缓冲区溢出攻击?
缓冲区溢出攻击,指黑客试图在预设缓冲区范围外写入数据的行为。这类攻击会引发程序执行流改变,操控函数返回值,甚至执行任意代码。原因在于,程序存储数据(缓冲区)与程序(返回地址)同处于栈上。若数据存储覆盖控制数据,便可能导致缓冲区溢出。实验目标在于掌握缓冲区溢出漏洞原理。通过实验,我们深入理解...

缓冲区溢出攻击危害
缓冲区溢出攻击是一种严重的网络安全威胁,其核心原理是利用程序设计中的漏洞,使得数据超出预定的内存区域,进而控制程序的执行流程。这种攻击手段具有极大的破坏性,攻击者可以借此执行未经授权的指令,甚至窃取系统的控制权,实施非法操作。这一攻击方式有多种英文名称,如buffer overflow、buffer overrun、...

缓冲区溢出攻击如何能够执行恶意代码
缓冲区溢出攻击能够执行恶意代码的原理在于利用程序中存在的缓冲区溢出漏洞。当程序没有严格检查用户输入的参数长度,导致输入的数据超出了缓冲区预定的容量时,就会发生缓冲区溢出。溢出的数据可能会覆盖程序中的其他数据或函数的返回地址。攻击者可以构造恶意输入,精心设计包含攻击代码的字符串,通过缓冲区溢出...

溢出缓冲区溢出
攻击者利用大字符串引发溢出,同时殖入恶意代码。此外,缓冲区溢出不一定要一次性完成,可以通过多个步骤,如先放置代码,然后通过溢出其他缓冲区转移程序指针,以应对内存限制。如果攻击者利用已存在于系统中的代码,他们可能需要将恶意代码作为参数传递,如通过篡改程序参数,使程序执行特定的libc代码段。

缓冲区溢出攻击Linux下缓冲区溢出攻击的原理及对策
在Linux系统中,缓冲区溢出攻击是由于函数调用时将函数返回地址存放在程序员可见的堆栈中,这为攻击者提供了可利用的空间。历史上,如1988年Morris Worm的蠕虫攻击就是通过利用fingerd程序的缓冲区溢出漏洞,对用户造成严重威胁。从那时起,各类服务程序如bind、wu-ftpd、telnetd和apache,乃至软件巨头如...

溢出攻击原理
当缓冲区溢出时,超出部分的数据会覆盖原本存储在内存中的合法数据,如果这部分数据没有备份,那么可能造成数据永久丢失。更为危险的是,溢出攻击者利用这个漏洞,不仅替换缓冲区中的文件,还会嵌入非法程序,借此获取到命令行下的管理员权限。一旦成功,攻击者可以进一步创建管理员账户,从而对计算机系统实施...

相似回答