CWE

常见的弱点枚举

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

2021 CWE最重要的硬件的弱点
CWE最危险的弱点
>文档>脆弱性概论
ID

脆弱性概论
脆弱性概论

文档版本:1.0.1日期:2009年10月29日

这是一个草案。CWE的打算支持维护,从一个特定的技术教育和征求反馈观众。本文档不反映任何主教法冠公司的官方立场或其赞助商。manbetx客户端首页版权©2009,斜方公司。manbetx客户端首页保留所有权利。许可重新分配这个文件如果没有这段删除。本文档是可以不经通知自行调整。

作者:史蒂夫•Christey康纳·哈里斯(cwe@mitre.org)
URL:http://cwe.mitre.org/documents/vulnerability_theory/intro.html

表的内容
表的内容
  1. 免责声明
  2. 介绍
  3. 状态
  4. 目标受众
  5. 基本概念
  6. 演示代码:Bug桶
  7. 控制领域
  8. 保护机制
  9. 链和复合材料
  10. 属性
  11. 简化了错误处理模型
  12. 资源生命周期
  13. 消息结构之间的控制领域
  14. 简化模型的访问控制
  15. 操作类型
  16. 工件的标签
  17. 额外的概念下的探索
  18. 术语的例子
  19. 示例应用程序的理论
  20. 未来的工作
  21. 相关工作
  22. 学分
  23. 更新日志
免责声明
免责声明

这是一个草案。CWE的打算支持维护,从一个特定的技术教育和征求反馈观众。本文档不反映任何主教法冠公司的官方立场或其赞助商。manbetx客户端首页2009年版权(c),斜方公司。manbetx客户端首页保留所有权利。许可重新分配这个文件如果没有这段删除。本文档是可以不经通知自行调整。

介绍
介绍

尽管应用脆弱性研究的快速增长和安全软件开发,这些社区没有正式确定其技术取得了很大的进展,和“研究员的本能”很难描述或教还。学科继续比科学更黑魔法。例如,术语是严重的不足,和创新可以错过,因为他们是误诊为一个共同的问题。

主教法冠发展脆弱性理论,这是一个词汇和框架,讨论和分析漏洞在抽象的层面上,但比heavily-abused物质和精度,模糊的概念,如“输入验证”和“拒绝服务”。Our goal is to improve the research, modeling, and classification of software flaws, and to help bring the discipline out of the dark ages. Our hope is that this presentation will generate significant discussion with the most forward-thinking researchers, educate non-expert researchers, and make people think about vulnerabilities differently.

状态
状态

这个文件的最新修订是在2009年7月,主要反映了正在进行的工作,可以追溯到2005年。自2007年以来这是第一次更新的文档,和几个重要的概念首次识别和解释在这个新的修订。

脆弱性理论的演变主要是上下文中出现的常见弱点枚举(CWE),近800类型的分类和类别的弱点导致缓冲区溢出等漏洞,XSS,随机性,不足和坏的权限。理论被用来解释分类问题和火车非专业分析师脆弱性研究的心态。一些术语进入了CVE,它帮助我们理解新的弱点变体——特别是通过给一个词汇有效地解释了为什么变异都是新的。

这个草案是最广泛的可用的文本主题。

目标受众
目标受众

本文档是技术娴熟的脆弱性研究人员和安全软件开发人员在该地区拥有广泛的背景。观众被认为是了解广泛的通用软件类型和协议,漏洞类型,它们相关的攻击,和失败的共同对策防止漏洞。

虽然术语仍然在发展,稳定和CWE内被广泛使用。

基本概念
基本概念

本节总结了目前形式脆弱性理论的重要概念。有些概念进一步阐述了在后面的部分。

产品、行为和资源

产品实现功能通过执行某些操作资源的行为。

  • 产品:一个软件包、协议设计、架构等。

  • 特点:该产品提供的主要功能。

  • 资源:一个实体使用、修改或提供的产品,比如内存、CPU、文件,饼干,新闻文章,或网络连接。万博下载包

  • 行为:一个动作,产品需要提供一个功能,或者一个动作,一个用户执行。

例如,FTP服务器可能有两个主要特点:

  • 上传文件

  • 下载文件

FTP服务器执行一个行为建立一个连接,它侦听传入的请求。当客户端连接到FTP服务器,服务器验证用户的身份(使用身份验证行为),那么也许会接受一个命令来下载资源(“检索”)一个文件。随后的行为包括:建立一个单独的数据连接来发送文件;转换的文件数据的内部表示表示类型指定的客户端;发送数据;并关闭数据连接。

