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
24、put)short len;char buf64;len=strlen(input);if(len MAX_BUF)strcpy(buf,input);2022-12-16缓冲溢出攻击的原理(续)缓冲溢出攻击的原理(续)l4.恶意代码(注入)恶意代码(注入)例如为实现:例如为实现:“exec(/bin/sh)”char shellcode =”xebx1fx5ex89x76x08x31xc0”x88x46x07x89x46x0cxb0 x0b”x89xf3x8dx4ex08x8dx56x0c”xcdx80 x31xdbx89xd8x40 xcd”x80 xe8xdcxffxffxff/bin/
25、sh”;char large_string 128;void main()char buffer 96;int i;long*long_ptr;long_ptr=(long*)large_string;for(i=0;i 32;i+)*(long_ptr+i)=(int)buffer;for(i=0;istrlen(shellcode);i+)large_string i =shellcode i ;strcpy(buffer,large_string);2022-12-16The secret of the shellcodechar shellcode =/*main:*/xebx1f /
26、*jmp$0 x1f or jmp callz */*start:*/x5e /*popl%esi */x89x76x08 /*movl%esi,$0 x08(%esi)*/x31xc0 /*xorl%eax,%eax*/x88x46x07 /*movb%al,0 x07(%esi)*/x89x46x0c /*movl%eax,$0 x0c(%esi)*/xb0 x0b /*movb$0 x0b,%al */x89xf3 /*movl%esi,%ebx */x8dx4ex08 /*leal 0 x08(%esi),%ecx*/x8dx56x0c /*leal 0 x0c(%esi),%edx*
27、/xcdx80 /*int$0 x80 */x31xdb /*xorl%ebx,%ebx*/x89xd8 /*movl%ebx,%eax */x40 /*inc%eax*/xcdx80 /*int$0 x80 */*callz:*/xe8xdcxffxffxff /*call start */*DATA*/bin/sh;1322022-12-16基于堆栈的缓冲区溢出攻击举例基于堆栈的缓冲区溢出攻击举例char shellcode =”xebx1fx5ex89x76x08x31xc0”x88x46x07x89x46x0cxb0 x0b”x89xf3x8dx4ex08x8dx56x0c”xcdx8
28、0 x31xdbx89xd8x40 xcd”x80 xe8xdcxffxffxff/bin/sh”;char large_string 128;void main()char buffer 96;int i;long*long_ptr;long_ptr=(long*)large_string;for(i=0;i 32;i+)*(long_ptr+i)=(int)buffer;for(i=0;istrlen(shellcode);i+)large_string i =shellcode i ;strcpy(buffer,large_string);for(i=0;i strncpylstrcat
29、 -strncatlgets-fgetsl缺点缺点l使用不当仍然会造成缓冲区溢出问题。使用不当仍然会造成缓冲区溢出问题。例如例如Microsoft Visual Studio提供的提供的C的标准函数库的标准函数库strsafe;2022-12-16缓冲区溢出攻击的防御技术缓冲区溢出攻击的防御技术l基于软件的防御技术基于软件的防御技术l类型安全的编程语言类型安全的编程语言l相对安全的函数库相对安全的函数库l修改的编译器修改的编译器l内核补丁内核补丁l静态分析方法静态分析方法l动态检测方法动态检测方法l基于硬件的防御技术基于硬件的防御技术l处理器结构方面的改进处理器结构方面的改进2022-12-1
30、6基于软件的防御技术(续)基于软件的防御技术(续)l修改的编译器修改的编译器l增强边界检查能力的增强边界检查能力的C/C+编译器编译器l例如针对例如针对GNU C编译器扩展数组和指针的边界检查。编译器扩展数组和指针的边界检查。Windows Visual C+.NET的的GS 选项也提供动态检测缓冲区选项也提供动态检测缓冲区溢出的能力。溢出的能力。l返回地址的完整性保护返回地址的完整性保护l将堆栈上的返回地址备份到另一个内存空间;在函数执行返将堆栈上的返回地址备份到另一个内存空间;在函数执行返回指令前,将备份的返回地址重新写回堆栈。回指令前,将备份的返回地址重新写回堆栈。l许多高性能超标量微处
31、理器具有一个返回地址栈,用于指令许多高性能超标量微处理器具有一个返回地址栈,用于指令分支预测。返回地址栈保存了返回地址的备份,可用于返回分支预测。返回地址栈保存了返回地址的备份,可用于返回地址的完整性保护地址的完整性保护 l缺点缺点l性能代价性能代价l检查方法仍不完善检查方法仍不完善 2022-12-16缓冲区溢出攻击的防御技术缓冲区溢出攻击的防御技术l基于软件的防御技术基于软件的防御技术l类型安全的编程语言类型安全的编程语言l相对安全的函数库相对安全的函数库l修改的编译器修改的编译器l内核补丁内核补丁l静态分析方法静态分析方法l动态检测方法动态检测方法l基于硬件的防御技术基于硬件的防御技术l
32、处理器结构方面的改进处理器结构方面的改进2022-12-16基于软件的防御技术(续)基于软件的防御技术(续)l内核补丁内核补丁l将堆栈标志为不可执行来阻止缓冲区溢出攻击;将堆栈标志为不可执行来阻止缓冲区溢出攻击;l将堆或者数据段标志为不可执行。将堆或者数据段标志为不可执行。l例如例如Linux的内核补丁的内核补丁Openwall、RSX、kNoX、ExecShield和和PaX等实现了不可执行堆栈,并且等实现了不可执行堆栈,并且RSX、kNoX、ExecShield、PaX还支持不可执行堆。另外,为还支持不可执行堆。另外,为了抵制了抵制return-to-libc这类的攻击,这类的攻击,PaX
33、增加了一个特性,增加了一个特性,将函数库映射到随机的内存空间将函数库映射到随机的内存空间l缺点:缺点:对于一些需要堆栈对于一些需要堆栈/堆堆/数据段为可执行状态的应数据段为可执行状态的应用程序不合适;需要重新编译原来的程序,如果没有源用程序不合适;需要重新编译原来的程序,如果没有源代码,就不能获得这种保护。代码,就不能获得这种保护。2022-12-16缓冲区溢出攻击的防御技术缓冲区溢出攻击的防御技术l基于软件的防御技术基于软件的防御技术l类型安全的编程语言类型安全的编程语言l相对安全的函数库相对安全的函数库l修改的编译器修改的编译器l内核补丁内核补丁l静态分析方法静态分析方法l动态检测方法动态
34、检测方法l基于硬件的防御技术基于硬件的防御技术l处理器结构方面的改进处理器结构方面的改进2022-12-16基于软件的防御技术(续)基于软件的防御技术(续)l静态分析方法静态分析方法l字典检查法字典检查法l遍历源程序查找其中使用到的不安全的库函数和系统调遍历源程序查找其中使用到的不安全的库函数和系统调用。用。l例如静态分析工具例如静态分析工具ITS4、RATS(Rough Auditing Tool for Security)等。其中等。其中RATS提供对提供对C,C+,Perl,PHP以以及及Python语言的扫描检测。语言的扫描检测。l缺点:误报率很高,需要配合大量的人工检查工作。缺点:误
35、报率很高,需要配合大量的人工检查工作。2022-12-16基于软件的防御技术(续)基于软件的防御技术(续)l静态分析方法(续)静态分析方法(续)l程序注解法程序注解法 l包括缓冲区的大小,指针是否可以为空,输入的有效约包括缓冲区的大小,指针是否可以为空,输入的有效约定等等。定等等。l例如静态分析工具例如静态分析工具LCLINT、SPLINT(Secure Programming Lint)。l缺点:依赖注释的质量缺点:依赖注释的质量2022-12-16基于软件的防御技术(续)基于软件的防御技术(续)l静态分析方法(续)静态分析方法(续)l整数分析法整数分析法l将字符串形式化为一对整数,表明字符
36、串长度将字符串形式化为一对整数,表明字符串长度(以字节以字节数为单位数为单位)以及目前已经使用缓冲区的字节数。通过这以及目前已经使用缓冲区的字节数。通过这样的形式化处理,将缓冲区溢出的检测转化为整数计算。样的形式化处理,将缓冲区溢出的检测转化为整数计算。l例如静态分析工具例如静态分析工具BOON(Buffer Overrun detectiON)。l缺点:仅检查缺点:仅检查C中进行字符串操作的标准库函数。检查中进行字符串操作的标准库函数。检查范围很有限。范围很有限。2022-12-16基于软件的防御技术(续)基于软件的防御技术(续)l静态分析方法(续)静态分析方法(续)l控制流程分析法控制流程
37、分析法l将源程序中的每个函数抽象成语法树,然后再把语法树将源程序中的每个函数抽象成语法树,然后再把语法树转换为调用图转换为调用图/控制流程图来检查函数参数和缓冲区的控制流程图来检查函数参数和缓冲区的范围。范围。l例如静态分析工具例如静态分析工具ARCHER(ARray CHeckER)、UNO、PREfast和和Coverity等。等。l缺点:对于运行时才会显露的问题无法进行分析缺点:对于运行时才会显露的问题无法进行分析;存;存在误报的可能。在误报的可能。2022-12-16缓冲区溢出攻击的防御技术缓冲区溢出攻击的防御技术l基于软件的防御技术基于软件的防御技术l类型安全的编程语言类型安全的编程
38、语言l相对安全的函数库相对安全的函数库l修改的编译器修改的编译器l内核补丁内核补丁l静态分析方法静态分析方法l动态检测方法动态检测方法l基于硬件的防御技术基于硬件的防御技术l处理器结构方面的改进处理器结构方面的改进2022-12-16基于软件的防御技术(续)基于软件的防御技术(续)l动态检测方法动态检测方法l Canary-based 检测方法检测方法l将将canary(一个检测值一个检测值)放在缓冲区和需要保护的数据之放在缓冲区和需要保护的数据之间,并且假设如果从缓冲区溢出的数据改写了被保护数间,并且假设如果从缓冲区溢出的数据改写了被保护数据,检测值也必定被改写。据,检测值也必定被改写。l例
39、如动态检测工具例如动态检测工具StackGuard、StackGhost、ProPolice、PointGuard等。等。l缺点:多少工具通过修改编译器实现检测功能,需要重缺点:多少工具通过修改编译器实现检测功能,需要重新编译程序;这种方法无法检测能过绕过检测值的缓冲新编译程序;这种方法无法检测能过绕过检测值的缓冲区溢出攻击。区溢出攻击。protected Datacanary.buffer2022-12-16基于软件的防御技术(续)基于软件的防御技术(续)l动态检测方法(续)动态检测方法(续)l 输入检测方法输入检测方法l向运行程序提供不同的输入,检查在这些输入条件下程向运行程序提供不同的输
40、入,检查在这些输入条件下程序是否出现缓冲区溢出问题。不仅能检测缓冲区溢出问序是否出现缓冲区溢出问题。不仅能检测缓冲区溢出问题,还可以检测其它内存越界问题。题,还可以检测其它内存越界问题。l采用输入检测方法的工具有采用输入检测方法的工具有Purify、Fuzz和和FIST(Fault Injection Security Tool)。l缺点:系统性能明显降低。输入检测方法的检测效果取缺点:系统性能明显降低。输入检测方法的检测效果取决于输入能否激发缓冲区溢出等安全问题的出现。决于输入能否激发缓冲区溢出等安全问题的出现。2022-12-16缓冲区溢出攻击的防御技术缓冲区溢出攻击的防御技术l基于软件的
41、防御技术基于软件的防御技术l类型安全的编程语言类型安全的编程语言l相对安全的函数库相对安全的函数库l修改的编译器修改的编译器l内核补丁内核补丁l静态分析方法静态分析方法l动态检测方法动态检测方法l基于硬件的防御技术基于硬件的防御技术l处理器结构方面的改进处理器结构方面的改进2022-12-16基于硬件的防御技术基于硬件的防御技术l64位处理器的支持位处理器的支持l Intel/AMD 64位处理器引入称为位处理器引入称为NX(No Execute)或者或者AVP(Advanced Virus Protection)的新特性,将以前的的新特性,将以前的CPU合为一个状态存在的合为一个状态存在的“
42、数据页只读数据页只读”和和“数据页可数据页可执行执行”分成两个独立的状态。分成两个独立的状态。lELF64 SystemV ABI通过寄存器传递函数参数而不再放通过寄存器传递函数参数而不再放置在堆栈上,使得置在堆栈上,使得64位处理器不仅可以抵制需要注入攻位处理器不仅可以抵制需要注入攻击代码的缓冲区溢出攻击还可以抵制击代码的缓冲区溢出攻击还可以抵制return-to-libc这类这类的攻击。的攻击。l缺点:无法抵制缺点:无法抵制“borrowed code chunks”这类的攻击。这类的攻击。可参见可参见Sebastian Krahmer.X86-64 buffer overflow exp
43、loits and the borrowed code chunks exploitation technique.http:/www.suse.de/krahmer/no-nx.pdf,Sep.2005.2022-12-16缓冲区溢出攻击防御技术展望缓冲区溢出攻击防御技术展望lSoftware-based solutions in conjunction with existing hardware-based techniques.lPractical security polices to implement safe software engineering.lComprehensiv
44、e tools or methodologies should be available to help developers design and implement software in a security conscious manner.2022-12-16教材与参考书教材与参考书l教材:教材:l李毅超李毅超 曹跃,网络与系统攻击技术曹跃,网络与系统攻击技术 电子科大出版社电子科大出版社 2007 l周世杰周世杰 陈伟陈伟 钟婷,网络与系统防御技术钟婷,网络与系统防御技术 电子科大出版社电子科大出版社 2007 l参考书参考书l阙喜戎阙喜戎 等等 编著,信息安全原理及应用,清华大学
45、出版社编著,信息安全原理及应用,清华大学出版社lChristopher M.King,Curitis E.Dalton,T.Ertem Osmanoglu(常晓波(常晓波等译)等译).安全体系结构的设计、部署与操作,清华大学出版社,安全体系结构的设计、部署与操作,清华大学出版社,2003(Christopher M.King,et al,Security Architecture,design,deployment&Operations)lWilliam Stallings,密码编码学与网络安全原理与实践(第三版),密码编码学与网络安全原理与实践(第三版),电子工业出版社,电子工业出版社,20
46、04lStephen Northcutt,深入剖析网络边界安全,机械工业出版社,深入剖析网络边界安全,机械工业出版社,2003l冯登国,计算机通信网络安全,冯登国,计算机通信网络安全,2001lBruce Schneier,Applied Cryptography,Protocols,algorithms,and source code in C(2nd Edition)(应用密码学应用密码学 协议、算法与协议、算法与C源程序,源程序,吴世忠、祝世雄、张文政等译吴世忠、祝世雄、张文政等译)l蔡皖东,网络与信息安全,西北工业大学出版社,蔡皖东,网络与信息安全,西北工业大学出版社,20042022-12-16Any Question?Q&A
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。