第七章计算机系统安全(缓冲区溢出)精编版

上传人:ahu****ng1 文档编号:145717709 上传时间:2020-09-22 格式:PPTX 页数:66 大小:570.98KB
返回 下载 相关 举报
第七章计算机系统安全(缓冲区溢出)精编版_第1页
第1页 / 共66页
第七章计算机系统安全(缓冲区溢出)精编版_第2页
第2页 / 共66页
第七章计算机系统安全(缓冲区溢出)精编版_第3页
第3页 / 共66页
第七章计算机系统安全(缓冲区溢出)精编版_第4页
第4页 / 共66页
第七章计算机系统安全(缓冲区溢出)精编版_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《第七章计算机系统安全(缓冲区溢出)精编版》由会员分享,可在线阅读,更多相关《第七章计算机系统安全(缓冲区溢出)精编版(66页珍藏版)》请在金锄头文库上搜索。

1、2020/9/22,网络安全Network Security,2020/9/22,第7章 计算机系统安全(缓冲区溢出),缓冲区溢出概述,缓冲区溢出攻击的原理,缓冲区溢出攻击的防御技术,2020/9/22,第7章 计算机系统安全(缓冲区溢出),缓冲区溢出概述,缓冲区溢出攻击的原理,缓冲区溢出攻击的防御技术,2020/9/22,缓冲溢出概述,1. 缓冲区的定义 连续的一段存储空间。 2. 缓冲区溢出的定义 指写入缓冲区的数据量超过该缓冲区能容纳的最大限度,造成溢出的数据改写了与该缓冲区相邻的原始数据的情形。 Buffer overflow is the result of writing more

2、 data into a buffer than the buffer can hold.,2020/9/22,Example,Consider the following code,int main(void) char buffer4; strcpy(buffer, “AAA”); ,AAA0,2020/9/22,Example (contd.),Now we input 4+4+3 As instead of 4 As.,int main(void) char buffer4; strcpy(buffer, “ ”); ,AAA,AAAAAAAAAAA,main stack frame,

3、previous stack frame,buffer4,Higher addresses,Lower addresses,?,2020/9/22,缓冲溢出概述(续),3. 缓冲区溢出的危害 利用缓冲区溢出实现在本地或者远程系统上实现任意执行代码的目的,从而进一步达到对被攻击系统的完全掌控; 利用缓冲区溢出进行DoS(Denial of Service)攻击; 利用缓冲区溢出破坏关键数据,使系统的稳定性和有效性受到不同程度的影响; 实现蠕虫程序 1988 Robert T. Morris蠕虫利用UNIX 系统中In, the Morris Internet worm exploited buf

4、fer overflow vulnerability in fingerd server program on UNIX systems. 曾在2001年造成大约26亿美元损失的Code Red蠕虫及其变体就是利用了Microsoft IIS中的缓冲区溢出进行攻击 2002年的Sapphire蠕虫和2004年的Witty蠕虫也都利用了缓冲区溢出进行攻击。 In 2004, the Witty worm takes advantage of a buffer overflow flaw in several Internet Security Systems (ISS) products.,20

5、20/9/22,Source from CERT (Computer Emergency Response Team) CERT Advisories,缓冲区溢出相关的软件安全隐患数目占整个软件安全隐患数目的比例,2020/9/22,缓冲溢出概述(续),4. 造成缓冲区溢出的根本原因 代码在操作缓冲区时,没有有效地对缓冲区边界进行检查,使得写入缓冲区的数据量超过缓冲区能够容纳的范围,从而导致溢出的数据改写了与该缓冲区相邻存储单元的内容。 C and C+ are the most common languages to create buffer overflows. C语言中许多字符串处理函

6、数如:Strcpy、Strcat、Gets、Sprintf等都没有对数组越界加以检测和限制。,2020/9/22,缓冲溢出概述(续),Microsoft Windows,Linux/Unix,Apple Macintosh等主流操作系统无一例外存在缓冲区溢出问题。 存在缓冲区溢出问题的应用程序也广泛存在,涉及数据库系统例如Microsoft SQL Server 2000, Oracle9i,网络服务(Microsoft IIS),网络协议实现(例如OpenSSL),多媒体软件(Apple QuickTime)等等,2020/9/22,缓冲溢出概述(续),缓冲区溢出可以成为攻击者实现攻击目标的

7、手段,但是单纯地溢出缓冲区并不能达到攻击的目的。 在绝大多数情况下,一旦程序中发生缓冲区溢出,系统会立即中止程序并报告“fault segment”。例如缓冲区溢出,将使返回地址改写为一个非法的、不存在的地址,从而出现core dump错误,不能达到攻击目的。 只有对缓冲区溢出“适当地”加以利用,攻击者才能通过其实现攻击目标。,2020/9/22,第7章 计算机系统安全(缓冲区溢出),缓冲区溢出概述,缓冲区溢出攻击的原理,缓冲区溢出攻击的防御技术,2020/9/22,缓冲溢出攻击的原理,1. 缓冲区溢出攻击模式,Attacked System,溢出缓冲区,重定向到攻击程序,任意地执行程序,执行

