 描述
产品分配一个可重用的资源或一组资源代表一个演员不强加任何限制的大小或数量的可分配的资源,违反安全策略的演员。
 扩展描述
代码经常使用有限的资源,所以程序员必须小心确保资源不消耗过快,或太容易。没有使用配额,资源限制,或其他保护机制,它可以攻击者容易消耗许多资源迅速使许多请求,或造成更大的资源比使用是必要的。当太多的资源分配,或者单个资源太大,那么它可以防止代码正常工作,可能导致拒绝服务。
 的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 相关的视图”研究概念”(cwe - 1000)
自然 |
类型 |
ID |
的名字 |
ChildOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
665年 |
不适当的初始化 |
ChildOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
400年 |
不受控制的资源消耗 |
ParentOf |
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 |
774年 |
配置文件描述符或处理没有限制或节流 |
ParentOf |
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 |
789年 |
内存分配过多的大小值 |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
1325年 |
顺序控制内存分配不当 |
光束 |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
20. |
不正确的输入验证 |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 |
类型 |
ID |
的名字 |
ChildOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
400年 |
不受控制的资源消耗 |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 相关视图”架构概念”(cwe - 1008)
自然 |
类型 |
ID |
的名字 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1011年 |
授权的演员 |
 模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 |
请注意 |
架构和设计 |
遗漏:这个弱点是由于缺少一个安全策略在体系结构和设计阶段。 |
实现 |
|
操作 |
|
系统配置 |
|
 常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
可用性
|
技术的影响:DoS:资源消耗(CPU);DoS:资源消耗(内存);DoS:资源消耗(其他)
当分配资源没有限制时,攻击者可以防止其他系统,应用程序或进程访问相同类型的资源。 |
|
 利用的可能性
 示范例子
