![960cf0454838611722bf3e582794616a.png](https://i-blog.csdnimg.cn/blog_migrate/929d24a22ed42a2bc940b364e068490c.jpeg)
该栏目为中科天齐软件安全中心全新规划的悟空云课堂,每周五准时上线,旨在科普软件安全相关知识,助力企业有效防范软件安全漏洞,提升网络安全防护能力。
本期主题为内存泄漏漏洞的相关介绍。
01 什么是内存泄漏漏洞?
内存泄露是C/C++程序中的常见漏洞类型。它是指由于疏忽或错误,造成程序无法充分跟踪和释放已经不再使用的内存空间,导致系统可用内存减少,从而造成内存的浪费,导致性能下降,运行较长时间后,导致系统内存枯竭,导致系统响应慢或不再响应,从而造成系统瘫痪。内存泄露通常是由格式不正确的数据处理不当或意外中断的会话触发的。在某些程序设计语言中,开发人员负责跟踪内存分配和内存释放。一旦由于疏忽或错误,导致在释放该段内存前就失去对该段内存的控制,就会形成内存泄漏。
02 内存泄漏漏洞构成条件有哪些?
满足以下条件,就构成了一个日志伪造的安全漏洞:
1、 已分配的存储空间未释放且不存在其它指向该存储空间的引用。
03 内存泄漏漏洞会造成哪些后果?
关键词:
DoS攻击:崩溃,退出或重启;DoS攻击:不稳定;DoS攻击:资源消耗。
一般情况下,大多数内存泄漏都会导致软件可靠性问题,但如果攻击者可以故意触发内存泄漏,则攻击者可能会发起拒绝服务攻击(通过崩溃或挂起程序)或利用内存不足导致的其他意外程序行为。
在2018年1月到9月期间,CVE中共有63条漏洞信息与其相关。其中很多都可以被攻击者用来发起DoS攻击,可能造成巨大的潜在经济损失。
04 内存泄漏漏洞的防范和修补方法有哪些?
1、在设计实现阶段,选择提供自动内存管理的语言或工具,例如Linux中的glibc就提供了对释放无效指针的防护;
2、在使用C++编程时,考虑使用诸如std::auto_ptr,std::shared_ptr,std::unique_ptr等智能指针,或是诸如Boost或其它等效的解决方案来促进正确且一致的存储管理;
3、使用源代码缺陷扫描工具,对源代码进行检测,可以有效发现内存使用问题。
05 内存泄漏导致的漏洞样例:
![39838246b01837ebb09d850c0260985e.png](https://i-blog.csdnimg.cn/blog_migrate/17380b10dd779ac1079884502beec075.jpeg)
用Wukong检测上述程序代码,则可以发现代码中存在着内存泄漏导致的代码缺陷,flag=1情况下,无法释放已分配内存,如下图:
![f331294c541339ba913912085d7623e5.png](https://i-blog.csdnimg.cn/blog_migrate/59e7c72d953ba6d7d885727d396bc1a6.jpeg)
内存泄漏在CWE中被编号为CWE-401:Missing Release of Memory after Effective Lifetime
更多的信息请参考CWE官网:
http://cwe.mitre.org/data/definitions/484.html