CWE

普遍的弱点

社区开发的软件和硬件弱点类型清单

2021 CWE最重要的硬件弱点
CWE前25个最危险的弱点
>CWE列表> cwe-单个字典定义(4.10)
ID

CWE-806:使用源缓冲区大小的缓冲区访问

弱点ID:806
抽象:变体
结构:简单的
查看自定义信息:
+描述
从阅读或写入到目标缓冲区时,该产品使用源缓冲区的大小,这可能会导致其访问位于缓冲区边界之外的内存。
+扩展描述
当目的地的大小小于源的大小时,可能会发生缓冲区溢出。
+关系
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与观点“研究概念”相关(CWE-1000)
自然 类型 ID 姓名
Childof 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 805 长度值不正确的缓冲区访问
+介绍模式
部分帮助引言的不同模式提供了有关如何以及何时引入这种弱点的信息。该阶段识别可能发生介绍的生命周期中的一个点,而音符提供了与给定阶段中引言有关的典型情况。
阶段 笔记
执行
+适用的平台
部分帮助该清单显示了可能出现的弱点的可能区域。这些可能适用于特定的命名语言,操作系统,体系结构,范式,技术或一类此类平台。该平台与给定弱点出现在该实例的频率一起列出。

语言

C(有时普遍)

C ++(有时普遍)

+常见后果
部分帮助该表指定与弱点相关的不同个人后果。该范围确定了违反的应用程序安全区域,而影响描述了如果对手成功利用这一弱点,就会产生负面的技术影响。其可能性提供了有关预期相对于列表中其他后果的特定后果的可能性的信息。例如,可能会利用弱点来实现一定的影响,但很可能会利用它来实现不同的影响。
范围 影响 可能性
可用性

技术影响:修改内存;DOS:撞车,退出或重新启动;DOS:资源消耗(CPU)

缓冲区溢出通常会导致崩溃。可能导致缺乏可用性的其他攻击,包括将程序置于无限的循环中。
正直
保密
可用性

技术影响:阅读记忆;修改内存;执行未经授权的代码或命令

缓冲区溢出通常可用于执行任意代码,这通常不在程序的隐式安全策略范围之内。
访问控制

技术影响:旁路保护机制

当结果是任意代码执行时,通常可以用来颠覆任何其他安全服务。
+示例的例子

示例1

在下面的示例中,使用方法strncpy将源字符串复制到dest字符串。

(不良代码)
示例语言:C
...
char Source [21] =“字符串”;
char dest [12];
strncpy(dest,source,sizeof(source)-1);
...

但是,在呼叫中,在sizeof调用中使用源字符串来确定要复制的字符数。这将创建一个缓冲区溢出,因为源字符串的大小大于dest字符串。NEDS字符串应在sizeof调用中使用,以确保复制正确的字符数,如下所示。

(好代码)
示例语言:C
...
char Source [21] =“字符串”;
char dest [12];
strncpy(dest,source,sizeof(dest)-1);
...

示例2

在此示例中,方法输出Filenametolog将文件名输出到日志文件。方法参数包括一个指向字符串的指针,该字符串包含文件名和字符串中字符数的整数。将文件名复制到缓冲区,其中缓冲区大小设置为最大大小,以便对日志文件的输入。然后,该方法调用另一种方法将缓冲区的内容保存到日志文件中。

(不良代码)
示例语言:C
#define log_input_size 40

//将文件名保存到日志文件
int outputfileNametolog(char *filename,int length){
int成功;

//尺寸设置为最大尺寸的缓冲区,以便输入到日志文件
char buf [log_input_size];

//将文件名复制到缓冲区
strncpy(buf,fileName,长度);

//保存到日志文件
成功= savetologfile(buf);

返回成功;
}

但是,在这种情况下,字符串复制方法strncpy错误地使用长度方法参数来确定要复制的字符数,而不是使用本地字符串字符串BUF的大小。如果FileName指向的字符字符串中包含的字符字符串中包含的字符数较大,那么这可能会导致缓冲区溢出。字符串复制方法应在sizeof调用中使用BUF字符串,以确保仅复制BUF数组大小的字符以避免缓冲区溢出,如下所示。

(好代码)
示例语言:C
...
//将文件名复制到缓冲区
strncpy(buf,filename,sizeof(buf)-1);
...
+潜在的缓解

阶段:建筑和设计

