跳到主要内容

缓冲区溢出漏洞

概述

包括网络应用程序在内的所有程序,为执行指定处理而在内存中分配自身使用的区域。如果程序不能正确处理输入数据,则可能会覆盖程序分配的内存区域,超出内存范围,从而导致执行意外代码的风险。这种问题称为"缓冲区溢出漏洞",而利用此问题的攻击称为"缓冲区溢出攻击"。

可能出现的威胁

由于缓冲区溢出,可能出现的威胁如下:

  • 程序异常终止
    • 服务意外停止等
  • 任意代码执行
    • 感染病毒、蠕虫、恶意软件、设置后门、攻击其他系统、泄露重要信息等

需要注意的网站特征

缓冲区溢出通常在使用C、C++、汇编语言等可以直接操作内存的语言编写的程序中发生。因此,需要注意使用使用这些语言开发的Web应用程序的网站。目前,大多数Web应用程序使用不能直接操作内存的语言,如PHP、Perl、Java等,因此受缓冲区溢出漏洞影响的可能性较低。但是要注意,PHP、Perl、Java 等语言的运行时(处理系统)和库本身是用 C/C++ 等语言实现的,它们自身曾多次被发现存在缓冲区溢出漏洞。

根本解决方案

  • 使用不能直接访问内存的语言编写。

通过使用不能直接操作内存的语言(如PHP、Perl、Java等)编写Web应用程序,可以避免应用代码自身引入缓冲区溢出漏洞。不过如前所述,这些语言的运行时和库仍可能存在此类漏洞,因此并不等于完全免疫。

  • 最小化使用能直接访问内存的语言编写。

如果在程序内部调用使用C、C++、汇编语言等可以直接操作内存的语言编写的自己的程序,则被调用程序可能存在缓冲区溢出漏洞。因此,需要将使用可以直接访问内存的语言编写的部分最小化,并集中检查该部分是否存在缓冲区溢出漏洞。

  • 使用已修复漏洞的库版本。

通常情况下,如果使用通常流通的库,则旧版本可能存在缓冲区溢出漏洞,因此,请使用已修复漏洞的版本。