第7章:缓冲区溢出攻击及防御技术

合集下载

缓冲区溢出攻击的基本原理

缓冲区溢出攻击的基本原理

缓冲区溢出攻击的基本原理
缓冲区溢出攻击(Buffer Overflow Attack)是一种常见的安全漏洞,指的是攻击者利用输入数据的长度或格式错误,超出程序设计者预留的存储空间范围,从而写入到相邻内存空间中,进而控制程序的执行或修改程序的行为。

缓冲区溢出攻击的基本原理如下:
1.内存分配:程序在运行时会根据变量类型和长度来分配内存空间。

2.缓冲区溢出:攻击者通过向程序输入异常数据,超出了程序预留的内存空
间。

3.覆盖关键数据:溢出的数据覆盖了原本存储的数据,可能是程序的返回地
址、函数指针等关键信息。

4.控制程序行为:攻击者利用溢出的数据修改程序的执行路径,跳转到自己
准备好的恶意代码。

5.执行恶意代码:程序执行了攻击者注入的恶意代码,可能导致系统崩溃、
拒绝服务或远程执行任意命令。

为了避免缓冲区溢出攻击,开发人员可以采取以下措施:
•使用安全的编程语言和工具,如内存安全的语言(如Rust)或经过良好测试的C/C++库。

•限制输入数据的长度,确保不会超过缓冲区可容纳的大小。

•进行输入验证和过滤,确保输入数据符合预期的格式和范围。

•定期更新软件和操作系统,及时修补已知的漏洞。

•实施数据执行保护(DEP)和地址空间布局随机化(ASLR)等安全机制。

综上所述,缓冲区溢出攻击是一种常见的安全漏洞,它利用错误处理输入数据的程序中的缺陷,从而控制程序行为。

开发人员和系统管理员应该密切关注安全问题,采取相应的防护措施,以保护系统和用户的信息安全。

Windows32系统的缓冲区溢出攻击中国科学技术大学

Windows32系统的缓冲区溢出攻击中国科学技术大学
a(inited) =0012FF7C b(uninit) =0012FF78 c(inited) =0012FF74
Windows溢出攻击
5
Win32进程映像的特点
• Win32进程的内存分布呈现与Linux IA32进程类 似的内存分布,也分成代码、变量、堆栈区等。 具有以下特点:
1)可执行代码fun1,fun2,main存放在内存的低地址 端,且按照源代码中的顺序从低地址到高地址排 列(先定义的函数的代码存放在内存的低地址)。
4)函数的入口参数的地址(0x0012 FFxx)位于堆栈 的高地址区,位于函数局部变量之上。
Windows溢出攻击
7
Win32进程映像
• 由 3) 和 4) 可 以 推 断 出 , 栈 底 ( 最 高 地 址 ) 位 于 0x0012FFFC,环境变量和局部变量处于进程的
栈区。进一步的分析知道,函数的返回地址也位 于进程的栈区。
(2019秋季,网络安全,编号:CS05154)
第10章
Windows32系统的缓冲区溢出攻击
中国科学技术大学
曾凡平 billzeng@
Windows系统的缓冲区溢出攻击
• Windows系统是目前应用最广泛的桌面操作系统,对其 入侵能获得巨大的利益,因而其安全漏洞及利用技术是 黑客最乐意研究的。Windows系统是闭源软件,在没有 源代码的情况下很难获得该系统全面而准确的信息,而 这些信息对于漏洞攻击是至关重要。因此,要成功攻破 Windows系统,难度很大。
(.text)address of fun1=00401000 fun2=0040100B main=00401017
(stack)address of
argc =0012FF88 argv =0012FF8C argv[0]=00410EC8

缓冲区溢出攻击检测技术的分析和研究

缓冲区溢出攻击检测技术的分析和研究

