缓冲区溢出攻击是利用缓冲区溢出漏洞所进行的攻击行为,是一种非常普遍、非常危险的漏洞,也是最常见的网络攻击手段,该攻击虽然简单但危害性极大。那么缓冲区溢出攻击是什么?如何防御?本文详细介绍一下。
缓冲区溢出攻击是什么?
缓冲区溢出攻击是利用缓冲区溢出漏洞所进行的攻击行动。缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统关机、重新启动等后果。
缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。理想的情况是:程序会检查数据长度,而且并不允许输入超过缓冲区长度的字符。但是绝大多数程序都会假设数据长度总是与所分配的存储空间相匹配,这就是为缓冲区溢出埋下隐患。操作系统所使用的缓冲区,又被称为堆栈,在各个操作进程之间,指令会被临时储存在堆栈当中,堆栈也会出现缓冲区溢出。
缓冲区溢出攻击如何防御?
1、严格编写程序代码
众所周知,编写正确严格的代码是一件非常耗时耗力的工作,虽然软件的发展经历了半个世纪的时间,但是依旧存在着漏洞程序,所以人们开发了一些工具和技术来帮助经验不足的程序员来编写安全的程序。比如说高级查错工具,如fault injection等,这些工具的目的就是在于通过人为随机的产生一些缓冲区溢出来寻找代码的安全漏洞,可是由于C语言的本身特点,这些工具不能找出所有的缓冲区溢出漏洞,因此侦错技术只是被用来减少缓冲区溢出漏洞,并不能完全消灭,想要完全消灭这类漏洞,就需要程序员严格编写代码。
2、禁止执行堆栈数据段
在进行系统操作时数据地址空间不可执行,从而禁止攻击者执行被植入的攻击代码,这种措施在一定的程度上也对缓冲区溢出攻击起到了防范作用。但是攻击者不一定非要通过植入攻击代码来实现缓冲区溢出攻击,所以这种方法并不能彻底解决缓冲区溢出攻击。
3、利用程序编译器的边界检查
植入攻击代码时引起缓冲区溢出攻击的一个方面,改变程序执行的流程则是另一个方面,而利用程序编译器的边界检查则使得缓冲区溢出攻击不可能实现,从而完全消除了缓冲区溢出攻击的威胁。
4、指针完全性检查
程序指针完整性检查和边界检查略有不同,程序指针完整性检查在程序指针被改变之前检测,因此即使攻击者成功改变了程序的指针,也会因为先前检测到指针的变化而失效,这样虽然不能完全解决问题,但是他确实阻止了大多数的缓冲区溢出攻击,并且这种方法在性能方面有很大优势,兼容性特别优良。
标签:哪些,攻击,程序,漏洞,缓冲区,溢出,指针 From: https://blog.51cto.com/u_14661964/6068608