8、攻击程序,Attacker,注入恶意数据,获得控制权,找到可利用的缓冲区溢出隐患,恶意数据可以通过 命令行参数、 环境变量、 输入文件或者 网络数据注入,2020/9/22,缓冲溢出攻击的原理(续),2. 缓冲区溢出可能发生的位置 预备知识点 进程在内存中的布局,2020/9/22,缓冲溢出攻击的原理(续),代码段/文本段 用于放置程序的可执行代码 (机器码) 。 数据段 用于放置已初始化的全局变量和已初始化的局部静态变量。 BSS (Block Started by Symbol)段 用于放置未初始化的全局变量和未初始化的局部静态变量。 堆 用于动态分配内存。 堆栈段 用于存放函数的参数,返

9、回地址,调用函数的栈基址以及局部非静态变量。 进程的环境变量和参数,2020/9/22,缓冲溢出攻击的原理(续),2. 缓冲区溢出可能发生的位置(续) 堆栈(stack) 堆(heap) 数据段(data) BSS段,2020/9/22,缓冲溢出攻击的原理(续),2. 缓冲区溢出可能发生的位置(续) 堆栈(stack) 堆(heap) 数据段(data) BSS段,2020/9/22,被调函数堆栈布局,堆栈采用后进先出(LIFO)的方式管理数据,这种方式是实现函数嵌套调用的关键。,Previous stack frames,Function arguments,Return address,P

10、revious frame pointer,Local variables,High address,Low address,从右到左的顺序,指令寄存器(EIP),基址寄存器(EBP),局部非静态变量,2020/9/22,缓冲溢出攻击的原理(续),基于堆栈的缓冲区溢出,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=A function(lar

11、ge_string); ,2020/9/22,Example (contd.),Large_string,上一个栈帧地址,返回地址,argv,内存低端,内存高端,argc,ESP,main函数栈帧,void main (int argc, char *argv),i,2020/9/22,缓冲溢出攻击的原理(续),基于堆栈的缓冲区溢出,void function(char *str) char buffer4; strcpy(buffer, str); void main (int argc, char *argv) char large_string8; int i; for(i=0; i8;

12、 i+) large_bufferi=A function(large_string); ,2020/9/22,Example (contd.),Large_string,上一个栈帧地址,返回地址,argv,内存低端,内存高端,argc,ESP,Main函数的栈帧,i,*str,返回地址,main函数的栈帧地址,buffer,function函数栈帧,function函数 被调用,调用 strcpy之前,void function (char *str),2020/9/22,Example (contd.),Large_string,上一个栈帧地址,返回地址,argv,内存低端,内存高端,ar

13、gc,ESP,Main函数的栈帧,i,*str,返回地址,AAAA,AAAA,function函数栈帧,function函数 被调用,调用 strcpy之后,void function (char *str),2020/9/22,缓冲溢出攻击的原理(续),基于堆栈的缓冲区溢出的潜在危害 改写返回地址 改写调用函数栈的栈帧地址,2020/9/22,缓冲溢出攻击的原理(续),基于堆栈的缓冲区溢出的潜在危害(续) 改写函数指针 改写虚函数指针 改写异常处理指针 改写数据指针,void BadCode(char * string) void (*p)() = .; char buff100; strc

14、py(buff, string); p(); ,2020/9/22,缓冲溢出攻击的原理(续),2. 缓冲区溢出可能发生的位置(续) 堆栈(stack) 堆(heap) 数据段(data) BSS段,2020/9/22,缓冲溢出攻击的原理(续),基于堆的缓冲区溢出 Heap is a contiguous memory used to dynamically allocate space where the size will be known only during the execution of the code. 在Linux中,堆空间按照Doug Lea算法实现动态分配。在C程序中,标

15、准库函数malloc()/free()用于从堆中动态申请/释放块;对于C+程序,相应函数为new/delete。,2020/9/22,缓冲溢出攻击的原理(续),基于堆的缓冲区溢出(续),void main(int argc, char *argv) char *buf1 = (char *) malloc(16); char *buf2 = (char *) malloc(16); strcpy(buf1,”AAAAAAAAAAAAAAA”); strcpy(buf2, argv1); ,2020/9/22,基于堆的缓冲区溢出,正常输入 Prompt:BB.BBB (total 15 Bs)

16、产生溢出的输入 Prompt:BB.BBB (total 40 Bs),(a) heap layout without overflow,2020/9/22,基于堆的缓冲区溢出攻击举例,1996年BSDI crontab被发现存在基于堆的缓冲区溢出隐患,攻击者可以通过输入一个长文件名溢出在堆上的缓冲区,溢出数据改写的区域是保存有用户名、密码、uid, gid等信息的区域。,2020/9/22,缓冲溢出攻击的原理(续),2. 缓冲区溢出可能发生的位置(续) 堆栈(stack) 堆(heap) 数据段(data) BSS段,2020/9/22,缓冲溢出攻击的原理(续),基于数据段的缓冲区溢出,void Overflow_Data(char* input) static char buf4=”CCCC”; int i; for (i = 0; i 12 ; i+) bufi = A; ,2020/9/22,缓冲溢出攻击的原理(续),2. 缓冲区溢出可能发生的位置(续) 堆栈(sta

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号