缓冲区溢出攻击的原理分析与防范
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
该文介绍了Windows CE内存管理,进程等基础知识,初步讨论了Windows CE的缓冲
区溢出问题,只是对Shellcode的解码效率不高。
2021/2/22
4
缓冲区溢出原理概述
• 缓冲区溢出的概念 • 缓冲区是内存中存放数据的地方,一般来说,它是“包
含相同数据类型的实例的一个连续计算机内存块”[5],它 保存了给定类型的数据。在C和C++中,缓冲区通常是使 用数组和诸如malloc()和new这样的内存分配例程来实现 的。最常见的缓冲区种类是简单的字符数组。 • 缓冲区溢出是指当计算机向缓冲区内填充数据位数时超 过了缓冲区本身的容量,使得溢出的数据覆盖在合法数据 上,理想的情况是程序检查数据长度并不允许输入超过缓 冲区长度的字符,但是绝大多数程序都会假设数据长度总 是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐 患。操作系统所使用的缓冲区又被称为“堆栈”.。在各个操 作进程之间,指令会被临时储存在“堆栈”当中,“堆栈”也 会出现缓冲区溢出。
BSD版unix的Fingerd的缓冲区溢出程序的技术细节,从而引起了一部分安全人士对这
个研究领域的重视。1996年AlephOne详细的描述了Linux系统中栈的结构和如何利用
基于栈的缓冲区溢出。1997年,Smith综合以前的文章,提供了如何在各种Unix家庭中
写缓冲区溢出Exploit更详细的指导原则。1998年来自“Cult of the Dead cow”的Dildog
缓冲区溢出攻击的原理分析与防范
2021/2/22
1源自文库
主要目录
1、前言
1.1本课题的研究意义 1.2缓冲区溢出国内外研究现状
2、缓冲区溢出原理概述
2.1、缓冲区溢出的概念 2.2、堆栈的定义 2.3 缓冲区溢出攻击原理 2.4 缓冲区溢出攻击方式 2.4.1在程序的地址空间里安排适当的代码的方法 2.4.2控制程序转移到攻击代码的方法 2.5缓冲区溢出影响及危害
2021/2/22
5
比如
这样 或许 你还 不明 白?
2021/2/22
6
堆栈的定义
•
堆栈是内存中的一个连续的块。一个叫堆栈指针的寄存器(SP)
指向堆栈的栈顶,堆栈的底部是一个固定地址。堆栈有一个特点就是
,后进先出。也就是说,后放入的数据第一个取出。它支持两个操作
,PUSH和POP。PUSH是将数据放到栈的顶端,POP是将栈顶的数
•
缓冲区溢出攻击是黑客攻击的主要手段,给网络信息安全
带来了越来越大的危害。已有的防御手段研究相对滞后,目
前国内外的研究大多集中在某个具体漏洞的利用与防范上,
缺乏全面的研究。并且现有的缓冲区溢出防御手段也存在诸
多不足之处。论文主要是对缓冲区溢出攻击的原理分析与防
范进行深入研究。
•
论文首先介绍了缓冲区和堆栈的基本概念,研究并总结了
3、缓冲区溢出的防御方法
3.1、写正确的代码的方法 3.2、通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码 3.3、利用编译器的数组边界检查来实现缓冲区的保护 3.4、在程序指针失效前进行完整性检查
4、总结与展望
4.1全文总结
4.2 展望
5、参考文献 2021/2/22
2
本课题的研究意义
据取出。
•
在高级语言中,程序函数调用和函数中的临时变量都用到堆栈
,参数的传递和返回值时也用到了堆栈,通常对局部变量的引用是通
过给出它们对SP的偏移量来实现的。另外还有一个基址指针(FP,
在Intel芯片中是BP),许多编译器实际上是用它来引用本地变量和参
数的。通常,参数的相对FP的偏移是正的,局部变量是负的。当程序
详细地介绍了如何利用Windows的溢出,他提出了利用栈指针的方法来完成跳转,返
回固定的指向地址,不论是在出问题的程序中还是在动态链接库中,该固定地址都包
含了用来利用栈指针完成跳转的汇编指令,这是缓冲区溢出利用一个重大的进步。
•
在国内,这方面技术的研究起步较晚,2000年左右,才有部分安全人士和黑客开始
研究这个领域,最早中联绿盟的袁仁广做过一些工作,他使用暴力探索的办法来获取
kernel32.dll的基址,代码量太多,也不够准确,2003年安全焦点峰会上Flashsky做了
关于堆溢出的演讲[3],总结了堆溢出漏洞利用的方法。2005年San写了关于如何溢出
Windows CE的文章[4],Windows CE是PDA和手机上使用非常广泛的嵌入式操作系统,
随着信息与网络技术的发展,以及这些技术在军事领域 的不断渗透,计算机网络已成为连接未来信息化战场的枢纽 。对计算机的攻击,能够获得大量宝贵的情报以及达到其它 武器系统所不能及的效果。因此对以计算机为基础的网络攻 击与防护就自然成为军事领域密切关注的问题。近年来,缓 冲区溢出漏洞的广泛性和破坏性受到国内外信息安全研究领 域的极切关注。从1988年CERT(计算机紧急响应小组)成立以 来,统计到的安全威胁事件每年以指数增长。缓冲区溢出攻 击作为网络攻击一种主要形式占所有系统攻击总数的80%以 上[1]。这种缓冲区溢出漏洞可以发生在不同的操作系统以及 不同的应用程序上。
缓冲区溢出的原理和过程,并介绍了一些常用的攻击方法。
在此基础上,论文研究并总结了目前防御缓冲区溢出攻击的
一些常用方法,主要从主客观两方面来讨论。主观方面,主
要是要提高程序员编写代码的质量,形成良好的编程风格;
客观方面,主要是从系统和软件做一些相关的检查和优化。
2021/2/22
3
缓冲区溢出国内外研究现状
•
缓冲区溢出攻击作为一种主流的攻击手法,早在20世纪80年代,国外就有人开始
讨论溢出攻击,例如1988年的Morris蠕虫,利用的攻击方法之一就是Fingerd的缓冲区
溢出,这次蠕虫攻击导致全球6000多台机器被感染,损失巨大,由此,缓冲区溢出问
题逐渐得到人们的重视。1989年,Spafford提交了一份分析报告,描述了VAX机上的
中发生函数调用时,计算机做如下操作:首先把参数压入堆栈;然后
保存指令寄存器(IP)中的内容,作为返回地址(RET);第三个放入堆栈
的是基址寄存器(FP);然后把当前的栈指针(SP) 拷贝到FP,作为新
的基地址;最后为本地变量留出一定空间,把SP减去适当的数值。