緩衝區溢出

緩衝區溢出 （ buffer overflow ） ， 在電腦學上是指針對程序設計缺陷 ， 向程序輸入緩衝區寫入使之溢出的內容 （ 通常是超過緩衝區能保存的最大數據量的數據 ） ， 從而破壞程序運行 、 趁著中斷之際並取得程序乃至系統的控制權 。 緩衝區溢出原指當某個數據超過了處理程序回傳堆疊位址限制的範圍時 ， 程序出現的異常操作 。 造成此現象的原因有 ： 存在缺陷的程序設計 尤其是C語言 ， 不像其他一些高級語言會自動進行數組或者指針的堆疊區塊邊界檢查 ， 增加溢出風險 。 C語言中的C標準庫還具有一些非常危險的操作函數 ， 使用不當也爲溢出創造條件 。 因黑客在Unix的內核發現通過緩衝區溢出可以控制內核空間劫持控制流程獲得系統的最高等級權限 ， 而成爲攻擊手段之一 。 也有人發現相同的問題也會出現在Windows操作系統上 ， 以致其成爲黑客最爲常用的攻擊手段 ， 蠕蟲病毒利用操作系統高危漏洞進行的破壞與大規模傳播均是利用此技術 。 比較知名的蠕蟲病毒衝擊波蠕蟲 ， 就基於Windows操作系統的緩衝區溢出漏洞 。 例如一個用途是對SONY的掌上游戲機PSP - 3000的破解 ， 通過特殊的溢出圖片 ， PSP可以運行非官方的程序與遊戲 。 同樣在諾基亞智能手機操作系統Symbian OS中發現漏洞用戶可以突破限制運行需要DRM權限或文件系統權限等系統權限的應用程序 。 緩衝區溢出攻擊從理論上來講可以用於攻擊任何有相關缺陷的程序 ， 包括對殺毒軟件 、 防火牆等安全產品的攻擊以及對銀行程序的攻擊 。 在嵌入式設備系統上也可能被利用 ， 例如PSP 、 智能手機等 。 在部分情況下 ， 當一般程序 （ 除了驅動和操作系統內核 ） 發生此類問題時 ， C++ 運行時庫通常會終止程序的執行 。