 描述
产品执行的计算可以产生一个整数溢出或概括,当逻辑假设得到的值总是大于原始值。这可以介绍其他弱点当计算用于资源管理或执行控制。
 扩展描述
整数溢出或概括的发生在一个整数值增加太大的值存储在相关的表征。当这种情况发生时,该值可能包装成为一个非常小的或负数。虽然这可能是依赖行为的情况下,包装,它可以安全如果包装是意想不到的后果。尤其如此,如果整数溢出可以触发使用用户提供的输入。这是强调安全的结果用于控制循环时,做出安全性决策,或确定偏移量大小等行为的内存分配,复制、连接等。
 的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 相关的视图”研究概念”(cwe - 1000)
自然 |
类型 |
ID |
的名字 |
ChildOf |
支柱——一个弱点是最抽象类型的弱点和代表一个主题类/基地/变体相关弱点。支柱是不同于一个类别作为支柱技术上仍然是一种弱点,描述了一个错误,而一个类别代表一个共同特征用于组相关的东西。 |
682年 |
错误的计算 |
PeerOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
128年 |
环绕式处理错误 |
PeerOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
1339年 |
精度不足或精度实数 |
CanPrecede |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
119年 |
不当的操作限制的范围内一个内存缓冲区 |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 相关观点“软件开发”(cwe - 699)
自然 |
类型 |
ID |
的名字 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
189年 |
数字错误 |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 |
类型 |
ID |
的名字 |
ChildOf |
支柱——一个弱点是最抽象类型的弱点和代表一个主题类/基地/变体相关弱点。支柱是不同于一个类别作为支柱技术上仍然是一种弱点,描述了一个错误,而一个类别代表一个共同特征用于组相关的东西。 |
682年 |
错误的计算 |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 相关观点“七有害的王国”(cwe - 700)
自然 |
类型 |
ID |
的名字 |
ChildOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
20. |
不正确的输入验证 |
 模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
 常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
可用性
|
技术的影响:DoS:崩溃,退出或重新启动;DoS:资源消耗(CPU);DoS:资源消耗(内存);DoS:不稳定
这个弱点通常会导致未定义的行为,因此崩溃。在溢出的情况下涉及循环指数变量,无限循环的可能性也很高。 |
|
完整性
|
如果值是重要的数据(而不是流),简单的数据腐败发生。同样,如果环绕导致缓冲区溢出等其他条件,进一步可能发生内存泄露。 |
|
保密 可用性 访问控制
|
技术的影响:执行未经授权的代码或命令;旁路保护机制
这个弱点有时会引发缓冲区溢出,可以用来执行任意代码。这通常是在程序的隐式安全政策的范围。 |
|
 利用的可能性
 示范例子
