CWE

常见的弱点枚举

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

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

cwe - 805:缓冲区长度值不正确的访问

弱点ID: 805
抽象:基地
结构:简单的
视图定制的信息:
+描述
产品使用顺序操作读或写一个缓冲,但它使用一个不正确的长度值,使访问内存缓冲区的边界之外。
+扩展描述
当长度值超过目标的大小,可能会发生缓冲区溢出。
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 119年 不当的操作限制的范围内一个内存缓冲区
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 806年 缓冲区的访问使用源缓冲区的大小
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 130年 处理不当的长度参数不一致
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关观点“软件开发”(cwe - 699)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1218年 内存缓冲区错误
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”方案及质量的措施(2020)”(CWE-1305)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 119年 不当的操作限制的范围内一个内存缓冲区
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”方案及数据保护措施”(cwe - 1340)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 119年 不当的操作限制的范围内一个内存缓冲区
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
实现
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

C(通常是普遍的)

c++(通常是普遍的)

类:装配患病率(待定)

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

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

缓冲区溢位常常可以用来执行任意代码,通常一个程序的范围之外的隐式安全政策。这通常可以用来颠覆任何其他安全服务。
可用性

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

缓冲区溢位通常导致崩溃。其他的攻击导致缺乏可用性是可能的,包括把程序进入一个无限循环。
+利用的可能性
+示范例子

示例1

这个例子将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个字节,但是并不能保证主机名不能超过64字节。如果攻击者指定一个地址解析为一个非常大的主机名,那么该函数会覆盖敏感数据,甚至放弃攻击者的控制流。

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

示例2

在下面的示例中,可以要求memcpy比假定移动更大的内存段:

(坏的代码)
例如语言:C
int returnChunkSize (void *) {

/ *如果块信息有效,返回可用内存的大小,

*,返回1表示一个错误

* /
}
int main () {

memcpy (destBuf srcBuf (returnChunkSize (destBuf) 1));
}

如果returnChunkSize()碰巧遇到一个错误将返回1。注意,返回值不是之前检查memcpy操作(cwe - 2521),所以可以作为尺寸参数传递给memcpy () (cwe - 805)。因为memcpy()假设值是无符号,它将被视为MAXINT-1 (cwe - 195),因此将远比可能可用内存复制到目标缓冲区(cwe - 787,cwe - 788)。

示例3

在接下来的例子中,源字符串复制到桌子strncpy字符串使用方法。

(坏的代码)
例如语言:C

炭源[21]=“字符串”;
char dest [12];
strncpy(桌子,来源,sizeof(源)1);

然而,在调用strncpy源字符串中使用运算符调用来确定数量的字符复制。这将创建一个缓冲区溢出源字符串的大小大于字符串不在座位上。内的桌子应该使用字符串运算符调用,以确保正确的数量的字符复制,如下所示。

(好的代码)
例如语言:C

炭源[21]=“字符串”;
char dest [12];
strncpy(桌子,来源,sizeof(桌子)1);

示例4

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

(坏的代码)
例如语言:C
#定义LOG_INPUT_SIZE 40

/ /保存一个日志文件的文件名
int outputFilenameToLog (char *文件名,int长度){
int成功;

/ /缓冲区大小设置为输入日志文件的最大大小
字符缓冲区(LOG_INPUT_SIZE);

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

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

返回成功;
}

然而,在这种情况下,字符串复制方法,strncpy,错误地使用方法参数长度来确定数量的字符复制,而不是使用本地字符串的大小,缓冲区。这可能导致缓冲区溢出如果字符串中包含的字符数指出通过文件名是大然后允许本地字符串的字符数。字符串复制方法应该使用缓冲区内的字符串运算符调用来确保只有字符缓冲区复制到数组的大小避免缓冲区溢出,如下所示。

(好的代码)
例如语言:C

/ /将文件复制到缓冲区
strncpy (buf,文件名,sizeof (buf) 1);
+观察到的例子
参考 描述
链:大长度值导致缓冲区上(cwe - 126)
使用数据包长度的字段计算,然后复制到一个固定大小的缓冲区
链:检索未初始化的内存位置的长度值
制作的长度值文件阅读器会导致缓冲区溢出
SSL服务器溢出当多个长度字段的总和超过给定值
语言翻译API函数不验证长度参数,导致暴露的信息
+潜在的缓解措施

阶段:需求

策略:语言选择

使用一种语言,不允许这个弱点或发生提供了结构,使这个弱点更容易避免的。

