缓冲区溢出类型黑客攻击与防御措施研究.docx

缓冲区溢出类型黑客攻击与防御措施研究.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

??

?

??

缓冲区溢出类型黑客攻击与防御措施研究

?

?

?

?

?

??

?

?

?

李振汕

(广西政法管理干部学院,广西南宁530023)

摘要:随本文详细阐述了缓冲区溢出攻击的原理、方式和防御措施,由于缓冲区溢出攻击是目前常见的攻击手段,所以进行这方面的研究工作是有意义和成效的。事实研究表明,编写正确的代码、非执行缓冲区技术、数组边界和程序指针的完整性检查对大多数的缓冲区溢出攻击都能有效地防御。

关键词:缓冲区;缓冲区溢出;攻击;防御

中图分类号[来自www.lW5u.Com]:TP393.08:A

0引言

随着计算机技术的发展,软件在生产和生活中的应用日益普及和深入,但是软件本身规模的增大,复杂性的增加,直接导致了软件中的缺陷和错误。特别是系统程序中所普遍采用的C语言,由于其不作数组和指针的越界检查,甚至很多标准库函数也没有这种检查,极易使代码存在缓冲溢出的漏洞,而黑客常利用这一漏洞对系统进行攻击。目前,缓冲区溢出攻击已成为黑客主要的攻击手段之一,从而给人们带来了巨大的损失,因此对其进行防御,具有十分重要的意义。

1缓冲区溢出攻击原理

所谓缓冲区,是指计算机在内存区域开辟一段连续内存块,用以存放相同数据类型的多个实例,应用最多的缓冲区类型是字符数组。缓冲区溢出是指当某个用户/进程试图往程序中一个固定长度的缓冲区放置比原初分配的存储空间还要多的数据的时候,通常会导致超越存储边界,从而影响相邻内存空间的数据。造成缓冲区越界的根本原因是由于C和C++等高级语言里,程序将数据读入或复制到缓冲区中的任何时候,所用函数缺乏边界检查机制,这些函数包括strcpy()、strcat()、sprintf()、vsprintf()、gets()、scanf()、fscanf()、sscanf()、vscanf()、vsscanf()和vfscanf()等。如下是一个简单的缓冲区溢出实例,当strcpy()函数企图向一个缓冲区填充超过它存储容量时,数据越出其边界,就造成了缓冲区溢出。

voidfunction(char*ptr)

{charbuf[4];

strcpy(buf,ptr);}

在函数function运行时,首先在内存里为其分配一段空间——栈,依次将函数参数ptr、函数返回地址ret、前帧指针SFP(StackframePointer)和局部变量huf数组压入其中。现在假设往函数function的字符数组buf复制一串字符串“aaaabbbbccccdddd,即执行Strcpy(buf,ptr)操作,也即是要将16字节长的字符串复制到只有4个字节长的buf字符数组里,然而由于strcpy()字符串操作函数没有边界检查功能,这就必然要导致字符串要超越buf字符数组的边界,一直向内存高地址方向覆盖,最终将函数返回地址等相邻数据改写了,如图l所示,当函数执行结束后返回时,由于函数的返回地址被改写了,因此常常会导致“段出错”。缓冲区溢出是向一个缓冲区填充超过它处理能力的数据而越出其边界所造成的结果,目前许多攻击者利用有溢出漏洞的程序,进行缓冲区溢出攻击。所谓缓冲区溢出攻击,是指利用目标程序的缓冲区溢出漏洞,通过操作目标程序堆栈并暴力改写其返回地址,从而获得目标控制权的一种攻击手段[1]。

因此,缓冲区溢出的副作用取决于:

1)写入的数据中有多少超过缓冲区边界;2)当缓冲区已满并且溢出时,覆盖了哪些数据(如果有的话);3)程序是否试图读取溢出期间被覆盖的数据;4)哪些数据最终替换被覆盖的内存。

一般情况下,覆盖其它数据区的数据是没有意义的,最多造成应用程序错误,但是,如果输入的数据是经过“黑客”精心设计的,覆盖缓冲区的数据恰恰是黑客的入侵程序代码,黑客就获取了程序的控制权。

此外,攻击者利用缓冲区溢出得到机器上的交互式会话(Shell)。如果被利用的程序以较高的优先权在运行(如Root用户或管理员),则攻击者就会在交互式会话中得到该优先权。最惊人的缓冲区溢出是堆栈的摧毁,它会在超级用户或Root、Shell中造成后果。许多可以利用脚本都能在网络上找到,它们对特定体系结构上的堆栈进行摧毁。

2缓冲区溢出攻击方式

黑客进行缓冲区溢出攻击的目的是扰乱具有某些特权运行的程序的功能,从而取得程序的控制权,如果该程序具有足够的权限,那么整个主机就被控制了。在一般情况下,黑客利用缓冲区溢出漏洞攻击root程序,执行类似”Pxec(sh)”的执行代码来获得root的shell。为实现这个目的,攻击者必须达到两个目标:1)在程序的地址空间里安排适当的代码;2)通过适当地初始化寄存器和存储器,让程序跳转到事先安排的地址空间执行。根据这两个目标,缓冲区溢出攻击方式大致有以下几类。

2.1在程序的地址空间里安排适当

文档评论(0)

139****3710 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档