基本介紹
- 中文名:緩衝區過讀
- 性質:一類程式錯誤
簡介,相關語言,緩衝區溢出,
簡介
通過構造惡意輸入,使得缺乏邊界檢查的程式讀取不該訪問到的記憶體,可以觸發緩衝區過讀,如在心臟出血漏洞里的那樣。引發的原因也可能僅僅是編程中的錯誤。這可能會導致異常的程式行為,包括記憶體訪問錯誤、不正確的結果、崩潰或系統安全性損害。因而,有許多漏洞都因其而生,還可能被惡意利用以訪問特權信息。
相關語言
通常與緩衝區過讀相聯繫的程式語言語言包括C和C++,這些語言都沒有提供內置的保護機制,以防止使用指針訪問虛擬記憶體任意位置的數據,並且不會自動檢查讀取該記憶體塊的數據是否安全;對應的例子如試圖讀取比數組更多的元素,以及沒有向空終止字元串末尾追加終止符。邊界檢查可以防止緩衝區過讀,而模糊測試有助於檢測出這些錯誤。
緩衝區溢出
緩衝區溢出(buffer overflow),是針對程式設計缺陷,向程式輸入緩衝區寫入使之溢出的內容(通常是超過緩衝區能保存的最大數據量的數據),從而破壞程式運行、趁著中斷之際並獲取程式乃至系統的控制權。
緩衝區溢出原指當某個數據超過了處理程式限制的範圍時,程式出現的異常操作。造成此現象的原因有:
- 存在缺陷的程式設計。
- C語言中的C標準庫還具有一些非常危險的操作函式,使用不當也為溢出創造條件。
因黑客在Unix的核心發現通過緩衝區溢出可以獲得系統的最高等級許可權,而成為攻擊手段之一。也有人發現相同的問題也會出現在Windows作業系統上,以致其成為黑客最為常用的攻擊手段,蠕蟲病毒利用作業系統高危漏洞進行的破壞與大規模傳播均是利用此技術。比較知名的蠕蟲病毒衝擊波蠕蟲,就基於Windows作業系統的緩衝區溢出漏洞。
例如一個用途是對SONY的掌上遊戲機PSP-3000的破解,通過特殊的溢出圖片,PSP可以運行非官方的程式與遊戲。同樣在諾基亞智慧型手機作業系統Symbian OS中發現漏洞用戶可以突破限制運行需要DRM許可權或檔案系統許可權等系統許可權的應用程式。
在部分情況下,當一般程式(除了驅動和作業系統核心)發生此類問題時,C++運行時庫通常會終止程式的執行。