CWE

常见的弱点枚举

一个由社区开发的软件&硬件缺陷类型的列表

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

cwe - 121:基于堆栈缓冲区溢出

弱点ID: 121
抽象:变体
结构:简单的
视图定制的信息:
+描述
基于堆栈的缓冲区溢出的条件是一个缓冲的条件在堆栈上分配(即覆盖。,很少是一个局部变量或参数的函数)。
+替代条款
堆栈溢出:
“Stack Overflow”常被用来指的是基于堆栈的缓冲区溢出,但是有时它也指堆栈疲惫,通常是由于过分递归函数调用。由于这个词的歧义,使用堆栈溢出来描述情况气馁。
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 787年 禁止入内的写
ChildOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 788年 访问结束后的内存位置缓冲区
+背景细节
通常有几个强调安全的执行堆栈的数据会导致执行任意代码。最突出的是存储返回地址,应继续执行的内存地址一旦当前函数执行完成。攻击者可以覆盖这个值与一些内存地址的攻击者也有写访问,为它们的地方运行任意代码的全部特权脆弱的项目。交替,攻击者可以提供一个重要电话的地址,例如POSIX系统()调用,参数调用堆栈。这通常被称为一个返回到libc利用,因为攻击者通常迫使计划返回时间跳到一个有趣的程序C标准库(libc)。其他重要的数据通常在堆栈上包括堆栈指针和帧指针,两个值表明计算内存地址的偏移量。修改这些值通常可以利用“write-what-where”条件。
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
架构和设计
实现
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

C患病率(待定)

c++患病率(待定)

+常见的后果
部分帮助这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 影响 可能性
可用性

技术的影响:修改内存;DoS:崩溃,退出或重新启动;DoS:资源消耗(CPU);DoS:资源消耗(内存)

缓冲区溢位通常导致崩溃。其他的攻击导致缺乏可用性是可能的,包括把程序进入一个无限循环。
完整性
保密
可用性
访问控制

技术的影响:修改内存;执行未经授权的代码或命令;旁路保护机制

缓冲区溢位常常可以用来执行任意代码,通常一个程序的范围之外的隐式安全政策。
完整性
保密
可用性
访问控制
其他

技术的影响:修改内存;执行未经授权的代码或命令;旁路保护机制;其他

后果是任意代码执行时,这往往是用来颠覆任何其他安全服务。
+利用的可能性
+示范例子

示例1

虽然缓冲区溢出的例子可能相当复杂,它可能很简单,但仍可采,基于堆栈缓冲区溢出:

(坏的代码)
例如语言:C
#定义BUFSIZE 256
int主要(int命令行参数个数,char * * argv) {
字符缓冲区(BUFSIZE);
strcpy (buf, argv [1]);
}

缓冲区的大小是固定的,但没有保证字符串argv[1]不会超过这个大小和导致溢出。

示例2

这个例子将IP地址从一个用户,验证它是完整的,然后查找主机名和拷贝到缓冲区。

(坏的代码)
例如语言:C
空白host_lookup (char * user_supplied_addr) {
struct hostent *惠普;
in_addr_t * addr;
char主机名[64];
in_addr_t inet_addr (const char * cp);

/ *程序确保user_supplied_addr是正确的格式转换* /

validate_addr_form (user_supplied_addr);
addr = inet_addr (user_supplied_addr);
惠普= gethostbyaddr (addr, sizeof (struct in_addr) AF_INET);
strcpy(主机名、hp - > h_name);
}

这个函数分配64字节的缓冲区存储主机名,但是没有保证主机名不能超过64字节。如果攻击者指定一个地址解析为一个非常大的主机名,那么该函数会覆盖敏感数据,甚至放弃攻击者的控制流。

注意,本例中还包含一个未检查返回值(cwe - 252)能导致一个空指针(cwe - 476)。

+观察到的例子
参考 描述
基于堆栈缓冲区溢出的SFK wifi芯片用于物联网/嵌入式设备,每中钢协KEV利用在野外。
+潜在的缓解措施

阶段:构建和编译

策略:编译和构建硬化

使用功能或运行或编译软件扩展自动提供一个保护机制,减轻或消除缓冲区溢出。

例如,某些编译器和扩展提供自动缓冲区溢出检测机制,构建到编译后的代码。例子包括Microsoft Visual Studio / GS标志,Fedora / Red Hat FORTIFY_SOURCE GCC国旗,StackGuard, ProPolice。

