程式碼安全測試第十一期:記憶體洩漏漏洞
一、什麼是記憶體洩漏漏洞?
記憶體洩露是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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 記憶體洩漏測試小工具 - LeakDiag記憶體
- iOS檢測記憶體洩漏iOS記憶體
- 如何檢測記憶體洩漏記憶體
- C++ 程式記憶體洩漏檢測方法C++記憶體
- 記憶體洩漏記憶體
- .Net程式記憶體洩漏解析記憶體
- JavaScript記憶體洩漏檢測工具JavaScript記憶體
- 分析記憶體洩漏和goroutine洩漏記憶體Go
- 波音洩漏程式碼暴露 787 安全漏洞
- js記憶體洩漏JS記憶體
- Java記憶體洩漏Java記憶體
- webView 記憶體洩漏WebView記憶體
- Javascript記憶體洩漏JavaScript記憶體
- 使用 Instruments 檢測記憶體洩漏記憶體
- MFC 檢測記憶體洩漏的方法記憶體
- vs中檢測記憶體洩漏的方法記憶體
- 檢測並排除記憶體洩漏 (轉)記憶體
- 程式碼安全測試第十二期:LDAP注入漏洞LDA
- 糾結的IE瀏覽器記憶體洩漏的測試瀏覽器記憶體
- 記憶體分析與記憶體洩漏定位記憶體
- 記憶體洩漏和記憶體溢位記憶體溢位
- 效能優化——記憶體洩漏(3)程式碼分析篇優化記憶體
- valgrind 記憶體洩漏分析記憶體
- Android 記憶體洩漏Android記憶體
- Android記憶體洩漏Android記憶體
- 淺談記憶體洩漏記憶體
- 記憶體洩漏的原因記憶體
- JavaScript 記憶體洩漏教程JavaScript記憶體
- 說說 記憶體洩漏記憶體
- linux程式之記憶體洩漏分析Linux記憶體
- C/C++記憶體洩漏及檢測C++記憶體
- VC++6.0中記憶體洩漏檢測C++記憶體
- Android檢測記憶體洩漏之leakcanaryAndroid記憶體
- 程式碼安全測試第十五期:跨站指令碼漏洞指令碼
- 【記憶體洩漏和記憶體溢位】JavaScript之深入淺出理解記憶體洩漏和記憶體溢位記憶體溢位JavaScript
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- Java應用程式中的記憶體洩漏及記憶體管理Java記憶體
- JavaScript 程式中記憶體洩漏深入理解JavaScript記憶體