攻击所必需的 3个步骤 ,根据检测这 3个攻击步骤 ,将 当前最常用的缓冲区溢出攻击检 测技术分为 3种类型 ,并对其进行 了分析和研究 。
关健词 :缓冲区溢出;S e C d ;攻击检测 hl o e l
An l ssa d S u y o fe e fo Ata k De e to e h o o y a y i n t d fBu f rOv r w t c t c i n T c n l g l
[ yw r s u e vro S e C d ;t c eet n Ke o d ]b f r e w; hl o eat kd t i o f l l a co
在信息安全 日益被 人们所关注的今天 ,缓冲区溢出毫 无 疑 问是最大的安全威胁之一 。n re上 的第 1 It n t e 例蠕虫( r s Mor ) i 攻击 ,就是利用了 f g r i ed的缓冲 区溢出漏洞。S N n A S评选 出 的 2 0 年威胁最大的 2 05 0个漏洞中,有 8个跟缓冲区溢出有 关…。根据 C R 的统计数据 ,近几年与缓冲区溢出有关 的 ET 安全事件在 5 %以上 。 0 J 在缓 冲区中写入大量的数据将会导致缓冲区溢出。缓冲 区溢出如此普遍是因为 C语言 固有的不安全性 ,它对数组和 指针的操作没有 自动的边界检查机制 ,许 多标准 C函数库所 支 持 的字 符 串操 作 :s cy) t a(,sr t ) es 等 都 t p (,s ct r r ) pi f ,gt ) n( (
缓冲 区溢 出主 要 有 以 下 3 :1 于 堆 栈 的缓 冲 区溢 出 ; 种 () 基
() 2基于堆的缓冲区溢出;() 3基于数据段的缓冲 区溢 出。一 般
情况下,静态存储 区和堆上的缓冲 区溢 出漏洞很难被攻击 者

“信息安全”课程习题及参考答案

“信息安全”课程习题及参考答案

综合习题一、选择题1. 计算机网络是地理上分散的多台(C )遵循约定的通信协议,通过软硬件互联的系统。

A. 计算机B. 主从计算机C. 自主计算机D. 数字设备2. 密码学的目的是(C )。

A. 研究数据加密B. 研究数据解密C. 研究数据保密D. 研究信息安全3. 假设使用一种加密算法,它的加密方法很简单:将每一个字母加5,即a 加密成f 。

这种算法的密钥就是5,那么它属于(A )。

A. 对称加密技术B. 分组密码技术C. 公钥加密技术D. 单向函数密码技术4. 网络安全最终是一个折衷的方案,即安全强度和安全操作代价的折衷,除增加安全设施投资外,还应考虑(D )。

A. 用户的方便性B. 管理的复杂性C. 对现有系统的影响及对不同平台的支持D. 上面3项都是5.A 方有一对密钥(K A 公开,K A 秘密),B 方有一对密钥(K B 公开,K B 秘密),A 方向B 方发送 数字签名M ,对信息M 加密为:M’= K B 公开(K A 秘密(M ))。

B 方收到密文的解密方案是(C )。

A. K B 公开(K A 秘密(M’))B. K A 公开(K A 公开(M’))C. K A 公开(K B 秘密(M’))D. K B 秘密(K A 秘密(M’))6. “公开密钥密码体制”的含义是(C )。

A. 将所有密钥公开B. 将私有密钥公开,公开密钥保密C. 将公开密钥公开,私有密钥保密D. 两个密钥相同二、填空题1. 密码系统包括以下4个方面:明文空间、密文空间、密钥空间和密码算法。

2. 解密算法D 是加密算法E 的 逆运算 。

3. 常规密钥密码体制又称为 对称密钥密码体制 ,是在公开密钥密码体制以前使用的密码体制。

4. 如果加密密钥和解密密钥 相同 ,这种密码体制称为对称密码体制。

5. DES 算法密钥是 64 位,其中密钥有效位是 56 位。

6. RSA 算法的安全是基于 分解两个大素数的积 的困难。

软件漏洞及其防御措施

软件漏洞及其防御措施

软件漏洞及其防御措施软件漏洞是指在软件设计或实现过程中存在的错误或缺陷,可能导致系统被攻击者利用,造成数据泄露、系统崩溃或其他安全问题。

在当今数字化时代,软件漏洞已经成为网络安全的重要威胁之一。

本文将介绍软件漏洞的常见类型,并提供一些防御措施,以帮助开发者和用户更好地保护软件安全。

一、常见的软件漏洞类型1. 缓冲区溢出漏洞缓冲区溢出漏洞是指当程序向缓冲区写入数据时,超出了缓冲区的边界,导致数据覆盖到相邻的内存区域,从而可能被攻击者利用。

这种漏洞常见于C和C++等编程语言,开发者应该在编写代码时注意对输入数据的边界检查和长度限制。

2. SQL注入漏洞SQL注入漏洞是指攻击者通过在用户输入的数据中插入恶意的SQL语句,从而绕过应用程序的身份验证和访问控制,获取敏感数据或对数据库进行非法操作。

开发者应该使用参数化查询或预编译语句来防止SQL注入攻击,并对用户输入进行严格的验证和过滤。

3. 跨站脚本攻击(XSS)跨站脚本攻击是指攻击者通过在网页中插入恶意脚本,从而在用户浏览器中执行恶意代码,窃取用户信息或进行其他恶意操作。

开发者应该对用户输入进行过滤和转义,确保不会被当作脚本执行。

4. 跨站请求伪造(CSRF)跨站请求伪造是指攻击者通过伪造合法用户的请求,以合法用户的身份执行非法操作。

开发者应该在关键操作中使用CSRF令牌来验证请求的合法性,并对敏感操作进行二次确认。

5. 逻辑漏洞逻辑漏洞是指在软件设计或实现过程中存在的错误逻辑,可能导致系统行为不符合预期,从而被攻击者利用。

开发者应该进行全面的安全审计和测试,确保系统的逻辑正确性。

二、软件漏洞的防御措施1. 安全编码实践开发者应该遵循安全编码实践,包括输入验证、边界检查、错误处理和异常处理等。

同时,使用安全的编程语言和框架,避免使用已知存在漏洞的组件。

2. 定期更新和修补开发者和用户应该定期更新软件和操作系统,及时安装补丁和修复程序,以修复已知的漏洞。

网络安全思维导图(非常全面)

网络安全思维导图(非常全面)

1. 网络安全绪论2. 扫描与防御技术3. 网络监控及防御技术4. 口令破解及防御技术5. 欺骗攻击及防御技术"∙∙t√6. 拒绝服务攻击及防御技术7. 缓冲区溢出及防御技术8. Web 攻击及防御技术<∙⅜B *n∙⅜w∙MHMInrrW ■・ ∙Q⅝*yyX∙鼻* ∙*∣⅝∙tti∙∙κx∙∙∙ι2"■以∙w∙∙∙电費•-IyMa ・•-•・■ 一 f(w∙c4∙∙ X Mft UBMH⅜J∙⅝M∙≡rτF y ∣fll∙f> ■JM •“•f ・・ NM ∣*m ∣∙∙1■■ ♦"”:ny ・•・ V∙∙MXAMisaTftII■•貝∙∙u ・9. 木马攻击及防御技术—伊冰号定*QOS⅞缶水P <修<⅜∣⅝Q 久件X■*乂■用;⅜∙>>∙∙am* M ∙∙ zu∙*Scx!teβtM0∣⅜ιι⅝∣*t⅜H∙≡m 人.An^gSSSS^SKSSRY&木弓 八"弓珠马∙<ħ与■!■>«* ∙∙∙t⅜0⅞⅛i⅜∙t⅛C⅜Λ fU 本■用可•龄⅜b¾⅝tJ ■Pt ■檜术ItlMIflBillRe^mI QMtay&••人aCwBrT▲0食UH>n ・)tn ・人貝■人∙⅜⅝"f⅝IY¾⅝ IjnMMBiR ÷i≡R*fl5-t∙!的 *:α∙m∏R*p∙<⅜%f∏jf⅜ 笑∙a⅝⅞⅝ κm∙><gα"Hgr>⅜j⅜■ ■■LJ 不町 JUWWMI 幵一⅝⅝αHUJ∙门««W«户■耐・算1»■逮逢MIS*・ M*M i S0t)*Bll*MMAMW>f∙林・宾股・弊丁10. 计算机病毒11.网络安全发展与未来。

缓冲区溢出详解

缓冲区溢出详解

缓冲区溢出详解缓冲区溢出(Buffer Overflow)是计算机安全领域内既经典⽽⼜古⽼的话题。

随着计算机系统安全性的加强,传统的缓冲区溢出攻击⽅式可能变得不再奏效,相应的介绍缓冲区溢出原理的资料也变得“⼤众化”起来。

其中看雪的《0day安全:软件漏洞分析技术》⼀书将缓冲区溢出攻击的原理阐述得简洁明了。

本⽂参考该书对缓冲区溢出原理的讲解,并结合实际的代码实例进⾏验证。

不过即便如此,完成⼀个简单的溢出代码也需要解决很多书中⽆法涉及的问题,尤其是⾯对较新的具有安全特性的编译器——⽐如MS的Visual Studio2010。

接下来,我们结合具体代码,按照对缓冲区溢出原理的循序渐进地理解⽅式去挖掘缓冲区溢出背后的底层机制。

⼀、代码 <=> 数据顾名思义,缓冲区溢出的含义是为缓冲区提供了多于其存储容量的数据,就像往杯⼦⾥倒⼊了过量的⽔⼀样。

通常情况下,缓冲区溢出的数据只会破坏程序数据,造成意外终⽌。

但是如果有⼈精⼼构造溢出数据的内容,那么就有可能获得系统的控制权!如果说⽤户(也可能是⿊客)提供了⽔——缓冲区溢出攻击的数据,那么系统提供了溢出的容器——缓冲区。

缓冲区在系统中的表现形式是多样的,⾼级语⾔定义的变量、数组、结构体等在运⾏时可以说都是保存在缓冲区内的,因此所谓缓冲区可以更抽象地理解为⼀段可读写的内存区域,缓冲区攻击的最终⽬的就是希望系统能执⾏这块可读写内存中已经被蓄意设定好的恶意代码。

按照冯·诺依曼存储程序原理,程序代码是作为⼆进制数据存储在内存的,同样程序的数据也在内存中,因此直接从内存的⼆进制形式上是⽆法区分哪些是数据哪些是代码的,这也为缓冲区溢出攻击提供了可能。

图1 进程地址空间分布图1是进程地址空间分布的简单表⽰。

代码存储了⽤户程序的所有可执⾏代码,在程序正常执⾏的情况下,程序计数器(PC指针)只会在代码段和操作系统地址空间(内核态)内寻址。

数据段内存储了⽤户程序的全局变量,⽂字池等。

计算机网络安全试题

计算机网络安全试题

加粗为主校试题第一章:1. 威胁计算机网络安全的主要因素有哪些答:⑴从威胁的对象看:主要可分为两大类:①对网络中信息的威胁②对网络中设备的威胁⑵从Internet的技术基础看:①网络的资源是共享的,面向所有用户②各种协议的漏洞③各种系统的漏洞⑶从人的因素考虑,影响网络安全的因素可分为人为和非人为两种情况。

2.简述计算机网络安全的内涵。

答:计算机网络安全是指利用网络管理控制和技术措施,保证在一个网络环境里,信息数据的保密性、完整性、可用性、可控性和抗抵赖性受到保护。

3.计算机网络安全包括那两个方面答:内容包括两方面:硬安全(物理安全)和软安全(逻辑安全)。

4.什么是计算机网络安全策略答:安全策略是指在一个特定的环境里,为保证提供一定级别的安全保护所建立的规则。

通常,包括建立安全环境的三个重要组成部分。

(1)严格的法规(2)先进的技术(3)有效的管理5.制定计算机网络安全策略需要注意那些问题答:制定网络安全管理策略首先要确定网络安全管理要保护什么,对于要保护的内容,一般有两种截然不同的保护原则。

一种是“没有明确表述为允许的都被认为是被禁止的”,另一种是“一切没有明确表述为禁止的都被认为是允许的”。

6.计算机网络安全的主要技术措施。

答:一、利用操作系统、数据库、电子邮件、应用系统本身的安全性,对用户进行权限设置二、在局域网的桌面工作站上部署防病毒软件三、在Intranet系统与Internet连接之处部署防火墙四、某些行业的关键业务在广域网上采用较少位数的加密传输,而其他行业在广域网上采用明文传输第二章:1. 解释网络安全体系结构的含义。

答:全部网络协议以层次化的结构形式所构成的集合,就称为网络体系结构。

2.网络安全有哪些需求答:1.保密性2.完整性3.可用性4.可控性5.抗抵赖性3.网络安全体系结构的任务是什么答:提供有关形成网络安全方案的方法和若干必须遵循的思路、原则和标准。

它给出关于网络安全服务和网络安全机制的一般描述方式,以及各种安全服务与网络体系结构层次的对应关系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第7章 缓冲区溢出攻击及防御技术
国家计算机网络入侵防范中心
张玉清
本章内容安排
7.1 缓冲区溢出概述 7.2 缓冲区溢出原理 7.3 缓冲区溢出的过程 7.4 代码植入技术 7.5 实例:ida溢出漏洞攻击 7.6 缓冲区溢出的防御 7.7 小结
2020/2/29
网络入侵与防范技术
其次,被植入的攻击代码一般都很短,执行时间也非常短, 很难在执行过程中被发现,而且其执行并不一定会使系统 报告错误,并可能不影响正常程序的运行;
2020/2/29
网络入侵与防范技术
8
7.1 缓冲区溢出概述
隐蔽性:
第三,由于漏洞存在于防火墙内部的主机上,攻击者可 以在防火墙内部堂而皇之地取得本来不被允许或没有权 限的控制权;
数据段,包括已初始化的数据段(.data)和未初始 化的数据段(.bss),前者用来存放保存全局的 和静态的已初始化变量,后者用来保存全局的和静 态的未初始化变量。数据段在编译时分配。
7.2 缓冲区溢出原理
堆栈段分为堆和栈。 堆(Heap):位于BSS内存段的上边,用来存储
程序运行时分配的变量。 堆的大小并不固定,可动态扩张或缩减。其分配由
2020/2/29
网络入侵与防范技术
23
7.2.1 栈溢出
程序中发生函数调用时,计算机做如下操作: 首先把指令寄存器EIP(它指向当前CPU将要 运行的下一条指令的地址)中的内容压入栈, 作为程序的返回地址(下文中用RET表示); 之后放入栈的是基址寄存器EBP,它指向当前 函数栈帧(stack frame)的底部;然后把 当前的栈指针ESP拷贝到EBP,作为新的基地 址,最后为本地变量的动态存储分配留出一定 空间,并把ESP减去适当的数值。
更为严重的是,可以利用缓冲区溢出执行非授权指令, 甚至取得系统特权,进而进行各种非法操作。
如何防止和检测出利用缓冲区溢出漏洞进行的攻击, 就成为防御网络入侵以及入侵检测的重点之一。
2020/2/29
网络入侵与防范技术
6
7.1 缓冲区溢出概述
与其他的攻击类型相比,缓冲区溢出攻击
不需要太多的先决条件 杀伤力很强 技术性强
产生碎片不同 对堆来说,频繁的new/delete或者malloc/free势必会造成 内存空间的不连续,造成大量的碎片,使程序效率降低。 对栈而言,则不存在碎片问题,因为栈是先进后出的队列, 永远不可能有一个内存块从栈中间弹出。
生长方向不同 堆是向着内存地址增加的方向增长的,从内存的低地址向高 地址方向增长。 栈的生长方向与之相反,是向着内存地址减小的方向增长, 由内存的高地址向低地址方向增长。
2
7.1 缓冲区溢出概述
什么是缓冲区?它是包含相同数据类型实例的一个 连续的计算机内存块。是程序运行期间在内存中分 配的一个连续的区域,用于保存包括字符数组在内 的各种数据类型。
所谓溢出,其实就是所填充的数据超出了原有的缓 冲区边界。
两者结合进来,所谓缓冲区溢出,就是向固定长度 的缓冲区中写入超出其预告分配长度的内容,造成 缓冲区中数据的溢出,从而覆盖了缓冲区周围的内 存空间。黑客借此精心构造填充数据,导致原有流 程的改变,让程序转而执行特殊的代码,最终获取 控制权。
malloc()、new()等这类实时内存分配函数来 实现。当进程调用malloc等函数分配内存时,新 分配的内存就被动态添加到堆上(堆被扩张);当 利用free等函数释放内存时,被释放的内存从堆 中被剔除(堆被缩减)。 堆的内存释放由应用程序去控制,通常一个 new()就要对应一个delete(),如果程序员没有 释放掉,那么在程序结束后操作系统会自动回收。
7.2 缓冲区溢出原理
栈(Stack)是一种用来存储函数调用时的临时信 息的结构,如函数调用所传递的参数、函数的返回 地址、函数的局部变量等。
在程序运行时由编译器在需要的时候分配,在不需 要的时候自动清除。
栈的特性: 最后一个放入栈中的物体总是被最先拿 出来,这个特性通常称为先进后出(FILO)队列。
7.2 缓冲区溢出原理
在这里,我们假设现在有一个程序, 它的函数 调用顺序如下。
main() ->; func_1() ->; func_2() ->; func_3()
即: 主函数main调用函数func_1; 函数func_1调用函 数func_2; 函数func_2调用函数func_3。 其详细结构图如下页图所示。
在缓冲区溢出中,我们主要关注数据区和堆栈 区。
2020/2/29
网络入侵与防范技术
19
程序所使用的栈
在使用栈时,引用栈帧需要借助两个寄存器。 一个是SP(ESP),即栈顶指针,它随着数据入
栈出栈而发生变化。 另一个是BP(EBP),即基地址指针,它用于标
识栈中一个相对稳定的位置,通过BP,再加上 偏移地址,可以方便地引用函数参数以及局部变 量。
2020/2/29
网络入侵与防范技术
4
7.1 缓冲区溢出概述
Windows系统中缓冲区溢出的事例更是层出不穷。 2001年“红色代码”蠕虫利用微软IIS Web Server中
的缓冲区溢出漏洞使300 000多台计算机受到攻击; 2003年1月,Slammer蠕虫爆发,利用的是微软SQL
7.1 缓冲区溢出概述
目前,利用缓冲区溢出漏洞进行的攻击已经占所有系 统攻击总数的80%以上。
缓冲区溢出攻击之所以日益普遍,其原因在于各种操 作系统和应用软件上存在的缓冲区溢出问题数不胜数, 而其带来的影响不容小觑。
对缓冲区溢出漏洞攻击,可以导致程序运行失败、系 统崩溃以及重新启动等后果。
栈的基本操作:
PUSH操作:向栈中添加数据,称为压栈,数据将放置 在栈顶;
POP操作:POP操作相反,在栈顶部移去一个元素,并 将栈的大小减一,称为弹栈。
堆和栈的区别
分配和管理方式不同 堆是动态分配的,其空间的分配和释放都由程序员控制。 栈由编译器自动管理。栈有两种分配方式:静态分配和动态 分配。静态分配由编译器完成,比如局部变量的分配。动态 分配由alloca()函数进行分配,但是栈的动态分配和堆是不同 的,它的动态分配是由编译器进行释放,无须手工控制。
最后,从main返回,将ESP增加16以回收name[] 数组占用的空间,此时ESP指向先前保存的EBP值。 程序将这个值弹出并赋给EBP,使EBP重新指向 main()函数调用者的栈的底部。然后再弹出现在位于 栈顶的返回地址RET,赋给EIP,CPU继续执行EIP 所指向的命令。
说明1:EIP寄存器的内容表示将要执行的下一条指令 地址。
1996年,Aleph One发表了题为“Smashing the stack for fun and profit”的文章后,首次详细地介绍 了Unix/Linux下栈溢出攻击的原理、方法和步骤,揭示 了缓冲区溢出攻击中的技术细节。
1999年w00w00安全小组的Matt Conover写了基于 堆缓冲区溢出专著,对堆溢出的机理进行了探索。
如果局部变量发生溢出,很有可能会覆盖掉 EBP甚至RET(返回地址),这就是缓冲区 溢出攻击的“奥秘”所在。
2020/2/29
网络入侵与防范技术Fra bibliotek227.2 缓冲区溢出原理
如果在堆栈中压入的数据超过预先给堆栈分 配的容量时,就会出现堆栈溢出,从而使得 程序运行失败;如果发生溢出的是大型程序 还有可能会导致系统崩溃。
7.2.1 栈溢出实例
编译上述代码,输入hello world!
结果会输出hello world!
在调用main()函数时,程序对栈的操作 是这样的:
先在栈底压入返回地址 接着将栈指针EBP入栈,并把EBP修改为现
在的ESP 之后ESP减16,即向上增长16个字节,用来
存放name[]数组
2020/2/29
网络入侵与防范技术
20
程序所使用的栈
函数被调用的时候,栈中的压入情况如下:
内存高地址
传递给Func的实参
最先压入栈
退出Func函数后的返回地址
调用Func函数前的EBP
内存低地址 Func函数中的局部变量
最后压入栈
2020/2/29
网络入侵与防范技术
21
程序所使用的栈
在局部变量的下面,是前一个调用函数的 EBP,接下来就是返回地址。
第四,攻击的随机性和不可预测性使得防御变得异常艰 难,没有攻击时,被攻击程序本身并不会有什么变化, 也不会存在任何异常的表现;
最后,缓冲区溢出漏洞的普遍存在,针对它的攻击让人
防不胜防(各种补丁程序也可能存在着这种漏洞。
7.2 缓冲区溢出原理
7.2.1 栈溢出 7.2.2 堆溢出 7.2.3 BSS溢出 7.2.4 格式化串溢出
2020/2/29
网络入侵与防范技术
3
7.1 缓冲区溢出概述
利用缓冲区溢出漏洞进行攻击最早可追溯到1988年 Morris蠕虫,它所利用的就是fingerd程序的缓冲区溢出 漏洞。
1989年,Spafford提交了一份分析报告,描述了VAX 机上BSD版Unix的Fingerd的缓冲区溢出程序的技术细 节,引起了一部分安全人士对这个研究领域的重视。
缓冲区溢出比其他一些黑客攻击手段更具有 破坏力和隐蔽性。这也是利用缓冲区溢出漏 洞进行攻击日益普遍的原因。
2020/2/29
网络入侵与防范技术
7
7.1 缓冲区溢出概述
破坏性:
它极容易使服务程序停止运行,服务器死机甚至删除服务 器上的数据。
隐蔽性:
首先,漏洞被发现之前,程序员一般是不会意识到自己的 程序存在漏洞的(事实上,漏洞的发现者往往并非编写 者),于是疏于监测;
相关文档
最新文档