缓冲 区溢出与病毒攻击原理

缓冲 区溢出与病毒攻击原理

ID:39397282

大小:15.51 KB

页数:4页

时间:2019-07-02

缓冲 区溢出与病毒攻击原理_第1页
缓冲 区溢出与病毒攻击原理_第2页
缓冲 区溢出与病毒攻击原理_第3页
缓冲 区溢出与病毒攻击原理_第4页
资源描述:

《缓冲 区溢出与病毒攻击原理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、缓冲区溢出与病毒攻击原理如果把一加仑的水注入容量为一品脱的容量中,水会四处冒出,这时你就会充分理解溢出的含义。同样的道理,在计算机内部,如果你向一个容量有限的内存空间里存储过量数据,这时数据也会溢出存储空间。输入数据通常被存放在一个临时空间内,这个临时存放空间被称为缓冲区,缓冲区的长度事先已经被程序或者操作系统定义好了。何为缓冲区溢出:缓冲区溢出是指当计算机程序向缓冲区内填充的数据位数超过了缓冲区本身的容量。溢出的数据覆盖在合法数据上。理想情况是,程序检查数据长度并且不允许输入超过缓冲区长度的字符串。但是绝大多数程序都会假设数据长度总是与所分配的存储空间相匹配,这就为缓冲区溢出埋

2、下隐患。操作系统所使用的缓冲区又被称为堆栈,在各个操作进程之间,指令被临时存储在堆栈当中,堆栈也会出现缓冲区溢出。当一个超长的数据进入到缓冲区时,超出部分就会被写入其他缓冲区,其他缓冲区存放的可能是数据、下一条指令的指针,或者是其他程序的输出内容,这些内容都被覆盖或者破坏掉。可见一小部分数据或者一套指令的溢出就可能导致一个程序或者操作系统崩溃。溢出根源在于编程:缓冲区溢出是由编程错误引起的。如果缓冲区被写满,而程序没有去检查缓冲区边界,也没有停止接收数据,这时缓冲区溢出就会发生。缓冲区边界检查被认为是不会有收益的管理支出,计算机资源不够或者内存不足是编程者不编写缓冲区边界检查语句

3、的理由,然而摩尔定律已经使这一理由失去了存在的基础,但是多数用户仍然在主要应用中运行十年甚至二十年前的程序代码。缓冲区溢出之所以泛滥,是由于开放源代码程序的本质决定的。一些编程语言对于缓冲区溢出是具有免疫力的,例如Perl能够自动调节字节排列的大小,Ada95能够检查和阻止缓冲区溢出。但是被广泛使用的C语言却没有建立检测机制。标准C语言具有许多复制和添加字符串的函数,这使得标准C语言很难进行边界检查。C++略微好一些,但是仍然存在缓冲区溢出。一般情况下,覆盖其他数据区的数据是没有意义的,最多造成应用程序错误,但是,如果输入的数据是经过"黑客"或者病毒精心设计的,覆盖缓冲区的数据恰

4、恰是"黑客"或者病毒的入侵程序代码,一旦多余字节被编译执行,"黑客"或者病毒就有可能为所欲为,获取系统的控制权。溢出导致"黑客"病毒横行缓冲区溢出是病毒编写者和特洛伊木马编写者偏爱使用的一种攻击方法。攻击者或者病毒善于在系统当中发现容易产生缓冲区溢出之处,运行特别程序,获得优先级,指示计算机破坏文件,改变数据,泄露敏感信息,产生后门访问点,感染或者攻击其他计算机。2000年7月,微软Outlook以及OutlookExpress被发现存在漏洞能够使攻击者仅通过发送邮件就能危及目标主机安全,只要邮件头部程序被运行,就会产生缓冲区溢出,并且触发恶意代码。2001年8月,"红色代码"利

5、用微软IIS漏洞产生缓冲区存溢出,成为攻击企业网络的"罪魁祸首"。2003年1月,Slammer蠕虫利用微软SQL漏洞产生缓冲区溢出对全球互联网产生冲击。而在近几天,一种名为"冲击波"的蠕虫病毒利用微软RPC远程调用存在的缓冲区漏洞对Windows2000/XP、WindowsServer2003进行攻击,波及全球网络系统。据CERT安全小组称,操作系统中超过50%的安全漏洞都是由内存溢出引起的,其中大多数与微软技术有关,这些与内存溢出相关的安全漏洞正在被越来越多的蠕虫病毒所利用。缓冲区溢出是目前导致"黑客"型病毒横行的主要原因。从红色代码到Slammer,再到日前爆发的"冲击波

6、",都是利用缓冲区溢出漏洞的典型。缓冲区溢出是一个编程问题,防止利用缓冲区溢出发起的攻击,关键在于程序开发者在开发程序时仔细检查溢出情况,不允许数据溢出缓冲区。此外,用户需要经常登录操作系统和应用程序提供商的网站,跟踪公布的系统漏洞,及时下载补丁程序,弥补系统漏洞。一个溢出攻击的实例分析下面是一个简单实例,可以显示缓冲区溢出是如何产生的以及缓冲区溢出是如何被黑客或病毒利用的。首先,我们先来分析一段程序。inti;voidfunction(void){charbuffer[240];//createabufferfor(i=0;512;i++)//iterate512timesbu

7、ffer[i]='A';//copytheletterAreturn}接下来是当这个函数被执行时的后果。1)函数使用长度为240个字节的缓冲区,该缓冲区恰好位于内存地址是00000077缓冲区地址(8字节)00000077缓冲区内容(240字节)空白旧基址指针(8字节)12345678返回的指令指针(8字节)004010002)程序被执行时,函数开始将A填写到缓冲区中缓冲区地址(8字节)00000077缓冲区内容(240字节)AAAAAAAAA.旧基址指针(8字节)1234567

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。