官术网_书友最值得收藏!

2.3.3 緩沖區溢出

當向為某特定數據結構分配的內存空間的邊界之外寫入數據時,即會發生緩沖區溢出。C和C++都容易發生緩沖區溢出問題,因為這兩種語言具有以下共同之處。

·將字符串定義為以空字符結尾的字符數組

·未進行隱式的邊界檢查

·提供了未強制性邊界檢查的標準字符串函數調用

取決于內存的位置以及溢出的規模,緩沖區溢出可能不會被偵測到,但它可能會破壞數據,導致程序出現奇怪的行為甚至非正常中止。

緩沖區溢出是一個令人頭痛的問題,因為在軟件的開發和測試階段并非總能發現該問題。并非所有C和C++實現在編譯過程中總能識別可能引發緩沖區溢出的安全缺陷,在運行時也不會報告越界寫問題。靜態分析工具可以幫助我們發現在早期開發過程中的緩沖區溢出問題,不過一旦測試數據可以引發一個可偵測的溢出,我們就可以使用動態分析工具來發現緩沖區溢出問題。

并非所有的緩沖區溢出都會造成軟件漏洞。然而,如果攻擊者能夠操縱用戶控制的輸入來利用安全缺陷,那么緩沖區溢出就會導致漏洞了。例如,有一些廣為人知的技術可以用于覆寫棧幀以執行任意的代碼。緩沖區溢出也可以在堆或靜態內存區域被利用,它的做法是通過覆寫鄰接內存的數據結構。

在我們深入了解這些利用行為之前,理解進程內存是如何組織和管理的是非常必要的。如果你對進程內存組織、執行棧以及堆管理等主題已經非常熟悉,可以直接跳到2.5節。

主站蜘蛛池模板: 溧阳市| 九江市| 铜鼓县| 青田县| 定兴县| 珠海市| 子洲县| 永嘉县| 崇左市| 佳木斯市| 福泉市| 富源县| 永年县| 延庆县| 都昌县| 五华县| 馆陶县| 龙川县| 长乐市| 郴州市| 岳池县| 阿图什市| 顺昌县| 丰城市| 张北县| 深水埗区| 犍为县| 梓潼县| 胶南市| 海安县| 元朗区| 焦作市| 浦江县| 中卫市| 湖北省| 玉田县| 桐梓县| 巴东县| 和林格尔县| 扶余县| 榆林市|