第七章-计算机系统安全(缓冲区溢出)要点课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第七章-计算机系统安全(缓冲区溢出)要点课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七 计算机 系统安全 缓冲区 溢出 要点 课件
- 资源描述:
-
1、2022-12-16网络安全网络安全Network SecurityNetwork Security2022-12-16第第7 7章章 计算机系统安全(缓冲区溢出)计算机系统安全(缓冲区溢出)缓冲区溢出概述缓冲区溢出概述 缓冲区溢出攻击的原理缓冲区溢出攻击的原理 缓冲区溢出攻击的防御技术缓冲区溢出攻击的防御技术 2022-12-16第第7 7章章 计算机系统安全(缓冲区溢出)计算机系统安全(缓冲区溢出)缓冲区溢出攻击的原理缓冲区溢出攻击的原理 缓冲区溢出攻击的防御技术缓冲区溢出攻击的防御技术 2022-12-16缓冲溢出概述缓冲溢出概述l1.缓冲区的定义缓冲区的定义l连续的一段存储空间。连续的
2、一段存储空间。l2.缓冲区溢出的定义缓冲区溢出的定义l指写入缓冲区的数据量超过该缓冲区能容纳的最大限度,指写入缓冲区的数据量超过该缓冲区能容纳的最大限度,造成溢出的数据改写了与该缓冲区相邻的原始数据的情造成溢出的数据改写了与该缓冲区相邻的原始数据的情形。形。lBuffer overflow is the result of writing more data into a buffer than the buffer can hold.2022-12-16ExamplelConsider the following codeint main(void)char buffer4;strcpy(b
3、uffer,“AAA”);mainstackframe previousstack framebuffer4High addressesLow addressesAAA02022-12-16Example(contd.)lNow we input 4+4+3 As instead of 4 As.int main(void)char buffer4;strcpy(buffer,“”);AAAAAAAAAAAAAAmainstackframe previousstack framebuffer4Higher addressesLower addresses?AAAAAAAAAAA02022-12
4、-16缓冲溢出概述缓冲溢出概述(续)(续)l3.缓冲区溢出的危害缓冲区溢出的危害l利用缓冲区溢出实现在本地或者远程系统上实现任意执行代码的利用缓冲区溢出实现在本地或者远程系统上实现任意执行代码的目的,从而进一步达到对被攻击系统的完全掌控;目的,从而进一步达到对被攻击系统的完全掌控;l利用缓冲区溢出进行利用缓冲区溢出进行DoS(Denial of Service)攻击;攻击;l利用缓冲区溢出破坏关键数据,使系统的稳定性和有效性受到不利用缓冲区溢出破坏关键数据,使系统的稳定性和有效性受到不同程度的影响;同程度的影响;l实现蠕虫程序实现蠕虫程序l1988 Robert T.Morris蠕虫利用蠕虫利
5、用UNIX 系统中系统中In,the Morris Internet worm exploited buffer overflow vulnerability in fingerd server program on UNIX systems.l曾在曾在2001年造成大约年造成大约26亿美元损失的亿美元损失的Code Red蠕虫及其变体蠕虫及其变体就是利用了就是利用了Microsoft IIS中的缓冲区溢出进行攻击中的缓冲区溢出进行攻击 l2002年的年的Sapphire蠕虫和蠕虫和2004年的年的Witty蠕虫也都利用了缓冲蠕虫也都利用了缓冲区溢出进行攻击。区溢出进行攻击。lIn 2004,
6、the Witty worm takes advantage of a buffer overflow flaw in several Internet Security Systems(ISS)products.2022-12-16Source from CERT(Computer Emergency Response Team)CERT Advisories,http:/www.cert.org/advisories/缓冲区溢出相关的软件安全隐患数目占整个软件安全隐患数目的比例缓冲区溢出相关的软件安全隐患数目占整个软件安全隐患数目的比例2022-12-16缓冲溢出概述缓冲溢出概述(续)(续
7、)l4.造成缓冲区溢出的根本原因造成缓冲区溢出的根本原因l代码在操作缓冲区时,没有有效地对缓冲区边界进行检代码在操作缓冲区时,没有有效地对缓冲区边界进行检查查,使得写入缓冲区的数据量超过缓冲区能够容纳的范,使得写入缓冲区的数据量超过缓冲区能够容纳的范围,从而导致溢出的数据改写了与该缓冲区相邻存储单围,从而导致溢出的数据改写了与该缓冲区相邻存储单元的内容。元的内容。lC and C+are the most common languages to create buffer overflows.lC语言中许多字符串处理函数如:语言中许多字符串处理函数如:Strcpy、Strcat、Gets、Sp
8、rintf等都没有对数组越界加以检测和限制。等都没有对数组越界加以检测和限制。2022-12-16缓冲溢出概述缓冲溢出概述(续)(续)lMicrosoft Windows,Linux/Unix,Apple Macintosh等主流操作系统无一例外存在缓冲区等主流操作系统无一例外存在缓冲区溢出问题。溢出问题。l存在缓冲区溢出问题的应用程序也广泛存在,涉存在缓冲区溢出问题的应用程序也广泛存在,涉及数据库系统例如及数据库系统例如Microsoft SQL Server 2000,Oracle9i,网络服务,网络服务(Microsoft IIS),网络协议,网络协议实现实现(例如例如OpenSSL),
9、多媒体软件,多媒体软件(Apple QuickTime)等等等等 2022-12-16缓冲溢出概述缓冲溢出概述(续)(续)l缓冲区溢出可以成为攻击者实现攻击目标的手段,缓冲区溢出可以成为攻击者实现攻击目标的手段,但是单纯地溢出缓冲区并不能达到攻击的目的。但是单纯地溢出缓冲区并不能达到攻击的目的。l在绝大多数情况下,一旦程序中发生缓冲区溢出,系统在绝大多数情况下,一旦程序中发生缓冲区溢出,系统会立即中止程序并报告会立即中止程序并报告“fault segment”。例如缓冲区。例如缓冲区溢出,将使返回地址改写为一个非法的、不存在的地址,溢出,将使返回地址改写为一个非法的、不存在的地址,从而出现从而
10、出现core dump错误,不能达到攻击目的。错误,不能达到攻击目的。l只有对缓冲区溢出只有对缓冲区溢出“适当地适当地”加以利用,攻击者才加以利用,攻击者才能通过其实现攻击目标。能通过其实现攻击目标。2022-12-16第第7 7章章 计算机系统安全(缓冲区溢出)计算机系统安全(缓冲区溢出)缓冲区溢出概述缓冲区溢出概述 缓冲区溢出攻击的防御技术缓冲区溢出攻击的防御技术 2022-12-16缓冲溢出攻击的原理缓冲溢出攻击的原理l1.缓冲区溢出攻击模式缓冲区溢出攻击模式Attacked System溢出缓冲区溢出缓冲区重定向到攻击程序重定向到攻击程序任意地执行程序任意地执行程序执行攻击程序执行攻击
11、程序Attacker注入恶意数据注入恶意数据获得控制权获得控制权找到可利用的缓冲找到可利用的缓冲区溢出隐患区溢出隐患恶意数据可以通过恶意数据可以通过命令行参数、命令行参数、环境变量、环境变量、输入文件或者输入文件或者网络数据注入网络数据注入2022-12-16缓冲溢出攻击的原理(续)缓冲溢出攻击的原理(续)l2.缓冲区溢出可能发生的位置缓冲区溢出可能发生的位置l预备知识点预备知识点l进程在内存中的布局进程在内存中的布局2022-12-16缓冲溢出攻击的原理(续)缓冲溢出攻击的原理(续)l代码段代码段/文本段文本段l用于放置程序的可执行代码用于放置程序的可执行代码(机器码机器码)。l数据段数据段
12、l用于放置已初始化的全局变量和已初始用于放置已初始化的全局变量和已初始化的局部静态变量。化的局部静态变量。lBSS(Block Started by Symbol)段段l用于放置未初始化的全局变量和未初始用于放置未初始化的全局变量和未初始化的局部静态变量。化的局部静态变量。l堆堆l用于动态分配内存。用于动态分配内存。l堆栈段堆栈段l用于存放函数的参数,返回地址,调用用于存放函数的参数,返回地址,调用函数的栈基址以及局部非静态变量。函数的栈基址以及局部非静态变量。l进程的环境变量和参数进程的环境变量和参数.text.data.bssheapunusedstackenvLow addressHig
13、h addressLinux/Intel IA-32 architecture 2022-12-16缓冲溢出攻击的原理(续)缓冲溢出攻击的原理(续)l2.缓冲区溢出可能发生的位置(续)缓冲区溢出可能发生的位置(续)l堆栈堆栈(stack)l堆堆(heap)l数据段数据段(data)lBSS段段.text.data.bssheapunusedstackenvLow addressHigh addressLinux/Intel IA-32 architecture 2022-12-16缓冲溢出攻击的原理(续)缓冲溢出攻击的原理(续)l2.缓冲区溢出可能发生的位置(续)缓冲区溢出可能发生的位置(续)
14、l堆栈堆栈(stack)l堆堆(heap)l数据段数据段(data)lBSS段段.text.data.bssheapunusedstackenvLow addressHigh addressLinux/Intel IA-32 architecture 2022-12-16被调函数堆栈布局被调函数堆栈布局l堆栈采用后进先出堆栈采用后进先出(LIFO)的方式管理数据,这种的方式管理数据,这种方式是实现函数嵌套调用的关键。方式是实现函数嵌套调用的关键。Previous stack framesFunction argumentsReturn addressPrevious frame pointer
15、Local variablesHigh addressLow address从右到左的顺序从右到左的顺序指令寄存器指令寄存器(EIP)基址寄存器基址寄存器(EBP)局部非静态变量局部非静态变量2022-12-16缓冲溢出攻击的原理(续)缓冲溢出攻击的原理(续)l基于堆栈的缓冲区溢出基于堆栈的缓冲区溢出void function(char*str)char buffer4;strcpy(buffer,str);void main(int argc,char*argv)char large_string8;int i;for(i=0;i8;i+)large_bufferi=Afunction(la
16、rge_string);2022-12-16Example(contd.)Large_string上一个栈帧地址上一个栈帧地址 返回地址返回地址 argv内存低端内存低端内存高端内存高端argcESPmain函数栈帧函数栈帧void main(int argc,char*argv)i2022-12-16缓冲溢出攻击的原理(续)缓冲溢出攻击的原理(续)l基于堆栈的缓冲区溢出基于堆栈的缓冲区溢出void function(char*str)char buffer4;strcpy(buffer,str);void main(int argc,char*argv)char large_string8;
17、int i;for(i=0;iBB.BBB(total 15 Bs)l产生溢出的输入产生溢出的输入lPrompt:BB.BBB(total 40 Bs)(a)heap layout without overflow0030035000300360003003700030034000300380BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB0AAAAAA0(b)heap layout with overflowBBBBBBBBBBBBBBB0AAAAAAAAAAAAAAA02022-12-16基于堆的缓冲区溢出攻击举例基于堆的缓冲区溢出攻击举例l1996年年BS
18、DI crontab被发现存在基于堆的缓冲区被发现存在基于堆的缓冲区溢出隐患,攻击者可以通过输入一个长文件名溢溢出隐患,攻击者可以通过输入一个长文件名溢出在堆上的缓冲区,溢出数据改写的区域是保存出在堆上的缓冲区,溢出数据改写的区域是保存有用户名、密码、有用户名、密码、uid,gid等信息的区域。等信息的区域。2022-12-16缓冲溢出攻击的原理(续)缓冲溢出攻击的原理(续)l2.缓冲区溢出可能发生的位置(续)缓冲区溢出可能发生的位置(续)l堆栈堆栈(stack)l堆堆(heap)l数据段数据段(data)lBSS段段.text.data.bssheapunusedstackenvLow ad
19、dressHigh addressLinux/Intel IA-32 architecture 2022-12-16缓冲溢出攻击的原理(续)缓冲溢出攻击的原理(续)l基于数据段的缓冲区溢出基于数据段的缓冲区溢出void Overflow_Data(char*input)static char buf4=”CCCC”;int i;for(i=0;i 12;i+)bufi=A;2022-12-16缓冲溢出攻击的原理(续)缓冲溢出攻击的原理(续)l2.缓冲区溢出可能发生的位置(续)缓冲区溢出可能发生的位置(续)l堆栈堆栈(stack)l堆堆(heap)l数据段数据段(data)lBSS段段.text
20、.data.bssheapunusedstackenvLow addressHigh addressLinux/Intel IA-32 architecture 2022-12-16缓冲溢出攻击的原理(续)缓冲溢出攻击的原理(续)l基于基于BSS段的缓冲区溢出段的缓冲区溢出void Overflow_BSS(char*input)static char buf4;int i;for(i=0;i 12;i+)bufi=A;2022-12-16缓冲溢出攻击的原理(续)缓冲溢出攻击的原理(续)l3.常见的溢出缓冲区的途径常见的溢出缓冲区的途径l利用利用C的标准函数库的标准函数库l常见的有常见的有st
21、rcpy、strcat、sprintf、gets “Mudge”.How to Write Buffer Overflows.http:/ A.Henry MCP+I et al.Buffer Overflow Attacks.CyberGuard Corp.C.Cowan et al.Buffer overflows:Attacks and defenses for the vulnerability of the decade.Proceedings of the DARPA Information Survivability Conference and Expo,1999.2022-1
22、2-16缓冲溢出攻击的原理(续)缓冲溢出攻击的原理(续)l利用数组下标的越界操作利用数组下标的越界操作lOff-by-one缓冲区溢出缓冲区溢出l利用数组的最大下标与数组长度的差异产生。利用数组的最大下标与数组长度的差异产生。例如例如l1998年年10月月BugTraq公布出公布出Linux libc中的中的realpath函数存在函数存在single-byte缓冲区溢出隐患,攻击者可以利用它获得缓冲区溢出隐患,攻击者可以利用它获得root权限。权限。参见参见O.Kirch.The poisoned nul byte,post to the bugtraq mailing list,Octob
23、er 1998.l2000年年12月月OpenBSD安全组公布安全组公布ftpd存在类似安全隐患。参见存在类似安全隐患。参见OpenBSD developers,single-byte buffer overflow vulnerability in ftpd,December 2000.void BadCode(char*str)char buffer512;for(i=0;i=512;i+)bufferi=stri;2022-12-16缓冲溢出攻击的原理(续)缓冲溢出攻击的原理(续)l利用有符号整数与无符号整数的转换利用有符号整数与无符号整数的转换 void BadCode(char*in
展开阅读全文