缓冲区溢出漏洞
概述
包括网络应用程序在内的所有程序,为执行指定处理而在内存中分配自身使用的区域。如果程序不能正确处理输入数据,则可能会覆盖程序分配的内存区域,超出内存范围,从而导致执行意外代码的风险。这种问题称为"缓冲区溢出漏洞",而利用此问题的攻击称为"缓冲区溢出攻击"。
可能出现的威胁
由于缓冲区溢出,可能出现的威胁如下:
- 程序异常终止
- 服务意外停止等
- 任意代码执行
- 感染病毒、蠕虫、恶意软件、设置后门、攻击其他系统、泄露重要信息等
需要注意的网站特征
缓冲区溢出通常在使用C、C++、汇编语言等可以直接操作内存的语言编写的程序中发生。因此,需要注意使用使用这些语言开发的Web应用程序的网站。目前,大多数Web应用程序使用不能直接操作内存的语言,如PHP、Perl、Java等,因此受缓冲区溢出漏洞影响的可能性较低。但是要注意,PHP、Perl、Java 等语言的运行时(处理系统)和库本身是用 C/C++ 等语言实现的,它们自身曾多次被发现存在缓冲区溢出漏洞。
根本解决方案
- 使用不能直接访问内存的语言编写。
通过使用不能直接操作内存的语言(如PHP、Perl、Java等)编写Web应用程序,可以避免应用代码自身引入缓冲区溢出漏洞。不过如前所述,这些语言的运行时和库仍可能存在此类漏洞,因此并不等于完全免疫。
- 最小化使用能直接访问内存的语言编写。
如果在程序内部调用使用C、C++、汇编语言等可以直接操作内存的语言编写的自己的程序,则被调用程序可能存在缓冲区溢出漏洞。因此,需要将使用可以直接访问内存的语言编写的部分最小化,并集中检查该部分是否存在缓冲区溢出漏洞。
- 使用已修复漏洞的库版本。
通常情况下,如果使用通常流通的库,则旧版本可能存在缓冲区溢出漏洞,因此,请使用已修复漏洞的版本。