- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
学位论文开题报告文献综述
学 号
工 程 领 域 软件工程
姓 名
指 导 教 师 罗回彬
二○ 年 月 日缓冲区溢出漏洞的研究意义
随着系统软件和应用软件的日益庞大,这些软件也面临越来越多的安全漏洞;同时随着计算机广泛应用到各个领域,计算机系统面临的恶意和非恶意的攻击也越来越多。因此,计算机的安全问题是一个日益突出的问题。在所有这些针对计算机的攻击中,超过50%的攻击是通过缓冲区溢出来达到攻击目的。通过这一攻击手段在全球造成的各种损失数以亿计。
造成缓冲区溢出的根本原因有以下几种,一是由于程序员在编写程序代码时没有对缓冲区进行边界检测;或是程序员在程序中调用的非安全的第三方的库函数而造成向缓冲区写入过长内容的情况引起的。程序代码的编写错误是软件产生安全漏洞的重要原因之一,编写安全的代码是计算机安全领域的核心,不幸的是传统的软件工程对于编写安全的软件的方法远没有开发正确软件那么重视。因此,对于程序员来说开发安全的程序显得尤为重要。二是一些程序设计语言本身固有的特性也会成为安全漏洞的隐患,如C 语言中对数组、指针的操作没有进行自动的边界检查,这就使得一些错误在编译阶段就不被发现;同时随着软件规模的扩大和占用空间的增多,导致很多安全漏洞在程序编码阶段很难被发现,其中以缓冲区溢出问题尤为突出。为了解决软件中的缓冲区溢出问题,
国内外的一些从事软件行业的人士做了大量的工作,提出了一些检测方法并开发了相应的检测工具。在这些检测工具中,有的需要在源程序中添加注解来辅助完成检测,这样就使检测的工作量非常大而且容易造成遗漏,使测试不完全;有的检测工具只能测试单个程序文本文件;基于动态分析法的检测工具,需要对编译器进行改进,在检测对象编译生成的目标代码中增加检测代码,这样就会增加程序运行的代价。
因此有必要研究缓冲区溢出问题。通过对缓冲区溢出原理分析和对现有缓冲区溢出类型归纳,提出缓冲区溢出漏洞检测模型,并在模型的基础上设计和实现缓冲区溢出漏洞检测工具。
缓冲区溢出漏洞相关知识
缓冲区溢出原理
从内存空间分配给程序使用上来说,缓冲区是程序员在软件开发过程中为程序分配的一段连续的内存。出现缓冲区溢出漏洞的原因一是程序员在软件开发过程中没有编写安全的代码;二是程序语言对缓冲区边界没有检测;三是语言实现厂商提供了一些不安全的字符串处理库函数等。
缓冲区溢出攻击的原理是通过往程序缓冲区写入超出其边界的内容,造成缓冲区溢出,使得程序转而执行攻击者指定的代码,通常是为攻击者打开远程连接的ShellCode,以达到攻击目标。图2.1显示的攻击前后的内存状态。
图2.1 攻击前后内存状态
缓冲区溢出漏洞攻击的目的在于扰乱目标程序的运行流程,以使得攻击者可以取得程序的控制权。要使攻击者攻击成功,通常有两个关键点:第一,存在能够被攻击的数据结构,第二,要有被执行的攻击代码。攻击代码可以是攻击者注入程序中的,也可能是直接利用系统已经存在的函数。最常见的具有极大威胁的攻击代码是通过缓冲区溢出后得到系统shell,再通过shell 执行其它命令。
在C/C++语言中,常会遭到的攻击与程序运行时用到的数据结构有关,比如函数活动记录,函数指针,C函数库中的setjmp()和longjmp()函数用到的保存程序运行时栈帧信息的数据结构jmp_buf,其存储位置可能在数据段,静态存储区,堆栈段,堆里。针对格式化字符串攻击也会引起安全性问题。严格地说格式化字符串漏洞并不是缓冲区溢出,但是它会导致与缓冲区溢出同样的问题。
缓冲区溢出漏洞的类型与特征
下面将详细深入分析这几种最根本的攻击方式。这些方法在本质上是一样的,都是在寻求改变程序的执行流程,溢出一个没有检查或者其它漏洞的缓冲区,扰乱程序正常的执行顺序,使它跳转到恶意攻击代码。
活动记录(Activation Records)
这类的缓冲区溢出被称为堆栈溢出攻击(stack smashing attack),是目前常用的缓冲区溢出攻击方式。
每当一个函数调用发生时,调用者会在堆栈中留下一个活动记录,它包含了函数结束时返回的地址。攻击者通过溢出这些变量,通过改变程序的返回地址,当函数调用结束时,程序就跳转到攻击者设定的地址,而不是原先的地址。
堆栈(stack)是一种基本的数据结构,具有先进后出的性质。在Intel X86 平台上,调用函数时实际参数(arguments)、返回地址(return address)、局部变量(local variables)都位于栈上,栈是自高向低增长(先入栈的地址较高),栈指针(stack pointer)寄存器ESP 始终指向栈顶元素。
所以对于返回地址和前堆栈
文档评论(0)