您的位置:中国师生网  论文综合  计算机论文  正文
 
热门文章
 
   
 
最新文章
 
   
 
意见反馈
  
   
 
 
文章内容
 
缓冲区溢出攻击的分析及防范策略
原作者:网友供稿 添加时间:2007-10-14 原文发表时间:2007-10-12 人气:1 来源:内详
本文章共12788字,分9页,当前第1页,快速翻页:
 

一 缓冲区与出的概念及原理
.何谓缓冲区溢出
缓冲区是用户为程序运行时在计算机中申请得的一段连续的内存,它保存了给定类型的数据。缓冲区溢出指的是一种常见且危害很大的系统攻击手段,通过向程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他的指令,以达到攻击的目的。

.缓冲区溢出的原理
从上面的缓冲区溢出概念可以看出,缓冲区溢出就是将一个超过缓冲区长度的字符串置入缓冲区的结果,这是由于程序设计语言的一些漏洞,如C/C 语言中,不对缓冲区、数组及指针进行边界检查,(strcpy()、strcat()、sprintf()、gets()等语句),在程序员也忽略对边界进行检查而向一个有限空间的缓冲区中置入过长的字符串可能会带来两种结果:一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另一种后果是利用这种漏洞可以执行任意指令,甚至可以取得系统特权,由此而引发多种攻击方法。
缓冲区溢出对系统的安全性带来很大的威胁,比如向程序的有限空间的缓冲区中置入过长的字符串,造成缓冲区溢出,从而破坏程序的堆栈,使程序转去执行其他的指令,如果这些指令是放在有Root权限的内存里,那么一旦这些指令得到了运行,入侵者就以Root的权限控制了系统,这也是我们所说的UR(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,程序接着继续执行本来的流程。
这里有一个直观的缓冲区溢出的小例子:
void function(char *str)
{
char buffer[6];
strcpy(buffer, str);
}
Void main()
{
int I;
char buffer[8];
for(I=0; I<7; I )
buffer[I]=A;
buffer[7]=0;
function(buffer);
printf(“This is a test.\n”);
}
在函数function中,将一个8字节长度的字符串拷贝到只有6字节长的局部缓冲区中。在使用strcpy()函数前,没有进行缓冲区边界检查,导致从buffer开始的56个字节都将被*str的内容A覆盖,包括堆栈指针和返回地址,甚至*str都将被A覆盖。
再看看堆栈的结构,由于栈式内存分配具有一条指令即可为子程序分配全部局部变量的存储空间的特点,分配和去配的开销极低,高级语言通常在堆栈上分配局部存储空间。同时,堆栈也被用来存放子程序的返回地址。对C语言来说,调用函数的语句f(arg,arg,…,argn)被翻译为如下指令:



 
本文章更多内容1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 下一页>>
本页地址:
相关文章

基于B/S体系结构开发应用系统
项目管理在软件中的应用
商业银行管理信息系统开发方法浅探
关于土地信息系统建立过程中的数据质量问题
物资管理信息系统开发
基于信息技术的研究性学习
《罗布泊,消逝的仙湖》CAI制作脚本
学籍管理系统软件
学生成绩管理系统的设计与实现
企业应用数据库维护方法探讨
VGA色彩编辑技术
文本方式下图形提示界面制作
NetWare与UNIX的互联方法与实现
C语言实现串行通信接口程序
计算机基础知识试题
彩色图象的二维变形
DOS界面下通用图形编辑软件的设计

这里更精彩


本文章所属分类:首页  论文综合  计算机论文
   
 
 
推荐文章