操作和属性

一个行为对资源执行操作保存或修改属性。例如,base64编码操作可能会被应用到一个二进制文件,这样的文件可以作为ASCII处理;由此产生的编码的属性是“等价”的原始文件。

  • 属性:一个行为的安全相关的属性,数据,代码,或者资源,必须改变或保留在产品的操作。例如,用户输入可能最初包含任意内容。系统验证输入后只包含字母和数字,那么输入可能被视为有效的对房地产“字母”。If the input is fed into an SQL query, then it might have a property of "trusted" with respect to the property "contains no SQL syntax characters."

  • 操作:修改资源的行为,通常改变资源的属性。这是通常使用的软件,因为它操纵输入和系统资源以确保安全属性是强制执行的。它也可以被攻击者修改资源,以便他们没有预期的性能。

渠道、演员、角色和指令(卡)

在产品中,一个或多个演员扮演某些角色和执行指令触发行为。这些指令通道上发送。可能的组合的演员、角色和渠道形成一个拓扑。例如,最常见的拓扑结构是一个用户进程由攻击者可能通过一个通道(TCP端口80)连接到一个web服务被受害者,运行,用户给出了指令“我登录”并提供用户名和密码数据。

  • 演员:一个实体(产品、人或过程)与软件交互的或与其他实体,使用软件。类型的演员包括:用户、服务局外人,顾问(例如,DNS或半径),监控/观察者(如入侵检测、日志监控,调试器),中介(如防火墙、防病毒、代理)。一些实体可以包含多种类型的演员,如入侵保护系统监视攻击和终止连接时,如果发生可疑的东西。

  • 角色:一个行为或交互模式与一个特定的演员。角色包括受害者,攻击者、旁观者、共犯和管道。

  • 指令:请求、命令信号,或其他交互从一个上游演员通过一个通道到不同的下游演员(通常是一个产品),这通常会导致下游演员来执行所需的行为。指令的例子有“日志我作为一个用户,”“检索文件,”“改变权限”和“退出系统”。

  • 渠道:资源用于发送指令和数据之间的演员。有许多类型的渠道,包括:套接字,串口,信号(这是一个隐式通道),环境变量(隐通道),管道等。“备用通道”不是的主要渠道,但替代演员之间移动数据或指令的方法。例如,“粉碎”攻击使用另一个通道(内部Windows消息传递系统)而不是GUI。

  • 拓扑结构:在一个演员和角色行为之间的相互关系链。举个例子,在一个典型的基于web的SQL注入的场景中,一个用户(作为攻击者)发送的请求到一个web应用程序(作为管道)一个频道(TCP端口80)和web服务器发送一个SQL查询不同的频道数据库服务器(作为一个受害者)。

安全策略,控制球,和保护机制

该产品具有一个安全策略(目的或实现的),它定义了一个或多个控制球,指定允许哪些演员限制访问哪些资源或行为。保护机制是一组的行为是为了执行一个控制范围的边界,即。,保护产品(或其他演员)免受攻击。

  • 控制范围:资源的一组(可能为空)和行为都可以访问的一个演员,或一组演员,所有共享相同的安全限制。例如,博客管理项目可能有一个控制范围,允许发布新的博客条目的“管理员”,和一个单独的控制范围将允许“读者”阅读博客但不允许发布新条目。

  • 安全策略:规范的产品或用户定义一个或多个控制领域一个或多个角色。政策的一个例子可能是“/home/cwe/bin下只有管理员可以直接调用程序;只有通过身份验证的用户可以从/home/cwe/webroot读取文件。”The developer of the product has an INTENDED POLICY that dictates appropriate behaviors, resources, and properties. The product itself has an IMPLEMENTED POLICY, which is the code's implementation of the intended policy. Ideally, the intended and implemented policies are the same; otherwise, a vulnerability may exist.

  • 保护机制:一种行为或一组行为有助于目的强制执行安全策略的产品(或一个相关的演员)。这也被称为“控制”或“对策”在一些社区。保护机制的例子包括输入验证、白名单、黑名单,污染检查,堆栈溢出检测、等保护机制可能不同于安全特性,如身份验证、访问控制、加密、权限管理。机制可能是隐式或显式,根据层。例如,由编译器添加canary-based堆栈溢出保护,所以它是隐式的源代码层。如果源代码对XSS过滤器输出字符串,这是一个明确的保护机制。

