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

2.3.3 緩沖區溢出

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

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

·未進行隱式的邊界檢查

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

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

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

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

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

主站蜘蛛池模板: 建阳市| 贵溪市| 商洛市| 独山县| 民勤县| 德昌县| 上杭县| 临潭县| 仙桃市| 阿拉善右旗| 左云县| 新泰市| 化州市| 航空| 广汉市| 泰来县| 阿合奇县| 寿宁县| 大英县| 乌拉特中旗| 佛坪县| 芜湖县| 威远县| 射洪县| 马关县| 文水县| 盐亭县| 乌兰察布市| 阿克| 石林| 兴隆县| 凤城市| 大港区| 澜沧| 商南县| 司法| 肇东市| 饶阳县| 定襄县| 洞头县| 射阳县|