缓冲区溢出 缓冲区溢出buffer overflow在電腦學上是指针对程序设计缺陷向程序输入缓冲区写入使之溢出的内容通常是超过缓冲区能保存的最大数据量的数据从而破坏程序运行趁著中斷之際并取得程序乃至系统的控制权 缓冲区溢出原指当某个数据超过了处理程序回傳堆疊位址限制的范围时程序出现的异常操作造成此现象的原因有 存在缺陷的程序设计 尤其是C语言不像其他一些高级语言会自动进行数组或者指针的堆疊區塊边界检查增加溢出风险 C语言中的C标准库还具有一些非常危险的操作函数使用不当也为溢出创造条件 不當的堆積操作可能造成迷途指针可以透過特殊的堆排佈heap feng shui取得緩衝區的堆區塊heap chunk改變緩衝區邊界並創造堆溢出的條件 因黑客在Unix的内核发现通过缓冲区溢出可以控制內核空間劫持控制流程获得系统的最高等级权限而成为攻击手段之一也有人发现相同的问题也会出现在Windows操作系统上以致其成为黑客最为常用的攻击手段蠕虫病毒利用操作系统高危漏洞进行的破坏与大规模传播均是利用此技术比较知名的蠕虫病毒冲击波蠕虫就基于Windows操作系统的缓冲区溢出漏洞 例如一个用途是对SONY的掌上游戏机PSP的破解通过特殊的溢出图片PSP可以运行非官方的程序与游戏同样在诺基亚智能手机操作系统Symbian OS中发现漏洞用户可以突破限制运行需要DRM权限或文件系统权限等系统权限的应用程序 缓冲区溢出攻击从理论上来讲可以用于攻击任何有相关缺陷的程序包括对杀毒软件防火墙等安全产品的攻击以及对银行程序的攻击在嵌入式设备系统上也可能被利用例如PSP智能手机等 在部分情况下当一般程序除了驱动和操作系统内核发生此类问题时C运行时库通常会终止程序的执行