示例1
这段代码分配一个套接字和叉子在每次接收一个新的连接。
袜子=插座(AF_INET SOCK_STREAM 0); 而(1){
万博下载包newsock =接受(袜子,…); printf("连接已被接受\ n "); pid = fork (); }
程序不追踪有多少联系,和它不限制数量的连接。因为分支是相对昂贵的操作,攻击者能够导致系统耗尽CPU、流程或记忆,使大量的连接。另外,攻击者可以使用所有可用的连接,防止其他人访问远程系统。
示例2
在下面的示例中用于接受请求的服务器套接字连接在本地文件系统存储数据使用一个指定的文件名。openSocketConnection方法建立一个服务器套接字接受来自客户的请求。当客户端建立一个连接到这个服务getNextMessage方法首先从套接字用于检索文件的名称来存储数据,openFileToWrite方法将验证文件名和打开一个文件写入本地文件系统。然后getNextMessage内使用while循环,不断从套接字读取数据和输出数据的文件,直到不再有任何数据从套接字。
int writeDataFromSocketToFile (char *主机,int端口) {
字符的文件名(FILENAME_SIZE); 字符缓冲区(BUFFER_SIZE); int插座= openSocketConnection(主机、端口);
如果(套接字< 0){
printf("无法打开套接字连接"); 返回(失败); } 如果(getNextMessage(套接字,文件名,FILENAME_SIZE) > 0) {
如果(openFileToWrite(文件名)> 0){
而(getNextMessage(套接字缓冲区,BUFFER_SIZE) > 0) {
如果(! (writeToFile(缓冲区)> 0))
打破;
}
} closeFile ();
} closeSocket(插座);
}
这个例子创建了一个情况)可以将数据转储到一个文件在本地文件系统中没有任何文件的大小限制。这个有可能排文件或磁盘资源和/或限制其他客户端访问服务的能力。
示例3
在下面的例子中,processMessage方法接收一个二维字符数组包含消息的处理。二维字符数组包含消息的第一个字符数组的长度和消息体第二个字符数组。getMessageLength方法检索整数值从第一个字符数组的长度。后确认消息长度大于零,身体开始字符数组指针指向二维字符数组的第二个字符数组和内存分配的新身体字符数组。
/ *信息接受过程二维字符数组的形式(长度)(身体)包含消息的处理* /
int processMessage (char * *消息) {
char *的身体;
int长度= getMessageLength(消息[0]);
如果(长度> 0){
身体=消息[1][0]; processMessageBody(身体); 返回(成功); } 其他{
printf("无法处理消息;无效的消息长度”); 返回(失败); }
}
这个示例创建一个情况身体字符数组的长度可以非常大,会消耗过多的内存,耗尽系统资源。这可以避免通过限制第二个字符数组的长度与最大长度检查
同时,考虑改变类型从“int”到“unsigned int”,所以你总是保证数量是正的。这也许不可能如果协议特别需要允许负值,或者如果你不能控制getMessageLength的返回值(),但它可以简化检查,以确保输入是积极的,并消除其他错误如signed-to-unsigned转换错误(cwe - 195)可能发生的其他代码。
无符号整数长度= getMessageLength(消息[0]); 如果(长度(长度> 0)& & (< MAX_LENGTH)) {…}
示例4
在接下来的例子中,一个服务器对象创建一个服务器套接字并接受客户端连接到套接字。为每一个客户端连接到套接字使用ClientSocketThread类生成一个单独的线程对象处理请求的客户机通过套接字。
公共空间acceptConnections () {
尝试{
ServerSocket ServerSocket =考察(SERVER_PORT); int counter = 0; 布尔hasConnections = true; 而(hasConnections) {
套接字客户= serverSocket.accept (); 线程t =新线程(新ClientSocketThread(客户端); .getHostName t.setName (client.getInetAddress()() +“:”+计数器+ +); t.start (); } serverSocket.close ();
}捕捉(IOException特异){…}
}
在这个例子中是没有限制客户端连接的数量和客户端线程创建的。允许无限的客户端连接和线程可能会淹没系统和系统资源。
服务器应该限制客户端连接的数量和客户端线程创建的。这可以很容易地通过创建一个线程池对象生成的线程数量的限制。
公共静态最终int SERVER_PORT = 4444; 公共静态最终int MAX_CONNECTIONS = 10; …
公共空间acceptConnections () {
尝试{
ServerSocket ServerSocket =考察(SERVER_PORT); int counter = 0; 布尔hasConnections = true; 而(hasConnections) {
hasConnections = checkForMoreConnections (); 套接字客户= serverSocket.accept (); 线程t =新线程(新ClientSocketThread(客户端); .getHostName t.setName (client.getInetAddress()() +“:”+计数器+ +); ExecutorService池= Executors.newFixedThreadPool (MAX_CONNECTIONS); pool.execute (t); } serverSocket.close ();
}捕捉(IOException特异){…}
}
示例5
一位不愿透露姓名的网站允许用户购买门票事件。一个菜单选项允许用户购买10票,但是后台没有限制的实际数量可以购买票。
例子6
这里的问题是,每一次连接,分配更多的内存。所以如果一个人只开放越来越多的连接,最终会耗尽内存的机器。
钢筋连接(){
foo = malloc (1024); 返回foo; }
endConnection foo () {
免费(foo); }
int main () {
而(1){
foo =连接(); }
endConnection (foo) }
 观察到的例子
参考 |
描述 |
|
|
|
语言翻译不限制数量的临时文件被创建在处理一个MIME请求与大量的地方. . |
|
司机不使用一个最大宽度时调用sscanf样式功能,导致堆栈消费。 |
|
大整数长度属性值对象导致大量的内存分配。 |
|
产品允许疲惫的文件描述符在处理大量的TCP数据包。 |
|
沟通产品允许内存消耗大量的SIP请求,导致许多创建会话。 |
|
产品允许攻击者造成拒绝服务通过大量的指示,每打开一个单独的窗口。 |
|
CMS不限制搜索的数量,可以同时发生,导致资源枯竭。 |
|
web应用程序扫描试图读取一个特别大的一个用户创建的文件,导致过程终止 |
|
Go-based工作量协调器并不限制资源使用未经身份验证的连接,允许一个DoS洪水服务 |
 潜在的缓解措施
阶段:需求
明确指定最小和最大预期功能,并决定哪些行为可以接受当资源分配达到极限。 |
阶段:体系结构和设计
限制访问的资源无特权的用户。设置每个用户对资源的限制。允许系统管理员定义这些限制。应该注意避免 cwe - 410。 |
阶段:体系结构和设计
到系统架构设计节流机制。最好的保护是限制未经授权的用户可以引起的资源消耗。强大的身份验证和访问控制模型将有助于防止这种攻击发生在第一个地方,它会帮助管理员识别谁犯下虐待。登录应用程序应该尽可能DoS攻击的保护。限制数据库访问,也许通过缓存结果集,能够最大限度地减少资源消耗。进一步限制潜在的DoS攻击,考虑跟踪来自用户的请求速率和阻塞请求超过率定义阈值。 |
实施阶段:
假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,使用一个可接受的输入列表,严格遵守规范。拒绝任何不严格符合规范的输入,或将其转换为一些。
当执行输入验证,考虑所有可能相关的属性,包括长度,类型的输入,可接受的值的全系列,缺失或额外的输入,语法,一致性相关领域,符合业务规则。作为业务规则逻辑的一个例子,在语法上“船”可能是有效的,因为它只包含字母数字字符,但它不是有效的如果输入预计仅包含颜色,如“红”或“蓝色”。
不完全依赖寻找恶意或畸形的输入。这很可能错过至少有一个不受欢迎的输入,特别是如果代码的环境变化。这可以让攻击者有足够的空间绕过验证。然而,denylists可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。
注意:这将只适用于用户输入的情况下可以影响的大小和频率的资源分配。 |
阶段:体系结构和设计
对于任何一个在客户端执行安全检查,确保这些检查复制在服务器端,为了避免 cwe - 602。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。 |
阶段:体系结构和设计
缓解资源耗尽攻击目标系统要求:
-
认识到攻击和否认用户进一步访问对于一个给定的时间,通常用增加时间延迟
-
统一扼杀所有请求,以使其更难以消耗资源的速度比可以再次被释放。
第一个解决方案本身就是一个问题,因为它可能允许攻击者,以防止系统通过一个特定的有效用户的使用。如果攻击者模仿合法用户,他们可能会阻止用户访问服务器的问题。
第二个解决方案很难有效研究所——甚至当处理得当,它并没有提供一个完整的解决方案。它只是需要更多资源的攻击者。
|
阶段:体系结构和设计
确保协议的规模有特定的限制。 |
阶段:体系结构和设计;实现
如果程序失败,必须确保它优雅地失败(失败关闭)。可能存在一种诱惑,让项目失败不佳的情况下(如低内存条件,但攻击者可以断言控制之前,软件已经完全退出。或者,一个不受控制的失败可能会导致级联问题与其他下游组件;例如,这个项目可以发送一个信号给下游工序流程立即知道问题发生,有更好的机会复苏。
确保所有失败资源分配系统到一个安全的姿势。
|
阶段:操作;架构和设计
使用的资源设置提供的操作系统或环境。例如,当管理在POSIX系统资源,setrlimit()可用于设置限制对特定类型的资源,和getrlimit()可以确定有多少资源是可用的。然而,这些功能并不是在所有的操作系统都可用。
当当前水平接近的最大定义的应用程序(请参阅 cwe - 770),然后特权用户限制进一步的资源分配;此外,为弱势用户开始释放资源。虽然这缓解可能保护系统免受攻击,它不一定会阻止攻击者不利影响其他用户。
|
 检测方法
人工静态分析
手工静态分析可以用于发现这个弱点,但它可能不会在有限时间内达到所需的代码覆盖约束。如果拒绝服务并不被视为重大风险,或者如果有强烈的强调后果,比如代码执行,然后手动分析可能不会关注这个弱点。 |
起毛
而起毛通常是面向发现底层实现bug,它可以无意中发现不受控制的资源分配问题。这可能发生在当fuzzer生成大量的测试用例,但不重新启动测试用例之间的有针对性的产品。如果一个人的测试用例生成一个崩溃,但它不可靠,那么无法限制资源分配可能会造成。
当分配直接影响数字输入,那么起毛可能产生这个衰弱的迹象。
|
自动动态分析
某些自动动态分析技术可以有效地控制资源配置产生的副作用问题,特别是与流程等资源,内存,和连接。这项技术可能需要生成大量的产品在短时间内的请求。手动分析可能需要解释结果。 |
自动静态分析
可能需要专门配置或优化训练自动化工具来识别这个弱点。
自动静态分析通常效用有限认识无限的分配问题,除了缺少释放program-independent系统资源(如文件、套接字、和过程,或未经检查的参数记忆。系统资源,自动静态分析可以检测环境资源没有公布后过期,或者太多的资源请求,可以发生与记忆。自动分析配置文件可以检测设置不指定一个最大值。
自动静态分析工具将不适合检测自定义资源的枯竭,如预期的安全政策的公告板的用户只允许有限数量的帖子每天。
|
 会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 |
类型 |
ID |
的名字 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
802年 |
2010年前25 -资源管理风险 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
857年 |
CERT甲骨文安全Java编码标准(2011)第14章-输入输出(FIO) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
858年 |
CERT甲骨文安全Java编码标准(2011)第十五章-序列化(SER) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
861年 |
CERT甲骨文安全Java编码标准(2011)第18章-杂项(MSC) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
867年 |
2011年处于25 -弱点 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
876年 |
CERT c++安全编码部分08 -内存管理(MEM) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
877年 |
CERT c++安全编码部分09 -输入输出(FIO) |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
884年 |
CWE横截面 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
985年 |
SFP二级集群:无限制的消耗 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1147年 |
SEI CERT甲骨文Java安全编码标准,指南13。输入输出(FIO) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1148年 |
SEI CERT甲骨文Java安全编码标准,准则14。序列化(SER) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1152年 |
SEI CERT甲骨文Java安全编码标准,指南49。杂项(MSC) |
 笔记
的关系
这个条目不同于不受控制的资源消耗( cwe - 400),还有其他相关的缺陷无法控制资源消耗,如持有资源太长时间使用后,或不正确的跟踪活动资源,这样他们可以管理和发布时完成( cwe - 771)。
理论
脆弱性理论主要是关于行为和资源交互。“资源枯竭”可以被视为一个后果或攻击,根据不同的视角。这个条目是为了反映一个潜在的弱点,使这些攻击(或结果)。
 分类法映射
映射分类名称 |
节点ID |
适合 |
映射节点名 |
CERT甲骨文安全Java编码标准(2011) |
FIO04-J |
|
当他们不再需要关闭资源 |
CERT甲骨文安全Java编码标准(2011) |
SER12-J |
|
序列化期间避免内存和资源泄漏 |
CERT甲骨文安全Java编码标准(2011) |
MSC05-J |
|
不排气堆空间 |
 引用
|
|
|
|
|
|
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第十章,“资源限制”,574页。1版。艾迪生卫斯理》2006。 |
 内容的历史
提交 |
提交日期 |
提交者 |
组织 |
2009-05-13 |
CWE内容团队 |
主教法冠 |
|
修改 |
修改日期 |
修饰符 |
组织 |
2009-07-27 |
CWE内容团队 |
主教法冠 |
更新Related_Attack_Patterns |
2009-10-29 |
CWE内容团队 |
主教法冠 |
更新的关系 |
2009-12-28 |
CWE内容团队 |
主教法冠 |
更新Applicable_Platforms、Demonstrative_Examples Detection_Factors Observed_Examples,引用,Time_of_Introduction |
2010-02-16 |
CWE内容团队 |
主教法冠 |
更新Common_Consequences、Detection_Factors Potential_Mitigations、引用Related_Attack_Patterns、人际关系 |
2010-04-05 |
CWE内容团队 |
主教法冠 |
更新Common_Consequences、Demonstrative_Examples Related_Attack_Patterns |
2010-06-21 |
CWE内容团队 |
主教法冠 |
更新Common_Consequences Potential_Mitigations,引用 |
2010-09-27 |
CWE内容团队 |
主教法冠 |
更新Demonstrative_Examples Potential_Mitigations |
2011-03-29 |
CWE内容团队 |
主教法冠 |
更新Demonstrative_Examples Detection_Factors,关系 |
2011-06-01 |
CWE内容团队 |
主教法冠 |
更新Common_Consequences、关系、Taxonomy_Mappings |
2011-06-27 |
CWE内容团队 |
主教法冠 |
更新的关系 |
2011-09-13 |
CWE内容团队 |
主教法冠 |
更新的关系,Taxonomy_Mappings |
2012-05-11 |
CWE内容团队 |
主教法冠 |
更新Demonstrative_Examples、引用关系,Taxonomy_Mappings Related_Attack_Patterns |
2012-10-30 |
CWE内容团队 |
主教法冠 |
更新Potential_Mitigations |
2014-02-18 |
CWE内容团队 |
主教法冠 |
更新Related_Attack_Patterns |
2014-06-23 |
CWE内容团队 |
主教法冠 |
更新Related_Attack_Patterns |
2014-07-30 |
CWE内容团队 |
主教法冠 |
更新的关系 |
2015-12-07 |
CWE内容团队 |
主教法冠 |
更新Related_Attack_Patterns |
2017-05-03 |
CWE内容团队 |
主教法冠 |
更新Related_Attack_Patterns |
2017-11-08 |
CWE内容团队 |
主教法冠 |
更新Demonstrative_Examples、Likelihood_of_Exploit Modes_of_Introduction Potential_Mitigations,引用关系,Taxonomy_Mappings |
2018-03-27 |
CWE内容团队 |
主教法冠 |
更新的引用 |
2019-01-03 |
CWE内容团队 |
主教法冠 |
更新Demonstrative_Examples、描述关系,Taxonomy_Mappings |
2019-06-20 |
CWE内容团队 |
主教法冠 |
更新Related_Attack_Patterns、人际关系 |
2020-02-24 |
CWE内容团队 |
主教法冠 |
更新Potential_Mitigations Related_Attack_Patterns,关系 |
2020-06-25 |
CWE内容团队 |
主教法冠 |
Applicable_Platforms更新,描述、Maintenance_Notes Potential_Mitigations Relationship_Notes、人际关系 |
2020-12-10 |
CWE内容团队 |
主教法冠 |
更新的关系 |
2021-07-20 |
CWE内容团队 |
主教法冠 |
更新Observed_Examples |
2022-10-13 |
CWE内容团队 |
主教法冠 |
更新Observed_Examples,引用 |
2023-01-31 |
CWE内容团队 |
主教法冠 |
更新描述,Detection_Factors |
|