當動態分配的記憶體釋放時,該記憶體的內容是不確定的,有可能保持完整併可以被訪問,因為何時重新分配或回收釋放的記憶體區塊是記憶體管理程式決定的,但是,也可能該記憶體的內容已經被改變,導致意外的程式行為。因此,當記憶體釋放之後,保證不再對它進行寫入或讀取。
由記憶體管理不當導致的問題是 C/C 程式中常見的漏洞。釋放後使用會導致可被利用的潛在風險,包括程式異常終止、任意程式碼執行和拒絕服務攻擊等。 2018年1月至11月,CVE 中共有134個漏洞資訊與其相關。部分漏洞如下:
#CVE | 漏洞概述 |
---|---|
#CVE-2018-1000051 | Artifex Mupdf 版本的fz_keep_key_storable 中存在一個釋放後使用漏洞,可導致拒絕服務或程式碼執行問題。透過誘騙受害者開啟一個特殊構造的 PDF 文件,該漏洞即可遭利用。 |
CVE-2018-17474 | GoogleChrome 瀏覽器70.0.3538.67 先前版本Blink 引擎的HTMLImportsController 中存在一個釋放後使用漏洞,很有可能導致遠端攻擊者透過一個特殊構造的HTML 頁面利用堆疊損壞問題。 |
CVE-2018-15924 | Adobe Acrobat 及Reader 2018.011.20063及先前版本、2017.011.30102 及先前版本、2015.006.30452後使用漏洞。遠端攻擊者可利用該漏洞執行任意程式碼。 |
(1) 釋放記憶體時請務必置空指針,雖然這種方法針對多重或複雜資料結構利用的有效性有限,但可以從一定程度上規避一部分問題。 (2) 在迴圈語句中進行記憶體分配或釋放時,需謹慎確認是否有問題。 (3) 使用原始碼靜態分析工具進行自動化的偵測,可以有效的發現原始碼中的釋放後使用問題。
以上是如何實作C++程式釋放後使用所導致的漏洞分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!