示例1
以下为图像图像处理代码分配一个表。
img_t table_ptr;/ *结构包含img数据,每个* / 10 kb int num_imgs; … num_imgs = get_num_imgs (); table_ptr = (img_t *) malloc (sizeof (img_t) * num_imgs); …
这段代码将分配一个表大小num_imgs,然而随着num_imgs越来越大,计算确定的大小最终会溢出列表(cwe - 190)。这将导致一个非常小的列表来分配。如果后续代码运行在名单上,就好像它是num_imgs长,这可能会导致许多类型的界外问题(cwe - 119)。
示例2
下面的代码摘录OpenSSH 3.3演示了一个典型的整数溢出:
nresp = packet_get_int (); 如果(nresp > 0) {
响应= xmalloc (nresp * sizeof (char *)); (我= 0;我< nresp;我+ +)响应[我]= packet_get_string(空); }
如果nresp价值1073741824和sizeof (char *)有其典型值为4,然后操作的结果nresp * sizeof (char *)溢出,和xmalloc()的参数是0。大多数malloc()实现将愉快地分配一个0-byte缓冲区,导致后续的循环迭代中堆溢出缓冲区的回应。
示例3
整数溢出可以检测复杂和困难。下面的例子是为了说明一个整数溢出可能导致未定义的循环行为:
短int bytesRec = 0; 字符缓冲区(SOMEBIGNUM);
而(bytesRec < MAXGET) {
bytesRec + = getFromInput (buf + bytesRec); }
在上述情况下,完全有可能,bytesRec可能溢出,不断创造数量低于MAXGET也覆盖第一个MAXGET-1字节的缓冲区。
示例4
在这个例子中determineFirstQuarterRevenue方法用于确定第一季度收入会计/业务应用程序。方法检索前三个月的每月销售总额,计算第一季度销售总额从每月销售总额,计算第一季度收入根据第一季度的销售业绩,最后保存第一季度收入结果数据库。
#定义1月1 #定义2月2 #定义3月3
短getMonthlySales (int) {…}
浮动calculateRevenueForQuarter(短quarterSold) {…}
int determineFirstQuarterRevenue () {
/ /变量的季度销售收入
浮动quarterRevenue f = 0.0;
短JanSold = getMonthlySales(1月);/ * * / 1月销售 短FebSold = getMonthlySales(2月);/ * * / 2月销售 短MarSold = getMonthlySales (MAR);/ * * / 3月销售
/ /计算季度总
短quarterSold = JanSold + FebSold + MarSold;
/ /计算季度的总收入
quarterRevenue = calculateRevenueForQuarter (quarterSold);
saveFirstQuarterRevenue (quarterRevenue);
返回0;
}
然而,在这个例子中原始类型短int用于月度和季度销售变量。在C语言中简短的int原始类型的最大值为32768。这将创建一个潜在的整数溢出如果三个月销售的值加起来超过最大值的短int原始类型。一个整数溢出会导致数据损坏,意想不到的行为,无限循环,系统崩溃。纠正这种情况应该使用适当的原始类型,在下面的例子中,和/或提供了一些验证机制以确保原始类型的最大值不超过。
… 浮动calculateRevenueForQuarter(长quarterSold) {…}
int determineFirstQuarterRevenue () {
…
/ /计算季度总
长quarterSold = JanSold + FebSold + MarSold;
/ /计算季度的总收入
quarterRevenue = calculateRevenueForQuarter (quarterSold);
…
}
注意,一个整数溢出也可能发生如果quarterSold变量的原始类型长但是calculateRevenueForQuarter方法有一个参数类型的短。
 观察到的例子
参考 |
描述 |
|
|
|
|
|
|
|
|
|
|
|
链:整数溢出导致use-after-free |
|
链:整数溢出securely-coded邮件程序会导致缓冲区溢出。在2005年,这被认为是不切实际的利用,但在2020年,它被重新发现更容易利用由于技术的演进。 |
|
通过大量的参数整数溢出。 |
|
整数溢出在OpenSSH中列出的示范例子。 |
|
图像宽度和高度导致大整数溢出。 |
|
1会导致分配0字节的长度值和合成堆溢出。 |
|
1会导致分配0字节的长度值和合成堆溢出。 |
|
|
|
|
 潜在的缓解措施
阶段:需求
确保所有协议都严格定义,这样所有禁止入内的行为可以被识别简单,并要求严格的一致性协议。 |
阶段:需求
使用一种语言,不允许这个弱点或发生提供了结构,使这个弱点更容易避免的。
如果可能的话,选择一种语言或编译器执行自动范围检查。
|
阶段:体系结构和设计
使用审查库或框架不允许这个弱点发生或提供了结构,使这个弱点更容易避免的。
使用库或框架更容易处理数字没有意想不到的后果。
例子包括安全整数处理包如SafeInt (c++)或IntegerLib (C或c++)。( ref - 106]
|
实施阶段:
对任何数字输入执行输入验证,确保它是在预期的范围内。执行输入同时满足最小和最大预期范围的需求。
尽可能使用无符号整数。这使它更容易为整数溢出执行验证。需要签署了整数时,确保检查范围包括最小值和最大值。
|
实施阶段:
了解编程语言的基本表示形式,以及它如何与数值计算( cwe - 681)。密切关注字节大小差异,精度,签署/无符号的区别,截断,类型之间的转换和铸造,“不是一个数字”计算,和语言如何处理数字太大或太小的底层表示。( REF-7]
也要小心占32位,64位,和其他潜在的差异可能影响数字表示。
|
阶段:体系结构和设计
对于任何一个在客户端执行安全检查,确保这些检查复制在服务器端,为了避免 cwe - 602。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。 |
实施阶段:
检查编译器警告密切并消除潜在的安全隐患问题,如签署/无符号不匹配在内存中操作,或使用未初始化的变量。即使很少被利用的弱点,一个单一的故障可能会导致整个系统的妥协。 |
 检测方法