有效性:深度防御

注意:这未必是一个完整的解决方案,因为这些机制只能检测某些类型的溢出。此外,仍有可能导致拒绝服务的攻击,因为典型的反应是退出应用程序。

阶段:体系结构和设计

使用一个抽象库抽象危险的api。不是一个完整的解决方案。

阶段:构建和编译

基于编译器的金丝雀StackGuard等机制,ProPolice和Microsoft Visual Studio / GS标志。除非这提供了自动范围检查,它不是一个完整的解决方案。

实施阶段:

实施和执行范围检查输入。

实施阶段:

不使用危险等功能。使用安全,等效函数检查边界错误。

阶段:操作

使用操作系统的预防功能,如本主题。这不是一个完整的解决方案。
+弱点Ordinalities
Ordinality 描述
(其他弱点的弱点存在独立的)
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 970年 SFP二级集群:错误的缓冲区的访问
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1160年 SEI CERT C编码标准- 06指导方针。数组(ARR)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1161年 07年SEI CERT C编码标准,指导方针。字符和字符串(STR)
+笔记

其他

基于堆栈缓冲区溢出可以实例化在返回地址覆盖,堆栈指针覆盖或帧指针覆盖。它们也可以被认为是函数指针覆盖,数组索引器覆盖或write-what-where条件等。
+分类法映射
映射分类名称 节点ID 适合 映射节点名
堆栈溢出
软件故障模式 SFP8 错误的缓冲区的访问
CERT C安全编码 ARR38-C 不精确的 保证库函数并不会形成无效的指针
CERT C安全编码 STR31-C CWE更具体 保证存储字符串为字符数据有足够的空间和零终结者
+引用
(ref - 1029)一个。“砸堆栈为了好玩和利润”。1996-11-08。<http://phrack.org/issues/49/14.html>。
[REF-7]大卫迈克尔·霍华德和勒布朗。编写安全代码。第五章,129页“堆栈溢出”。第二版。微软出版社。2002-12-04。<https://www.microsoftpressstore.com/store/writing -安全-代码- 9780735617223>。
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪5:缓冲区溢出”。Page 89. McGraw-Hill. 2010.
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第三章,“非执行堆栈”,76页。1版。艾迪生卫斯理》2006。
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第五章,“保护机制”,189页。1版。艾迪生卫斯理》2006。
[REF-18]安全软件公司. .“扣应用程序安全性的过程”。2005年。<https://cwe.mitre.org/documents/sources/TheCLASPApplicationSecurityProcess.pdf>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Potential_Mitigations Time_of_Introduction
2008-08-01 股的分析
添加/更新白盒定义
2008-09-08 CWE内容团队 主教法冠
更新Alternate_Terms、Applicable_Platforms Background_Details Common_Consequences,关系,Other_Notes, Taxonomy_Mappings Weakness_Ordinalities
2009-01-12 CWE内容团队 主教法冠
更新Common_Consequences、人际关系
2009-07-17 股的分析
改善了White_Box_Definition
2009-07-27 CWE内容团队 主教法冠
更新Potential_Mitigations White_Box_Definitions
2009-10-29 CWE内容团队 主教法冠
更新的关系
2010-02-16 CWE内容团队 主教法冠
更新的引用
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2012-05-11 CWE内容团队 主教法冠
更新Demonstrative_Examples、引用关系
2012-10-30 CWE内容团队 主教法冠
更新Demonstrative_Examples Potential_Mitigations
2014-07-30 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2017-11-08 CWE内容团队 主教法冠
更新Background_Details、Causal_Nature Likelihood_of_Exploit、引用关系,Taxonomy_Mappings White_Box_Definitions
2018-03-27 CWE内容团队 主教法冠
更新的引用
2019-01-03 CWE内容团队 主教法冠
更新的关系
2019-09-19 CWE内容团队 主教法冠
更新的引用
2020-02-24 CWE内容团队 主教法冠
更新的关系
2020-06-25 CWE内容团队 主教法冠
更新Common_Consequences
2021-03-15 CWE内容团队 主教法冠
更新Demonstrative_Examples,引用
2021-07-20 CWE内容团队 主教法冠
更新Demonstrative_Examples
2022-06-28 CWE内容团队 主教法冠
更新Observed_Examples
更多的信息是可用的,请选择一个不同的过滤器。
页面最后更新:2023年1月31日