例如,执行自己的内存管理的多种语言,比如Java和Perl,不受缓冲区溢出。其他语言,比如Ada和c#,通常提供溢出保护,但保护由程序员可以禁用。

警惕,语言的接口本地代码仍有可能溢出,即使语言本身在理论上是安全的。

阶段:体系结构和设计

策略:库或框架

使用审查库或框架不允许这个弱点发生或提供了结构,使这个弱点更容易避免的。

例子包括安全C字符串库(SafeStr)通过混乱和Viega [REF-57),和Strsafe系列。h图书馆从微软(REF-56]。这些库提供的安全版本overflow-prone字符串处理函数。

注意:这不是一个完整的解决方案,因为许多缓冲区溢出是不相关的字符串。

阶段:构建和编译

策略:编译和构建硬化

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

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

有效性:深度防御

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

实施阶段:

考虑遵守以下规则,分配和管理应用程序的内存:

  • 双重检查指定的缓冲区一样大。
  • 当使用函数接受一个复制的字节数,如strncpy(),请注意,如果目的地缓冲区大小等于源缓冲区大小,不得NULL-terminate字符串。
  • 检查缓冲区边界如果访问缓冲区在一个循环中,确保没有危险的写作过去分配空间。
  • 如果有必要,所有输入字符串截断合理长度之前他们复制和连接功能。

阶段:体系结构和设计

对于任何一个在客户端执行安全检查,确保这些检查复制在服务器端,为了避免cwe - 602。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。

阶段:操作

策略:环境硬化

运行或编译产品使用功能或扩展随机安排程序的可执行文件的位置和库在内存中。因为这使得地址不可预测的,它可以防止攻击者可利用的代码可靠地跳。

例子包括地址空间布局随机化(本)REF-58][REF-60和位置独立的可执行(派)ref - 64]。

有效性:深度防御

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

阶段:操作

策略:环境硬化

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

有效性:深度防御

注意:这不是一个完整的解决方案,因为缓冲区溢位可以用来覆盖附近的变量以危险的方式修改产品的状态。此外,它不能用于变为无效来情况下,代码是必需的。最后,仍可能导致拒绝服务的攻击,因为典型的反应是退出应用程序。

阶段:体系结构和设计;操作

策略:环境硬化

使用所需的最低特权运行您的代码来完成必要的任务(ref - 76]。如果可能的话,创建独立帐户权限有限,只用于一个任务。这样,一个成功的攻击不会立即让攻击者访问其他产品或其环境。例如,数据库应用程序很少需要作为数据库管理员运行,特别是在日常操作。

阶段:体系结构和设计;操作

策略:沙盒或监狱

运行代码的“监狱”或类似沙箱环境执行严格的流程和操作系统之间的边界。这可能有效地限制哪些文件可以在一个特定的目录或访问哪些命令可以执行的软件。

操作系统的例子包括Unix chroot监狱,AppArmor对,SELinux。在一般情况下,托管代码可能会提供一些保护。例如,java。在Java SecurityManager FilePermission允许软件指定文件操作的限制。

这可能不是一个可行的解决方案,它只限制对操作系统的影响;应用程序的其余部分可能仍然接受妥协。

应该注意避免cwe - 243和其他相关弱点监狱。

有效性:有限

注意:这种缓解的有效性取决于特定的沙盒或监狱的预防功能使用,只可能有助于减少攻击的范围,比如限制攻击者对特定文件系统的系统调用或限制部分,可以访问。
+弱点Ordinalities
Ordinality 描述
合成
(缺点是通常与其他弱点的存在)
(其他弱点的弱点存在独立的)
+检测方法

自动静态分析

这个弱点常常可以发现使用自动静态分析工具。许多现代工具使用数据流分析或基于技术来减少假阳性的数量。

自动静态分析一般不占报告时的环境考虑禁止入内的内存操作。这可能很难让用户决定哪些应该首先调查警告。例如,一个分析工具可能会报告缓冲区溢出,来自命令行参数的程序不会运行setuid或其他特权。

有效性:高

注意:缓冲区错误检测技术更成熟比大多数其他类型的弱点。

自动动态分析

这个弱点能被探测到的使用动态交互的工具和技术与产品使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。产品的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。

有效性:温和

注意:不可见性的代码,黑盒方法可能无法充分区分别人的这个弱点,需要手动方法来诊断潜在的问题。

手动分析