使用抽象库来抽象冒险的API。示例包括Viega的安全C字符串库(SafEstr)和Microsoft的STRSAFE.H库。这不是一个完整的解决方案,因为许多缓冲区溢出与字符串无关。

阶段:构建和编译

使用某些编译器或编译器扩展程序提供的自动缓冲区溢出检测机制。示例包括StackGuard,Promolice和Microsoft Visual Studio /GS标志。这不一定是一个完整的解决方案,因为这些基于金丝雀的机制仅检测某些类型的溢出。此外,结果仍然是对服务的拒绝,因为典型的响应是退出应用程序。

阶段:实施

分配和管理其应用程序内存时,程序员应遵守以下规则:仔细检查您的缓冲区是否与您指定的一样大。当使用接受许多要复制的字节的函数(例如strncpy(),请注意,如果目标缓冲区大小等于源缓冲区大小,则可能不会终止字符串。检查缓冲区边界是否在循环中调用此功能,并确保没有编写分配空间的危险。将所有输入字符串截断为合理的长度,然后将它们传递到副本和串联功能

阶段:操作

策略:环境硬化

使用功能或扩展程序运行或编译软件,这些功能或扩展名随机排列程序可执行文件和库中的位置。因为这使地址无法预测,因此它可以防止攻击者可靠地跳至可利用的代码。

示例包括地址空间布局随机化(ASLR)[Ref-58] [Ref-60]和独立于位置的可执行文件(PIE)[Ref-64]。

有效性:深入防御

笔记:这不是一个完整的解决方案。但是,它迫使攻击者猜测一个未知值,以改变每个程序的执行。此外,攻击仍然可能导致拒绝服务,因为典型的响应是退出应用程序。

阶段:操作

策略:环境硬化

使用提供数据执行保护(NX)或其等效的CPU和操作系统[Ref-60] [Ref-61]。

有效性:深入防御

笔记:这不是一个完整的解决方案,因为缓冲区溢出可用于覆盖附近的变量,以危险地修改软件状态。此外,在需要自修改代码的情况下不能使用它。最后,攻击仍然可能导致拒绝服务,因为典型的响应是退出应用程序。

阶段:构建和汇编;手术

到目前为止,大多数在编译器或OS级别的缓解技术仅处理缓冲区溢出问题的子集,并且很少提供针对该子集的完全保护。实施策略以增加攻击者的工作量是一个好实践,例如让攻击者猜测一个不明的值,以改变每个程序的执行。
+弱点
条件 描述
结果
(弱点通常与其他一些弱点有关)
基本的
(弱点独立于其他弱点的地方)
+影响资源
  • 记忆
+参考
[Ref-56] Microsoft。“使用strsafe.h函数”。<http://msdn.microsoft.com/en-us/library/ms647466.aspx>。
[Ref-57] Matt Messier和John Viega。“安全C字符串库V1.0.3”。<http://www.zork.org/safester/>。
[Ref-58]迈克尔·霍华德。“ Windows Vista中的地址空间布局随机化”。<http://blogs.msdn.com/michael_howard/archive/2006/05/05/26/address-space-layout-randomization-in-windows-vista.aspx>。
[Ref-59] Arjan van de Ven。“限制缓冲区使用Execshield溢出”。<http://www.redhat.com/magazine/009jul05/features/execshield/>。
[Ref-60]“ PAX”。<http://en.wikipedia.org/wiki/pax>。
[Ref-64] Grant Murphy。“位置独立可执行文件(PIE)”。红帽。2012-11-28。<https://securityblog.redhat.com/2012/11/11/28/position-intependent-executables-pie/>。
+内容历史记录
+提交
提交日期 提交者 组织
2010-01-15 CWE内容团队 MITER
+修改
修改日期 修饰符 组织
2011-03-29 CWE内容团队 MITER
更新了示范_examples
2011-06-01 CWE内容团队 MITER
更新的common_cconsquences
2012-05-11 CWE内容团队 MITER
更新势_的限制,参考
2014-02-18 CWE内容团队 MITER
更新势_的限制,参考
2017-11-08 CWE内容团队 MITER
更新的causal_nature,explyative_examples,likelihood_of_exploit,参考
2020-02-24 CWE内容团队 MITER
更新的关系
2020-06-25 CWE内容团队 MITER
更新的common_cconsquences
2021-07-20 CWE内容团队 MITER
更新的势_MINEIGATIONS
2023-01-31 CWE内容团队 MITER
更新的描述
提供更多信息 - 请选择其他过滤器。
页面最后更新:2023年1月31日