程式碼安全測試第十一期:記憶體洩漏漏洞

zktq2021發表於2021-06-01

一、什麼是記憶體洩漏漏洞?

記憶體洩露是C/C++程式中的常見 漏洞型別。它是指由於疏忽或錯誤,造成程式無法充分跟蹤和釋放已經不再使用的記憶體空間,導致系統可用記憶體減少,從而造成記憶體的浪費,導致效能下降,執行較長時間後,導致系統記憶體枯竭,導致系統響應慢或不再響應,從而造成系統癱瘓。記憶體洩露通常是由格式不正確的資料處理不當或意外中斷的會話觸發的。在某些程式設計語言中,開發人員負責跟蹤記憶體分配和記憶體釋放。一旦由於疏忽或錯誤,導致在釋放該段記憶體前就失去對該段記憶體的控制,就會形成記憶體洩漏。

二、記憶體洩漏漏洞構成條件有哪些?

滿足以下條件,就構成了一個記憶體洩露的 安全漏洞

1、 已分配的儲存空間未釋放且不存在其它指向該儲存空間的引用。

三、記憶體洩漏漏洞會造成哪些後果?

關鍵詞

DoS攻擊:崩潰,退出或重啟;DoS攻擊:不穩定;DoS攻擊:資源消耗。

一般情況下,大多數記憶體洩漏都會導致軟體可靠性問題,但如果攻擊者可以故意觸發記憶體洩漏,則攻擊者可能會發起拒絕服務攻擊(透過崩潰或掛起程式)或利用記憶體不足導致的其他意外程式行為。

在2018年1月到9月期間,CVE中,共有63條漏洞資訊與其相關。其中很多都可以被攻擊者用來發起DoS攻擊,可能造成巨大的潛在經濟損失。

四、記憶體洩漏漏洞的防範和修補方法有哪些?

1、在設計實現階段,選擇提供自動記憶體管理的語言或工具,例如Linux中的glibc就提供了對釋放無效指標的防護;

2、在使用C++程式設計時,考慮使用諸如std::auto_ptr,std::shared_ptr,std::unique_ptr等智慧指標,或是諸如Boost或其它等效的解決方案來促進正確且一致的儲存管理;

3、使用原始碼靜態檢測工具,對原始碼進行檢測,可以有效發現記憶體使用問題。

五、記憶體洩漏導致的漏洞樣例:

用悟空 靜態程式碼檢測分析上述程式程式碼,則可以發現程式碼中存在著記憶體洩漏導致的 程式碼缺陷,flag=1情況下,無法釋放已分配記憶體,如下圖:

記憶體洩漏在CWE中被編號為CWE-401:Missing Release of Memory after Effective Lifetime


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2774812/,如需轉載,請註明出處,否則將追究法律責任。

相關文章