缓冲区溢出

发布:2016年6月9日

简短的个人介绍

缓冲区溢出是一种软件漏洞,当软件应用程序中的内存区域到达它的地址边界并写入相邻的内存区域时,就会出现这种漏洞。在软件利用代码中,两个常见的溢出目标区域是堆栈和堆。

历史

缓冲区溢出可以追溯到20世纪70年代。然而,直到20世纪80年代末,才出现了第一个有记录的利用缓冲区溢出的案例,其中UNIX“finger”服务利用堆栈溢出进一步传播Morris蠕虫。

今天,缓冲区溢出仍然发生在软件应用程序中,它们的可利用性取决于几个不同的因素,包括使用的编译器和/或编译器选项,以及操作系统的安全特性。

常见的感染方法

在使用堆栈的最简单的场景中,溢出会覆盖堆栈上的数据以包括返回指针,使其指向攻击者代码将执行的地址。

溢出是在针对web应用程序的exploit中看到的,并主要通过开发工具包在web上交付。

但是,溢出漏洞也可以通过其他方式进行,不需要任何用户交互,包括将畸形数据发送到企业服务器应用程序的侦听端口。

相关的家庭

常见的溢位类型有:

  • 堆栈溢出
  • 堆溢出
  • 整数溢出

修复

在其软件中存在潜在缓冲区溢出漏洞的应用程序供应商通常会发布补丁作为补救措施。

然而,在某些情况下,供应商并不知道溢出漏洞会影响他们的软件。不幸的是,很多时候当这种情况发生时,供应商只有在被恶意软件作者和网络罪犯滥用后才知道溢出。由于这个原因,使用来自可信供应商的软件和利用保护软件总是很重要的。

记录溢出漏洞但软件供应商没有修补程序时,最佳要做的事情是禁用或卸载软件,直到overflow漏洞已使用来自供应商的修补程序修复。

之后

大多数情况下,缓冲区溢出会引发内存访问冲突,导致发生溢出的应用程序崩溃。

攻击者成功利用溢出可以允许任意代码执行,从而导致安装恶意软件。如果安装了恶意软件,则需要使用杀毒软件或反恶意软件程序将其删除。

避免

具有应用程序开发人员使用安全的编程实践可以大大减少软件应用程序中可利用溢出的可能性。但是,这并不保证申请仍然可能不脆弱。

当试图保护未记录的(零日)漏洞时,使用漏洞保护软件是一个好主意。

例子

在源代码…

int main ()

双x [1048576];//堆栈变量太大了!
返回0;

在CVES ...

cve - 2015 - 5118
CVE-2014-0099

截图

选择你的语言