【大学】信息安全综合实验.ppt
1,信息安全综合实验,http:/,2,第四章 缓冲区溢出,课程目的学习缓冲区溢出攻击的基本概念和原理掌握预防和防御缓冲区溢出攻击的方法,http:/,3,缓冲区溢出攻击,Buffer overflow attack 缓冲区溢出攻击缓冲区溢出漏洞大量存在于各种软件中利用缓冲区溢出的攻击,会导致系统当机,获得系统特权等严重后果。最早的攻击1988年UNIX下的Morris worm最近的攻击Codered 利用IIS漏洞SQL Server Worm 利用SQL Server漏洞Blaster 利用RPC漏洞Sasser利用LSASS漏洞,http:/,4,缓冲区溢出攻击原理,向缓冲区写入超过缓冲区长度的内容,造成缓冲区溢出,破坏程序的堆栈,使程序转而执行其他的指令,达到攻击的目的。原因:程序中缺少错误检测:void func(char*str)char buf16;strcpy(buf,str);如果str的内容多于16个非0字符,就会造成buf的溢出,使程序出错。,http:/,5,缓冲区溢出攻击原理,类似函数有strcat、sprintf、vsprintf、gets、scanf等一般溢出会造成程序读/写或执行非法内存的数据,引发segmentation fault异常退出.如果在一个suid程序中特意构造内容,可以有目的的执行程序,如/bin/sh,得到root权限。,http:/,6,缓冲区溢出攻击原理,对于使用C语言开发的软件,缓冲区溢出大部分是数组越界或指针非法引用造成的。有时并不引发溢出也能进行攻击。现存的软件中可能存在缓冲区溢出攻击,因此缓冲区溢出攻击短期内不可能杜绝。缓冲区溢出的危害很大:可以植入并运行攻击代码比大部分DoS攻击危害严重,http:/,7,缓冲区溢出攻击要素,在进程的地址空间安排适当的代码通过适当的初始化寄存器和内存,跳转到以上代码段执行,http:/,8,安排代码的方法,利用进程中存在的代码传递一个适当的参数如程序中有exec(arg),只要把arg指向“/bin/sh”就可以了植入法把指令序列放到缓冲区中堆、栈、数据段都可以存放攻击代码,最常见的是利用栈,http:/,9,内存,段属性Text:EData:R/WStack:R/W/E栈需要E属性Signal HandlingTrampoline code,Text,Data,Stack,High,Low,Heap,http:/,10,控制程序转移到攻击代码的方法,利用活动记录溢出栈中的局部变量,使返回地址指向攻击代码 栈溢出攻击 Stack Smashing Attack,http:/,11,控制程序转移到攻击代码的方法,函数指针如果定义有函数指针,溢出函数指针前面的缓冲区,修改函数指针的内容,http:/,12,控制程序转移到攻击代码的方法,长跳转缓冲区 longjmp buffersSetjmp/longjmp语句覆盖setjmp/longjmp的缓冲区内容,http:/,13,常见的攻击技术,一个字符串中完成代码植入和跳转一般修改活动记录,http:/,14,缓冲区溢出攻击的避免,缓冲区不可执行植入的攻击代码无法执行,不能产生大的危害编写正确的代码编译器进行类型、边界检查,实现缓冲区的保护java运行时(Runtime)指针、边界检查,http:/,15,缓冲区不可执行,Linux/Solaris都可以设置202.38.64.10/11都设置了能杜绝绝大部分,但不是所有缓冲区溢出攻击Linux在以下情况下栈必须可执行:Signalgcc在线重用,http:/,16,防范缓冲区攻击的普遍方法,关闭不需要端口和服务安装最新的补丁检查关键程序以最小的权限运行软件不使用root身份来运行apache,named等服务程序,http:/,17,实验内容,实验一提示:./width1 65536 adfad65536 复制给 s后变成 0,http:/,