攻击,后果,弱点和漏洞

虽然弱点CWE内更少的精确定义在这个阶段,一个更精确的定义是可用的,它使用从脆弱性理论概念。

  • 攻击:一个演员试图违反安全策略,即。访问行为或资源,旨在控制范围之外的演员。这通常是使用操作执行的资源或行为违反预期属性。攻击可能需要绕过一个保护机制。例如,一个客户访问一个网站可能试图访问管理脚本直接要求他们。

  • 攻击者:一个演员试图违反安全策略,即。,试图获得的行为或资源软件预期的控制范围之外的演员。

  • 结果:行为违反了安全策略。

  • 缺点:一种有可能允许攻击者的行为违反了安全策略,如果是容易被攻击者的行为。例如,一个无限strcpy()调用是一个弱点,因为它可能会受到缓冲区溢出攻击者是否能够提供一个输入大于输出缓冲区的缓冲区。

  • 漏洞:一组一个或多个相关弱点在特定软件产品或协议,允许访问资源或演员,演员的控制范围以外的行为,即。不提供适当的保护机制,执行控制范围。

链和复合材料

可以组合在一起,形成多个弱点链或复合材料。

  • 链:一个序列的两个或两个以上的独立的弱点,可以紧密联系在一起,形成一个漏洞。例如,当一个程序可能发生连锁遇到整数溢出(cwe - 190)在计算分配的内存数量,导致一个小缓冲区分配和导致缓冲区溢出(cwe - 120)。

  • 综合:结合两个或两个以上的独立的弱点,可以创建一个弱点,但前提是这些缺点同时发生。例如,一个符号链接后攻击包含几个组件的弱点包括文件名可预测性(cwe - 340),权限不足(cwe - 275),竞态条件(cwe - 362)。

分层和观点

资源、行为、属性、操作、通道、演员、和指令可以被描述为不同的抽象级别,或层。在某些情况下,软弱或脆弱的焦点取决于分析师的角度。

CWE内容团队相信理解与适当的弱点和漏洞可能会显著提高建模的分层和观点。然而,这是一个相对较新的概念,需要进一步调查。

目前有三个主要的层内定义脆弱性理论:

  • 系统层:资源包括内存、磁盘文件、和CPU;行为包括系统调用和流程执行。

  • 代码层:资源包括变量、结构、套接字、句柄、和字符串;行为包括作业、函数调用和异常处理。

  • 应用程序层:资源包括饼干、消息概要文件,标题,和数据库;行为包括存储数据、身份验证和发送消息。

在一层可以实现资源利用资源以较低的层。例如,一个应用程序层证书可能从code-layer套接字读取;发行人可能存储在一个code-layer字符串占用内存系统层。一个指向字符串的指针存储在一个code-layer变量。

行为层

分层可以适用于行为。考虑下面的C代码,用于一个有特权的程序。

/ *忽视组ID对于本例* /称作old_id = getuid ();setuid (0);AttachToPrivilegedDevice ();/ *cwe - 252(代码层),cwe - 273(应用层)* / setuid(称作old_id);文件名= GetUntrustedFilename ();WriteToFile(文件名,“Hello world”);

打算提高其特权的代码根访问一个特殊的设备,然后回到原来的用户ID的特权。然后写一个用户提供的文件名,并延缓到操作系统的权限检查,以确保用户可以写入指定的文件名。

在某些环境中,setuid失败有可能在某些情况下,比如PAM故障或超过限制的过程。因此,在代码中有一个弱点。

在代码层,弱点cwe - 252——一个不受控制的从函数返回值。但在应用程序层,函数是用来降的特权,所以cwe - 273也同样适用,检查了不当的特权。

演示代码:Bug桶
演示代码:Bug桶

为了说明行动中的脆弱性理论,下面的代码将用于随后的部分。这段代码包含至少10的弱点。

代码的目标功能是支持一个web页面,其中包含信息从不同的用户,如留言板或评论页面。代码从请求中提取MessageType参数(第2行),构造相关的文件名(3 - 5行),打开文件,(第6行),向请求者发送文件的每一行,只要它似乎并不包含任何脚本代码(第8行)。

Bug桶的例子

考虑到缺陷桶代码:

