版权归原作者所有,如有侵权,请联系我们

[科普中国]-缓冲区过读

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

缓冲区过读是一类程序错误,即程序从缓冲器读出数据时超出了边界,而读取了(或试图读取)相邻的内存。这是有违内存安全的一个例子。

简介在计算机安全和程序设计中,缓冲区过读是一类程序错误,即程序从缓冲器读出数据时超出了边界,而读取了(或试图读取)相邻的内存。这是有违内存安全的一个例子。

通过构造恶意输入,使得缺乏边界检查的程序读取不该访问到的内存,可以触发缓冲区过读,如在心脏出血漏洞里的那样。引发的原因也可能仅仅是编程中的错误。这可能会导致异常的程序行为,包括内存访问错误、不正确的结果、崩溃或系统安全性损害。因而,有许多漏洞都因其而生,还可能被恶意利用以访问特权信息。1

相关语言通常与缓冲区过读相联系的编程语言语言包括C和C++,这些语言都没有提供内置的保护机制,以防止使用指针访问虚拟内存任意位置的数据,并且不会自动检查读取该内存块的数据是否安全;对应的例子如试图读取比数组更多的元素,以及没有向空终止字符串末尾追加终止符。边界检查可以防止缓冲区过读,而模糊测试有助于检测出这些错误。2

缓冲区溢出缓冲区溢出(buffer overflow),是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、趁著中断之际并获取程序乃至系统的控制权。

缓冲区溢出原指当某个数据超过了处理程序限制的范围时,程序出现的异常操作。造成此现象的原因有:

存在缺陷的程序设计。

尤其是C语言,不像其他一些高级语言会自动进行数组或者指针的边界检查,增加溢出风险。

C语言中的C标准库还具有一些非常危险的操作函数,使用不当也为溢出创造条件。

因黑客在Unix的内核发现通过缓冲区溢出可以获得系统的最高等级权限,而成为攻击手段之一。也有人发现相同的问题也会出现在Windows操作系统上,以致其成为黑客最为常用的攻击手段,蠕虫病毒利用操作系统高危漏洞进行的破坏与大规模传播均是利用此技术。比较知名的蠕虫病毒冲击波蠕虫,就基于Windows操作系统的缓冲区溢出漏洞。

例如一个用途是对SONY的掌上游戏机PSP-3000的破解,通过特殊的溢出图片,PSP可以运行非官方的程序与游戏。同样在诺基亚智能手机操作系统Symbian OS中发现漏洞用户可以突破限制运行需要DRM权限或文件系统权限等系统权限的应用程序。

缓冲区溢出攻击从理论上来讲可以用于攻击任何有相关缺陷的程序,包括对杀毒软件、防火墙等安全产品的攻击以及对银行程序的攻击。在嵌入式设备系统上也可能被利用,例如PSP、智能手机等。

在部分情况下,当一般程序(除了驱动和操作系统内核)发生此类问题时,C++运行时库通常会终止程序的执行。1

本词条内容贡献者为:

李航 - 副教授 - 西南大学