自动静态分析
这个弱点常常可以发现使用自动静态分析工具。许多现代工具使用数据流分析或基于技术来减少假阳性的数量。
|
黑盒
有时,这个弱点能被探测到的证据使用动态交互的工具和技术与产品使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。产品的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
注意:不可见性的代码,黑盒方法可能无法充分区分别人的这个弱点,需要后续手工方法诊断的潜在问题。 |
手动分析
这个弱点可以检测使用的工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。
具体来说,手工静态分析有助于评估分配计算的正确性。这可以用于检测溢出条件( cwe - 190)或类似的弱点可能严重的安全影响。
注意:这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。 |
自动静态分析——二进制或字节码
根据飙升,以下检测技术可能是有用的:
-
字节码的弱点分析,包括反汇编程序+源代码弱点分析
-
二进制弱点分析,包括反汇编程序+源代码弱点分析
|
动态分析与人工解释结果
根据飙升,以下检测技术可能是有用的:
|
人工静态分析源代码
根据飙升,以下检测技术可能是有用的:
|
自动静态分析源代码
根据飙升,以下检测技术可能是有用的:
-
源代码缺陷分析仪
-
Context-configured源代码分析器
|
体系结构或设计审查
根据飙升,以下检测技术可能是有用的:
|
 功能区域
 会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 |
类型 |
ID |
的名字 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
738年 |
CERT C安全编码标准(2008)第五章-整数(INT) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
742年 |
CERT C安全编码标准(2008)第9章-内存管理(MEM) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
802年 |
2010年前25 -资源管理风险 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
865年 |
2011年前25 -资源管理风险 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
872年 |
CERT c++安全编码部分04 -整数(INT) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
876年 |
CERT c++安全编码部分08 -内存管理(MEM) |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
884年 |
CWE横截面 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
998年 |
SFP二级集群:故障计算 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1137年 |
SEI CERT甲骨文安全编码标准Java - 03指导方针。数值类型和操作(NUM) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1158年 |
SEI CERT 04 C编码标准指导方针。整数(INT) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1162年 |
SEI CERT 08 C编码标准指导方针。内存管理(MEM) |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1200年 |
弱点在2019 CWE最危险的软件错误 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1337年 |
2021 CWE最危险软件的弱点的弱点 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1350年 |
2020 CWE最危险软件的弱点的弱点 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1387年 |
2022 CWE最危险软件的弱点的弱点 |
 笔记
术语
“整数溢出”有时被用来覆盖错误的几种类型,包括signedness错误,或缓冲区溢位涉及整数数据类型,而不是字符的操作。混乱的一部分事实的结果0 xffffffff签署上下文是1。其他困惑是因为整数溢出在链的作用。
 分类法映射
映射分类名称 |
节点ID |
适合 |
映射节点名 |
千鸟 |
|
|
整数溢出(包装或概括) |
7有害的王国 |
|
|
整数溢出 |
扣 |
|
|
整数溢出 |
CERT C安全编码 |
INT18-C |
CWE更抽象 |
评估在大整数表达式比较或分配的大小 |
CERT C安全编码 |
INT30-C |
CWE更抽象 |
确保无符号整数操作不包装 |
CERT C安全编码 |
INT32-C |
不精确的 |
确保签署了整数操作不会导致溢出 |
CERT C安全编码 |
INT35-C |
|
评估在大整数表达式比较或分配的大小 |
CERT C安全编码 |
MEM07-C |
CWE更抽象 |
确保参数calloc(),当增多,不包装 |
CERT C安全编码 |
MEM35-C |
|
为一个对象分配足够的内存 |
WASC |
3 |
|
整数溢出 |
软件故障模式 |
SFP1只能 |
|
在计算故障 |
 引用
|
|
|
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪7:整数溢出”。Page 119. McGraw-Hill. 2010. |
|
|
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第六章,“带符号整数边界”,220页。1版。艾迪生卫斯理》2006。 |
|