1 printf(" <标题>幸福的无知,Inc . < /名称>”);2 ftype = Get_Query_Param (“MessageType”);3拷贝字符串(帧,“/ home / cwe /”);4 strcat(帧,ftype);5 strcat(帧,“.dat”);6处理= fopen(帧,“r”);7时(fgets(线、512、处理)){8如果(strncmp(“<脚本>”,8)){9 printf(线);}}10返回(200);

一个简单的弱点和漏洞列表:

  • cwe - 120:经典的缓冲区溢出(2 - > 4 - > 10行)

  • CWE-23:相对路径遍历(2 - > 4 - > 6)

  • cwe - 79:未能保存网页结构(XSS) (7 - > 9)

  • cwe - 134:不受控制的格式字符串(7 - > 9)

  • cwe - 476:NULL指针(6 - > 7)

  • CWE-20:输入验证不当(2 & 8)

  • cwe - 116:不适当的编码或逃避的输出(7 - > 9)

  • cwe - 73:外部控制文件名或路径(2 - > 4 - > 6)

  • cwe - 404:资源关闭或不当发布(6 - > 10)

  • cwe - 252:检查返回值(2 - > 4 - > 6)

控制领域
控制领域

控制范围是一组资源和行为都可以访问的一个演员,或一组演员,所有共享相同的安全限制。这个设置可以是空的。

产品的安全策略通常会定义多个控制领域,尽管这一政策可能并不明确。例如,服务器可能定义几个领域:

  • 一个领域为“管理员”可以创建新用户帐户与/home/server/下的子目录

  • 第二个球覆盖的用户可以创建或删除文件在自己的子目录。

  • 第三个领域可能是“用户认证产品安装的操作系统。”This control might be implicitly defined through OS-layer permissions.

每个控制范围有不同的演员,资源,和允许的行为。

时可能引发的弱点和漏洞的边界控制范围不正确执行,或者当一个控制范围是定义的方式,允许更多的演员或资源比开发人员或系统运营商计划。例如,一个应用程序可能打算允许客人只在一个给定的用户访问文件目录,但路径遍历攻击可以允许访问该目录以外的文件,这是有意的控制范围之外的。

与控制相关的一些弱点领域包括:

  • cwe - 610在另一个球体外部控制的参考资源

    产品使用外部控制的名称或引用解析为一个资源预定的控制范围之外。

    这是一个高级的缺点,包括路径遍历和符号链接,因为可以更改文件名引用一个文件之外的一个目录。

  • cwe - 669不正确的资源领域之间的转移

    产品不正确将资源/行为转移到另一个领域,从另一个领域或进口资源/不当行为,意想不到的方式提供对资源的控制。

    这个高层的弱点包括无限制的文件上传等问题(cwe - 434)和下载的代码不完整性检查(cwe - 494)。在这些情况下,资源的转移是故意的。

  • cwe - 668曝光资源错误的球体

    产品暴露错误的控制范围的资源,提供意想不到的演员与不恰当的访问资源。

    这个高层的弱点包括信息泄露等问题cwe - 200)保护不足的凭证(cwe - 522对关键资源(),和不正确的权限分配cwe - 732)。

Bug桶的例子

考虑到缺陷桶代码:

1 printf(" <标题>幸福的无知,Inc . < /名称>”);2 ftype = Get_Query_Param (“MessageType”);3拷贝字符串(帧,“/ home / cwe /”);4 strcat(帧,ftype);5 strcat(帧,“.dat”);6处理= fopen(帧,“r”);7时(fgets(线、512、处理)){8如果(strncmp(“<脚本>”,8)){9 printf(线);}}10返回(200);

基于strcpy(3号线),程序员有一个预定的控制范围的外部请求只是为了被允许读取存储在文件“/ home / cwe / web文档根。与路径遍历(CWE-22),然而,“. ./ abc“从2号线将生成的文件名“/ home / abc。dat”——这是为了控制范围之外的。

Bug桶可能有另一个预定的控制范围中只有虫桶用户可以添加信息(通过独立的功能,在上面的代码中未见)。如果相关的消息文件人人可写的权限,那么任何本地用户可以修改信息文件来改变它的内容,而无需通过web界面。弱的权限定义了一个控制范围太广泛,因为它包括意想不到的演员(即。本地用户)。

预定的安全政策的错误桶也可能包括:“消息可能不包含任何脚本。”The associated control sphere might be "a user can only add a message that can contain boldface, italics, or underlined text." These requirements are not explicitly stated anywhere; it is implicit in the protection mechanism at line 8, which tries to strip