内存泄漏漏洞

一、什么是内存泄漏漏洞?

内存泄露是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、使用源代码静态检测工具,对源代码进行检测,可以有效发现内存使用问题。

五、内存泄漏导致的漏洞样例:

1-1.jpg

悟空静态代码检测分析上述程序代码,则可以发现代码中存在着内存泄漏导致的 代码缺陷,flag=1情况下,无法释放已分配内存,如下图:

2-1.jpg

内存泄漏在CWE中被编号为CWE-401:Missing Release of Memory after Effective Lifetime


本文作者:中科天齐软件安全

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/168702.html

Tags:
评论  (0)
快来写下你的想法吧!

中科天齐软件安全

文章数:95 积分: 45

WuKong软件源代码静态检测工具,为客户在软件开发过程中查找、识别、追踪绝大部分主流编码中的技术漏洞与逻辑漏洞,帮助用户提升抵御网络攻击。

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号