内存泄露是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
本文作者:天齐软件测评中心
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/161825.html