| ID: 401 类型:变量 | 状态:草稿 |
描述
软件在使用后没有充分跟踪和释放分配的内存,这会慢慢消耗剩余的内存。
扩展描述
这通常是由错误的数据处理或意外中断的会话触发的。
相关视图
与“研究层面”视图(CWE-1000)相关
与“开发层面”视图(CWE-699)相关
引入模式
| 阶段 | 说明 |
| 架构与设计 | |
| 实现 | 内存泄漏有两个常见的,有时是重叠的原因: •错误情况和其他异常情况 •对程序的哪个部分负责释放内存感到困惑 |
应用平台
语言
C (出现的可能性不确定)
C++ (出现的可能性不确定)
后果
| 范围 | 冲击 | 可能性 |
| 可利用性 | 技术冲击: DoS: 崩溃、推出或者重启: DoS: 不稳定; DoS: 资源消耗(CPU): DoS: 资源消耗 (内存): 一般情况下,大多数内存泄漏都会导致的软件可靠性问题,但如果攻击者可以故意触发内存泄漏,则攻击者可能会发起拒绝服务攻击(通过崩溃或挂起程序)或利用内存不足导致的其他意外程序行为。 | |
| 其它 | 技术冲击: 降低性能 |
被利用的可能性:
一般
示例
例1
如果对read()的调用未返回预期的字节数,则以下c函数将泄漏一块已分配的内存:
(问题代码)
Example Language: C
char* getBlock(int fd) {
char* buf = (char*) malloc(BLOCK_SIZE);
if (!buf) {
return NULL;
}
if (read(fd, buf, BLOCK_SIZE) != BLOCK_SIZE) {
return NULL;
}
return buf;
}
应对措施
| 阶段: 实现 策略: 库或者框架 选择一种提供自动内存管理的语言或工具,或使手动内存管理不易出错。
例如,Linux中的glibc提供了对无效指针的保护。
当使用xcode以OS X或IOS为目标时,启用自动参考计数(ARC)[Ref-391]。 为了帮助在C++编程时正确和一致地管理内存,请考虑使用智能指针类,如STD::AutoMyPTR(由ISO/IEC ISO/IEC 1488∶2003定义)、STD::SyrdyPtR和STD::UnQuyQPTR(由C++标准即将修订的内容,非正式地称为C++1X),或等效的解决方案,如Boost。 |
| 阶段: 架构与设计 使用精简库以便舍弃有风险的API。不是一个完整的解决方案。 |
| Phases: 架构与设计; 编译及链接 可以使用Boehm-Demers-Weiser垃圾收集器或者valgrind探测代码中的漏洞 说明: 不一定有效. |
种属
说明
关联
这通常是由于对格式错误的数据处理不当或会话提前终止而导致的弱点。
术语
“内存泄漏”有时用于描述其他类型的问题,例如,对于不经意泄漏内存内容的信息泄漏(CVE-2003-0400就是这种术语冲突的一个例子)。
本文深入探讨了软件中常见的内存泄漏问题,分析了其产生的原因,包括错误的数据处理和内存管理混乱。文章提供了实例代码展示内存泄漏,并提出了使用自动内存管理语言、智能指针和垃圾收集器等策略来避免内存泄漏的方法。
1215

被折叠的 条评论
为什么被折叠?