手动分析寻找这个弱点可能是有用的,但它可能不会在有限时间内达到所需的代码覆盖约束。这是困难的缺点,必须考虑所有输入,因为攻击表面太大。
+影响资源
  • 内存
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 740年 CERT C安全编码标准(2008)第七章-数组(ARR)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 802年 2010年前25 -资源管理风险
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 867年 2011年处于25 -弱点
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 874年 CERT c++安全编码部分06 -数组和STL (ARR)
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 884年 CWE横截面
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1160年 SEI CERT C编码标准- 06指导方针。数组(ARR)
+分类法映射
映射分类名称 节点ID 适合 映射节点名
CERT C安全编码 ARR38-C 不精确的 保证库函数并不会形成无效的指针
+引用
[REF-7]大卫迈克尔·霍华德和勒布朗。编写安全代码。第六章,“为什么acl是重要的”171页。第二版。微软出版社。2002-12-04。<https://www.microsoftpressstore.com/store/writing -安全-代码- 9780735617223>。
(REF-58)迈克尔·霍华德。在Windows Vista“地址空间布局随机化”。<http://blogs.msdn.com/michael_howard/archive/2006/05/26/address-space-layout-randomization-in-windows-vista.aspx>。
van de Ven [REF-59]阿扬。“限制与ExecShield缓冲区溢出”。<http://www.redhat.com/magazine/009jul05/features/execshield/>。
[REF-60]“罗马帝国”。<http://en.wikipedia.org/wiki/PaX>。
(ref - 741)杰森。“前25系列——排名12 -访问的缓冲区长度不正确的价值”。无软件安全研究所。2010-03-11。<http://blogs.sans.org/appsecstreetfighter/2010/03/11/top-25-series-rank-12-buffer-access-with-incorrect-length-value/>。
[REF-57]马特混乱和约翰Viega。“安全C字符串库v1.0.3”。<http://www.zork.org/safestr/>。
[REF-56]微软。使用Strsafe系列”。h函数”。<http://msdn.microsoft.com/en-us/library/ms647466.aspx>。
微软(ref - 61)。第1部分“理解DEP作为缓解技术”。<http://blogs.technet.com/b/srd/archive/2009/06/12/understanding dep - - -缓解-技术- 1. aspx一部分>。
(ref - 76)肖恩·巴纳姆和迈克尔Gegick。“最小特权”。2005-09-14。<https://www.cisa.gov/uscert/bsi/articles/knowledge/principles/least-privilege>。
墨菲(ref - 64)资助。“位置独立的可执行文件(派)”。Red Hat。2012-11-28。<https://securityblog.redhat.com/2012/11/28/position-independent-executables-pie/>。
+内容的历史
+提交
提交日期 提交者 组织
2010-01-15 CWE内容团队 主教法冠
+修改
修改日期 修饰符 组织
2010-04-05 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2010-06-21 CWE内容团队 主教法冠
更新Common_Consequences Potential_Mitigations,引用
2010-09-27 CWE内容团队 主教法冠
更新Potential_Mitigations
2010-12-13 CWE内容团队 主教法冠
更新Potential_Mitigations
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2011-06-27 CWE内容团队 主教法冠
更新Demonstrative_Examples Observed_Examples,关系
2011-09-13 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2012-05-11 CWE内容团队 主教法冠
更新Potential_Mitigations、引用关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2014-02-18 CWE内容团队 主教法冠
更新Potential_Mitigations,引用
2014-06-23 CWE内容团队 主教法冠
更新Demonstrative_Examples
2017-11-08 CWE内容团队 主教法冠
更新Applicable_Platforms、Causal_Nature Demonstrative_Examples Likelihood_of_Exploit,引用,Taxonomy_Mappings
2018-03-27 CWE内容团队 主教法冠
更新的引用
2019-01-03 CWE内容团队 主教法冠
更新的关系
2019-06-20 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2020-02-24 CWE内容团队 主教法冠
更新的关系
2020-06-25 CWE内容团队 主教法冠
更新Common_Consequences
2020-08-20 CWE内容团队 主教法冠
更新的关系
2020-12-10 CWE内容团队 主教法冠
更新的关系
2021-07-20 CWE内容团队 主教法冠
更新Demonstrative_Examples Potential_Mitigations
2022-10-13 CWE内容团队 主教法冠
更新的引用
2023-01-31 CWE内容团队 主教法冠
更新描述、Detection_Factors Potential_Mitigations
更多的信息是可用的,请选择一个不同的过滤器。
页面最后更新:2023年1月31日