本篇文章给大家谈谈《网络安全》常见攻击(十)缓冲区溢出攻击,以及对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
缓冲区溢出攻击攻击者利用程序漏洞,将自己的攻击代码植入到存在缓冲区溢出漏洞的程序执行体内,改变程序的执行流程,从而获得对目标系统的控制权。
缓冲区溢出攻击的原理是程序员写入超出程序缓冲区长度的内容,导致缓冲区溢出,从而破坏程序的堆栈,导致程序转而执行其他指令,从而达到攻击。缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。
缓冲区溢出的攻击方式
堆栈溢出(堆栈粉碎)不检查输入缓冲区的长度,导致数组越界,覆盖堆栈中局部变量空间上方的堆栈帧指针%ebp 和函数返回地址retaddr。当函数返回执行ret指令时,retaddr开始将其从堆栈中Pop并赋值给%eip寄存器作为下一条指令的地址,然后改变原来程序的执行流程,使其指向我们的shellcode。
堆溢出(malloc/free heapcorruption)与传统的堆栈溢出相同。当输入超过malloc()预先分配的空间大小时,该空间之后的存储区域将被覆盖。如果存储区域有euid这样的重要变量,那么我就可以利用它来攻击。另一种是典型的双自由堆损坏。在内存回收操作过程中,当相邻的空闲块被合并并重新插入双向链表时,就会有写入4字节内存的操作。如果弱程序由于编程错误而没有free(),则块存在,我们可以小心地伪造这个块来覆盖我们想要的任何值:函数的返回地址、库函数的.plt地址等。
格式字符串漏洞(format stringvulnerability) 如果格式字符串漏洞是用户自定义的,则攻击者可以随意伪造格式字符串。利用*printf()系列函数的特点,可以窥探堆栈空间的内容。异常输入会触发传统缓冲区。溢出,或者使用“%n”覆盖指针、返回地址等。
整数变量溢出(integervariableoverflow)利用整数的范围和符号等问题来触发安全漏洞。大多数整数溢出无法直接利用,但如果整数变量决定内存分配等操作,我们就可以间接利用该漏洞。
其他攻击技术(others)只能算是技术,而不是一个单独的类别。利用ELF文件格式的特性,如:覆盖.plt(进程连接表)、dtor(析构函数指针)、got(全局偏移表)、return-to-libc(返回库函数)等. 进行攻击。
缓冲区溢出攻击防御
强制编写正确代码的方法编写正确代码是一项非常有意义但又耗时的任务,尤其是在编写像C语言这样容易出错的程序(例如零终端字符串)时。这种风格是由于追求表现而忽视正确性的传统造成的。尽管人们花了很长时间才知道如何编写安全的程序,但存在安全漏洞的程序仍然出现。因此,开发了工具和技术来帮助经验不足的程序员编写安全且正确的程序。虽然这些工具可以帮助程序员开发出更安全的程序,但是由于C语言的特性,这些工具并不能发现所有的缓冲区溢出漏洞。因此,调试技术只能用来减少缓冲区溢出的可能性,而不能完全消除它的存在。除非程序员能够确保他的程序万无一失,否则仍然必须使用以下部分来确保程序的可靠性能。
使缓冲区不可通过操作系统执行可以防止攻击者注入攻击代码。这种方法有效地防止了很多缓冲区溢出攻击,但攻击者不一定要注入攻击代码才能实现缓冲区溢出攻击。所以这个方法还是有很多弱点的。
利用编译器的边界检查来保护缓冲区,使缓冲区不可能溢出,从而彻底消除缓冲区溢出的威胁,但成本比较高。
在程序指针无效之前执行完整性检查。虽然这种方法不能使所有的缓冲区溢出失效,但是它确实阻止了绝大多数的缓冲区溢出攻击,而且能够逃脱这种方法保护的缓冲区溢出也是很难实现的。
缓冲区溢出最常见的形式是记录活动然后用代码填充堆栈的攻击。 1996年就有很多此类攻击的记录。非执行堆栈和堆栈保护方法都可以有效防御这种攻击。非执行堆栈可以防御所有将代码放入堆栈的攻击方法,堆栈保护可以防御所有更改活动记录的方法。这两种方法相互兼容,可以同时防范多种可能的攻击。
剩下的攻击基本上都可以通过指针保护来防御,但在一些特殊场合,需要手动实现指针保护。全自动指针保护需要向每个变量添加额外的字节,这使得指针边界检查在某些情况下具有优势。
上一篇:《网络安全》常见攻击(九)——钓鱼攻击
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/166540.html
用户评论
哭花了素颜
我一开始以为只有在写代码的时候才会听说过“缓冲区溢出”,没想到这种攻击手法会被用作黑客攻击啊!这个文章解释得很清楚,让我对这种攻击方式有了更深入的了解。 现在更要提高自己的网络安全意识了!
有14位网友表示赞同!
残留の笑颜
我记得以前在大学的时候学习C语言的时候,讲过缓冲区溢出这种漏洞,当时觉得这个概念很抽象,没想到它真的会被用来造危害了!这篇文章确实把这种攻击方式解释得很清楚,真希望大家都能提高网络安全意识。
有17位网友表示赞同!
信仰
看完文章感觉自身电脑的安全性岌岌可危啊… 那些黑客简直太吓人了!
有17位网友表示赞同!
烬陌袅
这个文章好实用啊,我平常下载软件的时候都不太注重安全问题,现在知道了缓冲区溢出攻击这么可怕的形式,一定要更加小心谨慎。而且应该定期检查自己的计算机系统是否有漏洞!
有19位网友表示赞同!
孤单*无名指
讲道理,技术发展越来越快了,网络安全也越来越重要,就像文章里说的,我们需要时刻提高警惕,不要轻信陌生连接或者邮件附件,才能更好地保护自己!
有18位网友表示赞同!
她的风骚姿势我学不来
缓冲区溢出攻击确实很可怕,而且很多人都不知道这种问题的存在,真的很希望开发人员能尽快找到漏洞修复方案,让我们安全地使用网络。
有18位网友表示赞同!
陌潇潇
我公司之前也遭遇过这类攻击,损失惨重!还好最后及时找到了解决办法。现在我们加强了安全措施,定期更新系统和软件,更严格的审查用户权限,这篇文章确实给了我很大的启发!
有18位网友表示赞同!
男神大妈
说真的,网络安全这个事情可真是越来越让人担忧了!
有11位网友表示赞同!
请在乎我1秒
文章写得很好,通俗易懂,很适合像我这样对技术不太了解的人阅读。 我觉得每个电脑用户都应该了解这种攻击方式,提升自己的安全意识!
有17位网友表示赞同!
致命伤
我觉得网络安全不仅仅是开发人员的问题,每个用户都要承担责任,提高自身的安全意识才能避免风险。
有17位网友表示赞同!
花开丶若相惜
希望以后能看到更多关于网络安全的科普文章,让我对这个领域有个更全面地了解!
有19位网友表示赞同!
我就是这样一个人
缓冲区溢出攻击这种漏洞太可怕了,黑客利用这些漏洞可以获得大量的敏感信息,后果不堪设想啊… 真的希望能有更加有效的防范措施出来!
有9位网友表示赞同!
■□丶一切都无所谓
虽然文章写的比较简单易懂,但我觉得针对缓冲区溢出攻击的解决方案也应该详细介绍一下啊! 比如使用哪些安全机制可以有效防御这种攻击?
有8位网友表示赞同!
嗯咯
缓冲区溢出攻击虽然是古老的技术了,但是依然被黑客频繁利用。 这篇科普文章提醒我们,网络安全永远是一项重要任务,不应掉以轻心!
有7位网友表示赞同!
珠穆郎马疯@
这篇文章很有启发性! 我们应该更加重视网络安全的学习和研究,才能更好地应对各种网络威胁!
有11位网友表示赞同!
回到你身边
我的电脑上安装了很多软件,会不会也存在这个漏洞呢?
有14位网友表示赞同!