CWE

常见的弱点枚举

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

新CWE吗?点击这里!
CWE最重要的硬件的弱点
CWE最危险的弱点
>CWE前25名> 2009
ID

2009 CWE / SANS最危险的编程错误


注意:这是一个以前的版本的前25位。为最新版本在这里


manbetx客户端首页
版权©2009
http://cwe.mitre.org/top25/archive/2009/2009_cwe_sans_top25.html

文档版本:1.4 (pdf)

日期:2009年10月29日

项目协调员:

Bob Martin(斜方)
梅森布朗(无)
艾伦·佩拉(无)

文档编辑器:

史蒂夫Christey(斜方)
介绍
介绍

2009年CWE / SANS最危险的编程错误是最重要的编程错误,可以导致严重的软件漏洞。他们经常发生,常常容易找到,容易利用。他们是危险的,因为他们会经常允许攻击者完全接管软件,窃取数据,或者防止软件工作。

列表是SANS研究所之间的合作的结果,斜接,很多顶尖的软件安全专家在美国和欧洲。它利用经验的发展无排名前20位的攻击向量(http://www.sans.org/top20/)、斜方的共同弱点枚举(CWE) (http://cwe.mitre.org/)。斜方维护CWE网站,在美国国土安全部的支持的国家网络安全部门,提供详细描述的前25位为减轻和避免编程错误以及权威的指导。CWE网站还包含超过700个额外的编程错误,数据设计错误,和建筑的错误会导致可利用的漏洞。

排名前25位的列表的主要目标是停止漏洞在源通过教育程序员如何消除稀松平常的错误甚至软件发货之前。列表将教育和意识的工具,这将有助于程序员为了防止瘟疫软件行业的各种漏洞。消费者可以使用相同的软件列表,帮助他们寻求更安全的软件。最后,软件经理和首席信息官可以使用排名前25位的列表作为一个标尺的进步努力获得他们的软件。

表的内容
表的内容
前25名的简要清单
前25名的简要清单

前25名被组织成三个高级类别包含多个CWE条目。

安全组件之间的交互

这些弱点有关不安全的方式发送和接收数据之间单独的组件,模块,程序,进程,线程,或系统。

  • CWE-20:不当输入验证
  • cwe - 116:不适当的编码或逃避的输出
  • cwe - 89:未能保存SQL查询结构(SQL注入)
  • cwe - 79:未能保存网页结构(“跨站点脚本编制”)
  • cwe - 78:卫生处理不当使用特殊的元素在一个操作系统命令(OS命令注入)
  • cwe - 319:明文传输的敏感信息
  • cwe - 352:跨站点请求伪造(CSRF)
  • cwe - 362:竞争条件
  • cwe - 209:错误消息的信息泄漏

有风险的资源管理

这个类别中的弱点有关软件的方式不正确管理创建、使用、转让、或破坏重要系统资源。

多孔防御

这个类别中的弱点有关防守技术经常被误用,滥用,或仅仅是忽略。

建设和排名前25位的选择
建设和排名前25位的选择

排名前25位的列表发达在2008年底。大约40软件安全专家提供反馈,包括软件开发人员、扫描工具厂商安全顾问,政府代表和大学教授。表示是国际学生。几个中间版本被创建并提交评审人员名单之前完成。提供更多的细节排名前25位的过程页面

来帮助描述和优先级的条目在前25名,威胁模型开发确定攻击者有坚实的技术技能和决心足够投入一些时间攻击一个组织。提供了更多的细节附录B

弱点在前25名中选择使用两个主要标准:

  • 弱点患病率:频率并不发达的弱点出现在软件安全集成到软件开发生命周期(SDLC)。
  • 后果:利用一个弱点的典型的后果如果它存在,如意想不到的代码执行,数据丢失,或拒绝服务。

患病率是决定基于估计从多个贡献者评选名单之列,因为适当的统计数据并不容易。

与这些标准,未来版本的排名前25位的发展覆盖不同的弱点。

看到附录A更多细节的选择标准。

组织的前25位
组织的前25位

为每个单独的弱点条目,提供的额外信息。主要的观众是为了软件程序员和设计师。

  • CWE ID和名称
  • 支持数据字段:补充弱点可能对决策者有用的信息进一步优化条目。
  • 讨论:短,非正式的讨论弱点的性质和它的后果。
  • 预防和缓解措施:开发人员可以采取的措施来减轻或消除弱点。开发人员可以选择一个或多个这些变化以适应自己的需要。注意,这些技术的有效性不同,和多种技术可能更大的深度防护相结合。
  • 相关的连续波:其他CWE条目相关的前25名的弱点。注意:这个清单是说明性的,而不是全面的。
  • 相关的攻击模式:CAPEC条目攻击可能成功地进行了反对的弱点。注意:不一定是完整的列表。

其他支持数据字段

每个排名前25位的条目包括支持数据字段的弱点患病率和后果。每个条目还包括以下数据字段。

  • 攻击频率:频率的缺点出现在漏洞被攻击者利用。
  • 易于检测:攻击者很容易找到这个弱点。
  • 修复成本:所需的努力修复的弱点。
  • 攻击者意识:攻击者的可能性将会意识到这个缺点,为检测方法,开发的方法。

看到附录A为更多的细节。

安全组件之间的交互
CWE-20:不当输入验证
总结
弱点患病率 后果 代码执行
拒绝服务
数据丢失
修复的成本 方便检测 容易困难
攻击频率 经常 攻击者的意识
讨论

它是健康的头号杀手软件,所以你只是自找麻烦如果你不确保输入符合预期。例如,一个标识符,你期望数字永远不应该包含字母。一辆新车的价格也不应该被允许美元,甚至在今天的经济。应用程序通常比这些简单的例子有更复杂的验证要求。不正确的输入验证可以导致漏洞当攻击者可以修改他们的输入以意想不到的方式。今天的许多最常见的漏洞可以被消除,或者至少减少,使用适当的输入验证。

…查看完整的技术细节

预防和缓解措施
架构和设计 使用一个输入验证框架如Struts或OWASP ESAPI验证API。如果你使用Struts,注意缺陷由cwe - 101类别。
架构和设计 理解所有潜在的地区不受信任的输入可以输入软件:参数或参数,饼干,任何从网络读取环境变量,请求头以及内容,URL组件、电子邮件、文件、数据库、和任何外部系统向应用程序提供数据。在定义良好的接口执行输入验证。
架构和设计 假设所有的输入是恶意的。使用一个“接受已知的好”(即输入验证策略。使用白名单)。拒绝任何不严格符合规范的输入,或将其转换为一些。使用黑名单拒绝任何意想不到的输入和检测潜在攻击。
使用一个标准的输入验证机制来验证所有输入的长度,类型,语法,和业务规则在接受输入之前进行进一步处理。作为业务规则逻辑的一个例子,在语法上“船”可能是有效的,因为它只包含字母数字字符,但它不是有效的如果你期望的颜色,如“红”或“蓝色”。
架构和设计 对于任何一个在客户端执行安全检查,确保这些检查复制在服务器端,为了避免cwe - 602。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。
即使客户端对服务器端安全检查提供最小的好处,他们仍然有用。首先,他们可以支持入侵检测。如果服务器接收输入,应该已经被客户拒绝,那么它可能是一个攻击的迹象。第二,客户端错误检查可以提供有用的反馈给用户预期的有效输入。第三,可能会有意外的服务器端处理时间的减少输入错误,虽然这通常是一个小的储蓄。
架构和设计 不完全依赖黑名单验证检测恶意输入或输出(cwe - 184)进行编码。有太多的方法编码相同的字符,所以你可能会错过一些变异。
实现 当应用程序结合来自多个数据源的数据,执行验证来源之后的总和。单个数据元素可以通过验证步骤但是违反限制后的总和。
实现 特别注意验证输入调用代码,跨越语言边界时,如从本机代码的解释型语言。这将创建一个意想不到的语言边界之间的交互。确保你没有违反任何期望的语言接口。例如,尽管Java可能不是容易缓冲区溢出,提供一个大型参数调用本地代码可能会触发一个溢出。
实现 直接输入类型转化为预期的数据类型,比如使用一个转换函数将一个字符串转换为一个数字。预期的数据类型转换后,确保输入的值在许用值的预期范围,包含多个字段的一致性维护。
实现 输入应该解码和规范化应用程序当前的内部表示之前验证(cwe cwe - 180 - 181)。确保您的应用程序不会无意中解码相同的输入(cwe - 174)的两倍。这些错误可以用来绕过白名单机制通过引入危险的输入后检查。使用库如OWASP ESAPI规范化控制。
考虑执行重复的规范化,直到输入不会改变。这将避免double-decoding和类似的场景,但它可能无意中修改输入,允许包含正确编码危险的内容。
实现 当组件之间交换数据,确保组件都使用相同的字符编码。确保适当的编码应用于每个接口。时显式地设置您所使用的编码协议允许你这样做。
测试 使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。
测试 使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
相关的连续波
cwe - 184 不完整的黑名单
cwe - 74 注射
cwe - 79 跨站点脚本(XSS)
cwe - 89 SQL注入
cwe - 95 Eval注入
相关的攻击模式

CAPEC-IDs:(查看所有)
3,7,8,9,10,13,14,18,22,24,28,31日,32,42,43,45,46,47,52,53,63年,64年,66年,67年,71年,72年,73年,78年,79年,80年,81年,83年,85年,86年,88年,91年,99年,101年,104年,106年,108年,109年,110年

cwe - 116:不适当的编码或逃避的输出
总结
弱点患病率 后果 代码执行
数据丢失
修复的成本 方便检测 容易温和
攻击频率 经常 攻击者的意识
讨论

电脑有一个奇怪的习惯做你说什么,而不是你的意思。输出编码不足常兄弟可怜的输入验证,但它是最喷射攻击的根源,这是最近风靡一时。攻击者可以修改命令,你打算发送给其他组件,可能导致一个完整的应用程序的妥协,更不用说其他组件暴露在攻击,攻击者将无法直接启动。“做我的意思”变成“攻击者说什么。”When your program generates outputs to other components in the form of structured messages such as queries or requests, it needs to separate control information and metadata from the actual data. This is easy to forget, because many paradigms carry data and commands bundled together in the same stream, with only a few special characters enforcing the boundaries. An example is Web 2.0 and other frameworks that work by blurring these lines. This further exposes them to attack.

…查看完整的技术细节

预防和缓解措施
架构和设计 使用语言、库或框架,使其更容易生成正确编码输出。
例子包括ESAPI编码控制。
交替,使用内置函数,但考虑使用包装器,以防这些功能被发现有漏洞。
架构和设计 如果可用,使用结构化机制自动执行数据和代码之间的分离。这些机制可以提供相关的引用,编码,自动验证,而不是依赖于开发人员提供此功能在每一个点生成输出。
例如,存储过程可以执行数据库查询结构和减少SQL注入的可能性。
架构和设计 理解的上下文将使用您的数据编码,将预期。这是特别重要的不同组件之间传送数据的时候,或者当生成输出可以包含多个编码同时,如web页面或多部分邮件。研究所有预期的通信协议以及数据表现方式来决定所需要的编码策略。
架构和设计 在某些情况下,输入验证可能是一个重要的战略输出编码并不是一个完整的解决方案。例如,你可能会提供相同的输出,将加工由多个消费者使用不同的编码或陈述。在其他情况下,您可能需要允许用户提供的输入包含控制信息,如有限支持格式化的HTML标记在wiki或公告栏。当这种类型的需求必须满足,使用非常严格的限制控制序列可以使用白名单。确认由此产生的句法结构是你所希望的。使用普通的编码方法的其余部分输入。
架构和设计 使用输入验证作为深度防护措施来减少输出编码错误的可能性(见CWE-20)。
需求 完全指定哪些编码所需的组件,将彼此间的通信。
实现 当组件之间交换数据,确保组件都使用相同的字符编码。确保适当的编码应用于每个接口。时显式地设置您所使用的编码协议允许你这样做。
测试 使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。
测试 使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
相关的连续波
cwe - 74 注射
cwe - 78 操作系统命令注入
cwe - 79 跨站点脚本(XSS)
cwe - 88 参数注入
cwe - 89 SQL注入
cwe - 93 CRLF注入
相关的攻击模式

CAPEC-IDs:(查看所有)
18,63年,73年,81年,85年,86年,104年

cwe - 89:卫生处理不当的特殊元素中使用一个SQL命令(SQL注入)
总结
弱点患病率 后果 数据丢失
安全绕过
修复的成本 方便检测 容易
攻击频率 经常 攻击者的意识
讨论

这些天,似乎软件都是关于数据:到数据库,从数据库中拉,按摩到信息,并将其发送给其他地方为了好玩和利润。如果攻击者可以影响SQL,您使用与数据库通信,然后他们可以做令人不快的事情,他们得到所有的乐趣和利润。如果您使用SQL查询认证等安全控制,攻击者可能会改变这些查询的逻辑绕过安全。他们可以修改查询来偷,腐败,或者改变你的基础数据。他们甚至会偷一次一个字节的数据如果他们,和他们有耐心和知识。

…查看完整的技术细节

预防和缓解措施
架构和设计 使用语言、库或框架,使其更容易生成正确编码输出。
例如,考虑使用持久性层如Hibernate或Enterprise Java bean,它可以提供重要的防止SQL注入如果使用得当。
架构和设计 如果可用,使用结构化机制自动执行数据和代码之间的分离。这些机制可以提供相关的引用,编码,自动验证,而不是依赖于开发人员提供此功能在每一个点生成输出。
过程使用预处理语句的SQL查询,参数化查询或存储过程。这些特性应该接受和支持强类型参数或变量。不能动态地构建和执行查询字符串内使用“执行”或类似的功能,这些功能你可能重新引入SQL注入的可能性。
架构和设计 遵循最小特权原则在创建SQL数据库用户帐户。数据库用户应该只有必要的最低特权使用他们的帐户。如果系统的需求表明,用户可以阅读和修改自己的数据,然后限制他们的特权,所以他们不能读/写别人的数据。尽可能使用最严格的权限对所有数据库对象,例如execute-only存储过程。
架构和设计 对于任何一个在客户端执行安全检查,确保这些检查复制在服务器端,为了避免cwe - 602。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。
实现 如果你需要使用动态生成的查询字符串尽管风险,使用适当的编码和逃避的输入。而不是建立自己的实现,这些特性可用的数据库或编程语言。例如,Oracle DBMS_ASSERT包可以检查或强制参数有一定的属性,使他们更容易受到SQL注入。对于MySQL, mysql_real_escape_string () API函数可用于C和PHP。
实现 假设所有的输入是恶意的。使用一个“接受已知的好”(即输入验证策略。使用白名单)。拒绝任何不严格符合规范的输入,或将其转换为一些。使用黑名单拒绝任何意想不到的输入和检测潜在攻击。
使用一个标准的输入验证机制来验证所有输入的长度,类型,语法,和业务规则在接受输入之前进行进一步处理。作为业务规则逻辑的一个例子,在语法上“船”可能是有效的,因为它只包含字母数字字符,但它不是有效的如果你期望的颜色,如“红”或“蓝色”。
当构造SQL查询字符串,使用严格的白名单,限制字符集基于请求中的参数的期望值。这将间接限制的范围攻击,但这种技术没有适当的重要输出编码和逃避。
注意,适当的输出编码、逃避和引用防止SQL注入的是最有效的解决方案,尽管输入验证可能提供一些深度防护。这是因为它有效地限制了将出现在输出。输入验证不会总是阻止SQL注入,尤其是如果您需要支持自由格式的文本字段可以包含任意字符。例如,”O ' reilly”这个名字可能会通过验证步骤,因为它是一种常见的英语姓氏。但是,它不能直接插入到数据库,因为它包含了““撇号的角色,这将需要转义或以其他方式处理。在这种情况下,剥离撇号可能减少SQL注入的风险,但是它会产生不正确的行为,因为错误的名字将被记录下来。
在可行的情况下,它可能是最安全的完全禁止元字符,而不是逃避它们。这将提供一些深度防御。数据进入数据库后,后来过程可能忽视逃避元字符前使用,,你可能没有控制这些流程。
测试 使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。
测试 使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
操作 使用应用程序防火墙,可以检测到攻击这个弱点。这也不可能捕捉到所有攻击,它可能需要一些定制的努力。然而,它可以是有益的情况下,代码不能固定(因为它是由第三方控制),作为一项紧急预防措施,更全面的软件保证措施被应用,或者提供深度防御。
相关的连续波
cwe - 564 SQL注入:冬眠
cwe - 566 访问控制旁路通过用户控制SQL主键
cwe - 619 光标注入
cwe - 90 LDAP注入
相关的攻击模式

CAPEC-IDs:(查看所有)
7,66年,108年,109年,110年

cwe - 79:未能保存网页结构(“跨站点脚本编制”)
总结
弱点患病率 后果 代码执行
安全绕过
修复的成本 方便检测 容易
攻击频率 经常 攻击者的意识
讨论

跨站点脚本(XSS)是一种最普遍、最顽固,和危险的漏洞在web应用程序中。这是几乎不可避免的,当你把HTTP无状态的本质,数据和脚本的混合物在HTML中,很多网站之间的数据传递,不同的编码方案,和功能丰富的web浏览器。如果你不小心,攻击者可以注入Javascript或其他browser-executable内容应用程序生成一个web页面。然后由其他用户访问网页,浏览器的执行恶意脚本好像来自你(因为,毕竟,它* *来自你)。突然,你的网站是你没有写的代码。攻击者可以使用各种技术来获得直接输入到您的服务器,或者使用一个不知情的受害者的中间人技术版本的“你为什么一直打自己?”游戏。

…查看完整的技术细节

预防和缓解措施
架构和设计 使用语言、库或框架,使其更容易生成正确编码输出。
例子包括微软的Anti-XSS图书馆,OWASP ESAPI编码模块,和Apache Wicket。
架构和设计 对于任何一个在客户端执行安全检查,确保这些检查复制在服务器端,为了避免cwe - 602。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。
实现 理解的上下文将使用您的数据编码,将预期。这是特别重要的不同组件之间传送数据的时候,或者当生成输出可以包含多个编码同时,如web页面或多部分邮件。研究所有预期的通信协议以及数据表现方式来决定所需要的编码策略。
任何数据,输出到另一个网页,特别是收到任何数据从外部输入,使用适当的编码在所有非字母数字的字符。这个编码将取决于是否输出HTML的身体的一部分,元素属性,uri, JavaScript部分,层叠样式表等。注意HTML实体编码只适合身体的HTML。
实现 使用和指定一个强大的字符编码,如iso - 8859 - 1或utf - 8。如果不指定一个编码,web浏览器可能会选择不同的编码通过猜测哪些编码实际上是使用的web页面。这个可以打开你微妙的XSS攻击相关的编码。看到cwe - 116更多的移植相关编码/逃离。
实现 使用Struts,你应该写所有的数据表单bean与bean的过滤器属性设置为true。
实现 帮助减轻XSS攻击用户的会话cookie, HttpOnly设置会话cookie。在浏览器支持HttpOnly特性(比如最近版本的Internet Explorer和Firefox),这个属性可以防止用户的会话cookie访问恶意使用。com的客户端脚本。这不是一个完整的解决方案,因为HttpOnly不是所有浏览器都支持的。更重要的是,XMLHTTPRequest和其他强大的浏览器技术提供读访问HTTP头信息,包括set - cookie HttpOnly标志设置的标题。
实现 假设所有的输入是恶意的。使用一个“接受已知的好”(即输入验证策略。使用白名单)。拒绝任何不严格符合规范的输入,或将其转换为一些。使用黑名单拒绝任何意想不到的输入和检测潜在攻击。
使用一个标准的输入验证机制来验证所有输入的长度,类型,语法,和业务规则在接受输入之前进行进一步处理。作为业务规则逻辑的一个例子,在语法上“船”可能是有效的,因为它只包含字母数字字符,但它不是有效的如果你期望的颜色,如“红”或“蓝色”。
当动态地构建web页面,使用严格的白名单,限制字符集基于请求中的参数的期望值。所有输入都应该验证和洁净,不仅仅是用户应该指定参数,但请求中所有数据,包括隐藏字段,饼干,标题、URL本身,等等。一个常见的错误导致持续的XSS漏洞仅是验证字段将被显示的网站。通常看到的数据请求所反映的应用服务器或应用程序开发团队没有预料到。一个字段,目前不是反映未来的开发人员可以使用。因此,建议验证HTTP请求的所有部分。
注意,适当的输出编码、逃避和防止XSS的引用是最有效的解决方案,尽管输入验证可能提供一些深度防护。这是因为它有效地限制了将出现在输出。输入验证不会总是防止XSS,尤其是如果您需要支持自由格式的文本字段可以包含任意字符。例如,在一个聊天应用程序,心表情符号(< 3)可能会通过验证步骤,因为它是常用的。但是,它不能直接插入到web页面,因为它包含了“<”性格,这需要转义或以其他方式处理。在这种情况下,剥离“<”可能降低XSS的风险,但它会产生不正确的行为,因为表情符号不会被记录下来。这可能似乎是一个小小的不便,但更重要的在一个数学论坛,想代表不平等。
即使你犯了一个错误在你的验证(如100年忘记一个输入字段),适当的编码仍可能会保护你免受喷射的攻击。只要不是做隔离,输入验证仍然是一个有用的技术,因为它可能会大大降低你的攻击面,让你发现一些攻击,并提供其他安全的好处,适当的编码并没有解决。
确保您在应用程序中定义良好的接口执行输入验证。这将有助于保护应用程序即使某个组件的重用或搬地方了。
测试 使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。
测试 使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
测试 使用XSS备忘单(见参考资料)推出各种各样的攻击您的web应用程序。备忘单包含很多微妙的XSS变异是专门针对弱XSS防御。
操作 使用应用程序防火墙,可以检测到攻击这个弱点。这也不可能捕捉到所有攻击,它可能需要一些定制的努力。然而,它可以是有益的情况下,代码不能固定(因为它是由第三方控制),作为一项紧急预防措施,更全面的软件保证措施被应用,或者提供深度防御。
相关的连续波
cwe - 692 跨站点脚本编制不完整的黑名单
cwe - 82 未能清理脚本在IMG标记在一个Web页面的属性
cwe - 85 翻了一番个性XSS操作
cwe - 87 未能清洁替代XSS语法
相关的攻击模式

CAPEC-IDs:(查看所有)
19,32,85年,86年,91年

cwe - 78:卫生处理不当使用特殊的元素在一个操作系统命令(OS命令注入)
总结
弱点患病率 媒介 后果 代码执行
修复的成本 媒介 方便检测 容易
攻击频率 经常 攻击者的意识
讨论

你的软件通常是一个局外人在网络之间的桥梁,您的操作系统的内部。当您调用另一个程序上的操作系统,但你让不受信任的输入输入的命令字符串生成的执行计划,那么你就邀请攻击者穿过那座桥到土地财富的执行自己的命令,而不是你的。

…查看完整的技术细节

预防和缓解措施
架构和设计 如果可能的话,使用库调用而不是外部流程重建所需的功能。
架构和设计 运行您的代码在一个“监狱”或类似沙箱环境,执行严格的流程和操作系统之间的边界。这可能有效地限制哪些命令可以执行的软件。
例子包括Unix chroot监狱和AppArmor对。在一般情况下,托管代码可能会提供一些保护。
这可能不是一个可行的解决方案,它只限制对操作系统的影响;应用程序的其余部分可能仍然接受妥协。
应该注意避免cwe - 243和相关弱点监狱。
架构和设计 对于任何数据将被用来生成一个命令执行,让尽可能多的数据的外部控制。例如,在web应用程序中,这可能需要本地存储命令在会话的状态而不是向客户机发送出来在一个隐藏的表单字段。
架构和设计 使用语言、库或框架,使其更容易生成正确编码输出。
例子包括ESAPI编码控制。
实现 正确引用参数和任何特殊字符转义在这些参数。如果仍然需要一些特殊字符,包装报价的参数,和所有其他字符转义,不通过严格的白名单。小心论证注入(cwe - 88)。
实现 如果要执行的程序允许参数被指定在一个输入文件或标准输入,那么考虑使用模式传递参数,而不是命令行。
实现 如果可用,使用结构化机制自动执行数据和代码之间的分离。这些机制可以提供相关的引用,编码,自动验证,而不是依赖于开发人员提供此功能在每一个点生成输出。
一些语言提供多种功能,可用于调用命令。在可能的情况下,识别任何函数调用命令shell使用一个字符串,并替换函数,需要个人参数。这些函数通常执行适当的引用和过滤参数。例如,在C语言中,系统()函数接受一个字符串,该字符串包含整个执行命令,而execl (), execve(),和其他需要一个字符串数组,每个参数。在Windows中,CreateProcess()只接受一个命令。在Perl中,如果系统()提供了一组参数,那么它将引用的每个参数。
实现 假设所有的输入是恶意的。使用一个“接受已知的好”(即输入验证策略。使用白名单)。拒绝任何不严格符合规范的输入,或将其转换为一些。使用黑名单拒绝任何意想不到的输入和检测潜在攻击。
使用一个标准的输入验证机制来验证所有输入的长度,类型,语法,和业务规则在接受输入之前进行进一步处理。作为业务规则逻辑的一个例子,在语法上“船”可能是有效的,因为它只包含字母数字字符,但它不是有效的如果你期望的颜色,如“红”或“蓝色”。
当构建操作系统命令字符串,使用严格的白名单限制字符集基于请求中的参数的期望值。这将间接限制的范围攻击,但这种技术没有适当的重要输出编码和逃避。
注意,适当的输出编码、逃避和引用是防止OS命令注入最有效的解决方法,尽管输入验证可能提供一些深度防护。这是因为它有效地限制了将出现在输出。输入验证不会总是阻止OS命令注入,尤其是当你需要支持自由格式的文本字段可以包含任意字符。例如,当调用一个邮件程序中,您可能需要允许主题字段包含危险输入”;“和”>“字符,否则需要转义或处理。在这种情况下,剥离的字符可能会降低OS命令注入的风险,但是它会产生不正确的行为,因为主题字段将不会记录为用户的目的。这可能似乎是一个小小的不便,但它可能是更重要的是当程序依赖于结构良好的主题行,以将消息传递给其他组件。
即使你犯了一个错误在你的验证(如100年忘记一个输入字段),适当的编码仍可能会保护你免受喷射的攻击。只要不是做隔离,输入验证仍然是一个有用的技术,因为它可能会大大降低你的攻击面,让你发现一些攻击,并提供其他安全的好处,适当的编码并没有解决。
测试 使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。
测试 使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
操作 运行代码的一个执行自动的环境污染传播,防止使用受污染的任何命令执行变量,比如Perl的“t”开关。这将迫使你执行验证步骤,消除污染,尽管你必须小心正确验证您的输入,这样你就不会意外危险的输入标记为未染污的(见cwe - 183和cwe - 184)。
操作 使用运行时策略实施来创建一个允许命令的白名单,然后避免使用任何命令,不出现在白名单中。技术,如AppArmor对可用。
系统配置 分配权限的软件系统阻止用户访问/开放特权文件。运行应用程序权限最低的可能的(cwe - 250)。
相关的连续波
cwe - 88 参数注入
相关的攻击模式

CAPEC-IDs:(查看所有)
6,15,43,88年,108年

cwe - 319:明文传输的敏感信息
总结
弱点患病率 媒介 后果 数据丢失
修复的成本 媒介 方便检测 容易
攻击频率 有时 攻击者的意识
讨论

如果你的软件通过网络发送敏感信息,如私人数据或身份验证凭证,在途信息横跨许多不同的节点到它的目的地。攻击者可以嗅这些数据正确的线,它不需要很多的努力。所有他们需要做的就是控制一个节点最终目的地的路径,控制任何节点在同一网络的交通节点,或插入一个可用的接口。试图使交通使用Base64等计划和URL编码不能提供任何保护,;这些编码规范通信,而不是忙于数据不可读。

…查看完整的技术细节

预防和缓解措施
架构和设计 加密的数据可靠传输之前加密方案。
实现 使用与SSL web应用程序时,使用SSL整个会话登录,注销,不仅对初始登录页面。
测试 使用工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。
测试 使用监控工具,检查软件的流程与操作系统交互和网络。这种技术的情况很有用的源代码不可用,如果软件并不是由你,或者如果你想验证构建阶段并没有引入任何新的弱点。例子包括调试器直接附加到正在运行的进程;系统调用跟踪实用程序,如桁架(Solaris)和strace (Linux);系统活动监视器如FileMon、RegMon、过程监控、和其他的Sysinternals工具(Windows);嗅探器和协议分析,监控网络流量。
把监控过程中,触发功能,发送数据,并寻找常见的加密函数的存在与否在调用树。监控网络和确定数据包包含可读命令。工具检测是否在使用特定的编码。如果交通包含高熵,这可能表明使用加密。
操作 将服务器配置为使用加密的通信渠道,其中可能包括SSL或其他安全协议。
相关的连续波
cwe - 312 明文存储的敏感信息
cwe - 614 敏感的饼干在HTTPS会话没有“安全”属性
相关的攻击模式

CAPEC-IDs:(查看所有)
65年,102年

cwe - 352:跨站点请求伪造(CSRF)
总结
弱点患病率 后果 数据丢失
代码执行
修复的成本 方便检测 温和的
攻击频率 经常 攻击者的意识 媒介
讨论

你知道比在机场接受一个陌生人的一个包。它可能包含危险的内容。另外,如果出了任何差错,那么它会看起来好像是你做的,因为你的包当你登机。跨站点请求伪造就是这样奇怪的包,除了攻击者技巧用户进入你的网站的激活请求。由于脚本和web的工作方式在一般情况下,用户可能不知道请求被发送。但是一旦请求到达服务器,它看起来好像来自用户,而不是攻击者。这可能似乎不是一件大事,但攻击者已经基本上伪装合法用户获得了所有潜在的用户访问。这一点尤其方便当用户有管理员权限,从而产生一个完整的应用程序的功能的妥协。当结合XSS,可以广泛的和毁灭性的结果。如果你听说过XSS蠕虫蜂拥到非常大的网站在几分钟内,通常CSRF喂养它们。

…查看完整的技术细节

预防和缓解措施
架构和设计 使用anti-CSRF包如OWASP CSRFGuard。
实现 确保您的应用程序是免费的跨站点脚本问题(cwe - 79),因为大多数CSRF防御可以绕过使用attacker-controlled脚本。
架构和设计 生成唯一nonce对于每一个形式,把临时的形式,并验证表单的nonce收到。确保nonce没有可预测的(cwe - 330)。
请注意,这可以绕过使用XSS (cwe - 79)。
架构和设计 确定特别危险操作。当用户执行一个危险的操作时,发送一个单独的确认请求,以确保用户要执行该操作。
请注意,这可以绕过使用XSS (cwe - 79)。
架构和设计 使用“double-submitted饼干”方法被法尔顿和西。
请注意,这可能可以绕过使用XSS (cwe - 79)。
架构和设计 使用ESAPI会话管理控制。
这种控制包括CSRF的组件。
架构和设计 不要使用GET方法触发状态改变的任何请求。
实现 检查HTTP引用页头是否起源于一个预期的页面请求。这可能破坏合法功能,因为用户或代理可能会禁用发送推荐人原因隐私。
请注意,这可以绕过使用XSS (cwe - 79)。攻击者可以使用XSS来生成一个推荐人,或者生成一个恶意请求一个页面的引用页将被允许。
测试 使用工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。
使用OWASP CSRFTester识别潜在的问题。
相关的连续波
cwe - 346 起源验证错误
cwe - 441 意想不到的代理/中介
相关的攻击模式

CAPEC-IDs:(查看所有)
62年,111年

cwe - 362:竞争条件
总结
弱点患病率 媒介 后果 拒绝服务
代码执行
数据丢失
修复的成本 中等到高 方便检测 温和的
攻击频率 有时 攻击者的意识
讨论

交通事故发生时,两辆车试图使用相同的资源在几乎相同的时间,即。,同样的路的一部分。竞争条件在你的软件没有多大区别,除了攻击者有意识地想要利用他们造成混乱或让您的应用程序咳出一些有价值的东西。在许多情况下,竞态条件可以包括多个进程中,攻击者完全控制一个过程。即使竞争条件发生在多个线程之间,攻击者可能会影响当一些线程执行。竞态条件你唯一的安慰是数据损坏和拒绝服务是常态。可靠的代码执行的技术还没有被开发出来,。至少不是对某些种类的竞态条件。小小的安慰。可以局部或全局的影响,取决于竞争条件影响,如状态变量或安全逻辑,无论是发生在多个线程,进程或系统。

…查看完整的技术细节

预防和缓解措施
架构和设计 在支持它的语言,使用同步原语。只有将这些在关键代码尽量减少对性能的影响。
架构和设计 使用线程安全的功能,比如数据访问抽象在春天。
架构和设计 减少使用共享资源,从而消除尽可能多的复杂控制流和减少意外情况的发生的可能性。
此外,这将减少同步的必要,甚至可能有助于减少的可能性的拒绝服务攻击者可能会多次触发临界段(cwe - 400)。
实现 使用多线程时,只使用线程安全的共享变量的函数。
实现 使用共享变量的原子操作。警惕看上去无害的构造像“x + +”。这实际上是非原子,因为它涉及一个读了写。
实现 使用互斥锁如果可用,但一定要避免等相关弱点cwe - 412。
实现 避免双重检查锁定(cwe - 609)和其他实现错误当试图避免出现同步的开销。
实现 禁用中断或信号在代码的关键部分,也是确保代码没有进入一个大型或无限循环。
实现 使用volatile类型修饰符为关键变量来避免意外的编译器优化或重新排序。这并不一定解决同步问题,但它可以帮助。
测试 压力测试软件通过调用它同时从大量的线程或进程,并寻找任何意想不到的行为的证据。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
插入断点或延迟相关代码语句之间人为地扩大竞争窗口,这样会更容易被发现。
测试 识别错误情况不太可能发生在正常使用和触发器。例如,在低内存条件下运行程序,运行特权或权限不足,中断一个事务之前完成,或禁用连接DNS等基本网络服务。监控软件为任何意想不到的行为。如果你触发一个未处理的异常或类似的错误被发现,由应用程序的环境中,它仍可能表明意想不到的条件并不是由应用程序本身。
相关的连续波
cwe - 364 信号处理器竞态条件
cwe - 366 在一个线程竞争条件
cwe - 367 Time-of-check分时(TOCTOU)竞态条件
cwe - 370 检查证书撤销的竞态条件
cwe - 421 在访问备用通道竞态条件
相关的攻击模式

CAPEC-IDs:(查看所有)
26,29日

cwe - 209:错误消息的信息泄漏
总结
弱点患病率 后果 数据丢失
修复的成本 方便检测 容易
攻击频率 经常 攻击者的意识
讨论

如果你使用的错误消息,然后他们可以披露秘密任何攻击者敢于滥用您的软件。秘密可以覆盖大范围的有价值的数据,包括个人身份信息(PII)认证证书和服务器配置。有时,他们看似无害的秘密,是方便用户和管理员,如您的软件的安装路径。即使是这些小秘密可以极大地简化更协调一致的攻击,产量更大的回报,这是在现实世界的攻击。这是一个关心你是否发送临时错误消息返回给用户或如果你永久记录在一个日志文件中。

…查看完整的技术细节

预防和缓解措施
实现 确保错误消息只包含最小的信息是有用的,他们的目标受众,并没有其他人。消息需要罢工之间的平衡过于神秘,不够的。他们应该不一定揭示的方法被用来确定错误。如此详细的信息可以帮助攻击者现在工艺的另一个攻击将通过验证过滤器。
如果必须跟踪错误在某些细节,捕捉他们的日志消息,但想想可能发生如果日志消息可以被攻击者。避免任何形式的记录高度敏感的信息,如密码。避免不一致的消息可能会意外地提示攻击者对内部状态,如用户名是否有效。
实现 内部处理异常和不显示错误可能包含敏感信息给用户。
构建和编译 调试信息不应使其进入生产。
测试 识别错误情况不太可能发生在正常使用和触发器。例如,在低内存条件下运行程序,运行特权或权限不足,中断一个事务之前完成,或禁用连接DNS等基本网络服务。监控软件为任何意想不到的行为。如果你触发一个未处理的异常或类似的错误被发现,由应用程序的环境中,它仍可能表明意想不到的条件并不是由应用程序本身。
测试 压力测试软件通过调用它同时从大量的线程或进程,并寻找任何意想不到的行为的证据。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
系统配置 可用的地方,配置环境少用详细的错误消息。例如,在PHP中,禁用display_errors设置在配置期间,或者在运行时使用error_reporting()函数。
系统配置 创建默认的错误页面或信息不泄露任何信息。
相关的连续波
cwe - 204 响应差异信息泄漏
cwe - 210 Product-Generated错误消息的信息泄漏
cwe - 538 文件和目录信息泄漏
相关的攻击模式

CAPEC-IDs:(查看所有)
7,54

有风险的资源管理
cwe - 119:未能限制操作的范围内一个内存缓冲区
总结
弱点患病率 后果 代码执行
拒绝服务
数据丢失
修复的成本 方便检测 容易温和
攻击频率 经常 攻击者的意识
讨论

缓冲区溢出是大自然母亲的小提醒,物理定律说:如果你想把更多的东西放到一个容器超过它所能容纳的量,你会搞得一团糟。几十年来C应用程序的祸害,缓冲区溢位已经消除。一个原因是,他们不只是使用strcpy()不正确,或不当检查你输入的长度。攻击和检测技术不断提高,今天的缓冲区溢位变异并不总是显而易见的起初甚至多看一眼。你可能认为你完全免疫缓冲区溢出,因为你在高级语言编写代码,而不是c,但什么是你最喜欢的“安全”语言的翻译写的吗?本机代码你叫呢?语言是什么操作系统的API编写的吗?互联网基础设施运行的软件怎么样?这么想的。

…查看完整的技术细节

预防和缓解措施
需求 使用一种语言功能,可以自动减轻或消除缓冲区溢出。
例如,执行自己的内存管理的多种语言,比如Java和Perl,不受缓冲区溢出。其他语言,比如Ada和c#,通常提供溢出保护,但保护由程序员可以禁用。
警惕,语言的接口本地代码仍有可能溢出,即使语言本身在理论上是安全的。
架构和设计 使用语言、库或框架,使其易于管理缓冲区没有超越自己的权限。
例子包括安全C字符串库(SafeStr)混乱和Viega Strsafe系列。图书馆从微软h。这些库提供的安全版本overflow-prone字符串处理函数。这不是一个完整的解决方案,因为许多缓冲区溢出是不相关的字符串。
构建和编译 使用功能或运行或编译软件扩展自动提供一个保护机制,减轻或消除缓冲区溢出。
例如,某些编译器和扩展提供自动缓冲区溢出检测机制,构建到编译后的代码。例子包括Microsoft Visual Studio / GS标志,Fedora / Red Hat FORTIFY_SOURCE GCC国旗,StackGuard, ProPolice。
这未必是一个完整的解决方案,因为这些机制只能检测某些类型的溢出。此外,缓冲区溢出攻击仍然可以导致拒绝服务,因为典型的反应是退出应用程序。
实现 程序员应该遵守以下规则当分配和管理他们的应用程序的内存:
仔细检查你的缓冲区一样大你指定。
当使用函数接受一个复制的字节数,如strncpy(),请注意,如果目的地缓冲区大小等于源缓冲区大小,不得NULL-terminate字符串。
检查缓冲边界如果调用这个函数在一个循环中,确保你不写过去的危险分配空间。
如果有必要,所有输入字符串截断合理长度之前他们复制和连接功能。
测试 使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。
测试 使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
操作 使用功能地址空间布局随机化(本)。这不是一个完整的解决方案。然而,它迫使攻击者猜测一个未知值,改变每一个程序执行。
操作 使用一个CPU和操作系统提供数据执行保护(NX)或其等价的。这不是一个完整的解决方案,因为缓冲区溢位可以用来覆盖附近的变量以危险的方式修改软件的状态。此外,它不能用于变为无效来情况下,代码是必需的。
相关的连续波
cwe - 120 经典的缓冲区溢出
cwe - 129 无节制的数组索引
cwe - 130 故障处理长度参数不一致
cwe - 131 不正确的缓冲区大小的计算
cwe - 415 双自由
cwe - 416 使用后免费
相关的攻击模式

CAPEC-IDs:(查看所有)
8,9,10,14,24,42,44,45,46,47,One hundred.

cwe - 642:外部控制临界状态的数据
总结
弱点患病率 后果 安全绕过
数据丢失
代码执行
修复的成本 媒介 方便检测 容易
攻击频率 经常 攻击者的意识
讨论

有很多方法可以存储用户状态数据没有数据库的开销。不幸的是,如果你将这些数据存储在一个地方,攻击者可以修改它,这也减少了开销对于一个成功的妥协。例如,数据可以存储在配置文件,配置文件,饼干,隐藏的表单字段,环境变量,注册表键,或其他地方,所有由攻击者可以修改。在无状态协议(如HTTP,某种形式的用户状态信息必须在每个请求,所以它是暴露于攻击者的必要性。如果你基于这些数据执行任何强调安全操作(如说明用户是管理员),然后你可以打赌,有人会修改数据为了欺骗你的应用程序做一些你没有意愿。

…查看完整的技术细节

预防和缓解措施
架构和设计 理解所有潜在的攻击者可以访问的位置。例如,一些程序员认为饼干和隐藏的表单字段由攻击者不能修改的,或者他们可能不会考虑到环境变量可以修改之前有特权的程序被调用。
架构和设计 不保持状态信息在客户端不使用加密和完整性检查,或者有一个机制在服务器端状态篡改。使用一个消息身份验证代码(MAC)算法,如散列消息验证码(HMAC)。应用这个对你必须公开的状态数据,可以保证数据的完整性,即。数据没有被修改。确保您使用一个算法强大的哈希函数(cwe - 328)。
架构和设计 仅在服务器端存储状态信息。确保系统明确地和明确地跟踪自己的状态和用户状态和为合法的状态转换规则定义。不允许任何应用程序用户以任何方式直接影响国家除了通过合法的行动导致状态转换。
架构和设计 无状态的协议(例如,HTTP,使用一个框架,为你保持状态。
例子包括ASP。网络视图状态和OWASP ESAPI会话管理功能。
小心提供政府支持的语言特性,因为这些可能是为了方便程序员提供,不得考虑安全。
架构和设计 对于任何一个在客户端执行安全检查,确保这些检查复制在服务器端,为了避免cwe - 602。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。
操作 如果您使用的是PHP配置您的应用程序,以便它不使用register_globals。在实现,开发应用程序,以便它不依赖于这个特性,但是小心实现register_globals的模拟cwe - 95等弱点,cwe - 621,和类似的问题。
测试 使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。
测试 使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
测试 使用工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。
相关的连续波
cwe - 472 外部控制Assumed-Immutable Web参数
cwe - 565 使用cookie的安全决策
相关的攻击模式

CAPEC-IDs:(查看所有)
21,31日,167年

cwe - 73:外部控制文件名或路径
总结
弱点患病率 后果 代码执行
数据丢失
修复的成本 媒介 方便检测 容易
攻击频率 经常 攻击者的意识
讨论

尽管数据经常使用交换文件,有时你不打算公开每个文件系统上而这样做。当你使用一个局外人的输入而构建一个文件名,由此产生的路径可以点以外的目的目录。攻击者可以将多个“. .”或相似的序列导致操作系统目录导航的限制。其他与攻击是由外部控制简化的文件名,例如符号链接后,导致应用程序读取或修改文件,攻击者不能直接访问。同样如果你的程序运行和提高特权和它接受文件名作为输入。如果你允许一个局外人指定任意URL,你会下载代码并执行它,你只是要求蠕虫。

…查看完整的技术细节

预防和缓解措施
架构和设计 文件名的集合是有限的或已知时,创建一个映射从一组固定的输入值(比如数字id)实际的文件名,并拒绝所有其他输入。例如,ID 1可以映射到“收件箱。txt”和ID 2可以映射到“profile.txt”。特性如ESAPI AccessReferenceMap提供此功能。
架构和设计 运行您的代码在一个“监狱”或类似沙箱环境,执行严格的流程和操作系统之间的边界。这可能有效地限制访问所有文件在一个特定的目录中。
例子包括Unix chroot监狱和AppArmor对。在一般情况下,托管代码可能会提供一些保护。
这可能不是一个可行的解决方案,它只限制对操作系统的影响;应用程序的其余部分可能仍然接受妥协。
应该注意避免cwe - 243和相关弱点监狱。
架构和设计 对于任何一个在客户端执行安全检查,确保这些检查复制在服务器端,为了避免cwe - 602。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。
实现 假设所有的输入是恶意的。使用一个“接受已知的好”(即输入验证策略。使用白名单)。拒绝任何不严格符合规范的输入,或将其转换为一些。使用黑名单拒绝任何意想不到的输入和检测潜在攻击。
对于文件名,使用严格的白名单,限制使用的字符集。如果可行,只允许一个“。”字符的文件名,以避免CWE-23等弱点,并排除目录分隔符“/”等,以避免CWE-36。使用白名单允许文件扩展名,这将有助于避免cwe - 434。
实现 使用一个内置的路径规范化功能(如realpath (C))产生规范版本的路径名,有效地消除了“. .”序列和符号链接(CWE-23 CWE-59)。
安装 作为较低权限的用户使用操作系统权限和运行限制范围的任何成功的攻击。
操作 如果您使用的是PHP配置您的应用程序,以便它不使用register_globals。在实现,开发应用程序,以便它不依赖于这个特性,但是小心实现register_globals的模拟cwe - 95等弱点,cwe - 621,和类似的问题。
测试 使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。
测试 使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
测试 使用工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。
相关的连续波
CWE-22 路径遍历
cwe - 434 不受限制的文件上传
CWE-59 链接后
cwe - 98 远程文件包含
相关的攻击模式

CAPEC-IDs:(查看所有)
13,64年,72年,76年,78年,79年,80年

cwe - 426:不受信任的搜索路径
总结
弱点患病率 后果 代码执行
修复的成本 媒介 方便检测 容易
攻击频率 很少 攻击者的意识
讨论

软件依赖于你,或其环境,提供一个搜索路径,让它知道它能找到关键资源如代码库或配置文件。如果攻击者控制的搜索路径,那么攻击者可以修改它指攻击者选择的资源。这使软件在错误的时间错误的资源的访问。同样的风险存在,如果一个搜索路径元素可能是攻击者控制,如当前工作目录。

…查看完整的技术细节

预防和缓解措施
架构和设计 硬编码你的搜索路径的一组known-safe值,或让他们由管理员在配置文件中指定的。不允许由外部方修改这些设置。应该注意避免等相关弱点cwe - 427和cwe - 428。
实现 当调用其他程序,这些程序使用完全限定路径名指定。
实现 清洁您的环境之前调用其他程序。这包括PATH环境变量LD_LIBRARY_PATH和其他设置识别代码库的位置,和任何特定于应用程序的搜索路径。
实现 使用前检查你的搜索路径,删除任何元素可能不安全,如当前工作目录或临时文件目录。
实现 使用其他功能需要显式路径。利用其他现成的函数,需要显式路径是一个安全的方式来避免这个问题。例如,系统用C()不需要完整路径自壳可以照顾它,虽然execl返回以后()和()需要一个完整路径。
测试 使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。
测试 使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
测试 使用工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。
测试 使用监控工具,检查软件的流程与操作系统交互和网络。这种技术的情况很有用的源代码不可用,如果软件并不是由你,或者如果你想验证构建阶段并没有引入任何新的弱点。例子包括调试器直接附加到正在运行的进程;系统调用跟踪实用程序,如桁架(Solaris)和strace (Linux);系统活动监视器如FileMon、RegMon、过程监控、和其他的Sysinternals工具(Windows);嗅探器和协议分析,监控网络流量。
把监控过程和寻找库函数和系统调用显示搜索路径时被使用。一个模式是当程序执行的多个访问相同的文件在不同的目录,但一再失败,直到找到正确的文件名。库调用,比如getenv()或他们的等效可以全面检查,看是否还有path-related变量被访问。
相关的连续波
cwe - 427 不受控制的搜索路径元素
cwe - 428 非上市搜索路径或元素
相关的攻击模式

CAPEC-IDs:(查看所有)
38

cwe - 94:未能控制生成的代码(代码注入)
总结
弱点患病率 媒介 后果 代码执行
修复的成本 方便检测 温和的
攻击频率 有时 攻击者的意识 媒介
讨论

为便于开发,有时你不能打败用几行代码使用大量的功能。更酷的当你管理动态代码。虽然很难否认的性感动态生成的代码,攻击者会发现,同样有吸引力。变成一个严重的脆弱性由未授权方直接调用您的代码时,如果外部输入会影响哪些代码被执行,或者恐怖的(恐怖)如果这些输入都是直接输入代码本身。的影响是显而易见的:你所有的代码都属于他们。

…查看完整的技术细节

预防和缓解措施
架构和设计 重构程序,这样你不需要动态生成的代码。
架构和设计 运行您的代码在一个“监狱”或类似沙箱环境,执行严格的流程和操作系统之间的边界。这可能有效地限制哪些代码可以执行的软件。
例子包括Unix chroot监狱和AppArmor对。在一般情况下,托管代码可能会提供一些保护。
这可能不是一个可行的解决方案,它只限制对操作系统的影响;应用程序的其余部分可能仍然接受妥协。
应该注意避免cwe - 243和相关弱点监狱。
实现 假设所有的输入是恶意的。使用一个“接受已知的好”(即输入验证策略。使用白名单)。拒绝任何不严格符合规范的输入,或将其转换为一些。使用黑名单拒绝任何意想不到的输入和检测潜在攻击。
减少代码注入的可能性,使用严格的白名单限制允许哪些构造。如果你是动态构建的代码调用一个函数,然后验证输入字母数字可能是不够的。攻击者可能仍然能够引用一个你不打算让危险的功能,如系统(),exec(),或退出()。
测试 使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。
测试 使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
操作 运行代码的一个执行自动的环境污染传播,防止使用受污染的任何命令执行变量,比如Perl的“t”开关。这将迫使你执行验证步骤,消除污染,尽管你必须小心正确验证您的输入,这样你就不会意外危险的输入标记为未染污的(见cwe - 183和cwe - 184)。
相关的连续波
cwe - 470 不安全的反射
cwe - 95 Eval注入
cwe - 96 静态代码注入
cwe - 98 远程文件包含
相关的攻击模式

CAPEC-IDs:(查看所有)
35,77年

cwe - 494:下载的代码没有完整性检查
总结
弱点患病率 媒介 后果 代码执行
修复的成本 中等到高 方便检测 温和的
攻击频率 很少 攻击者的意识
讨论

你不需要成为一个专家意识到,如果您下载代码并执行它,你相信这些代码的来源并不是恶意的。也许你只访问一个下载站点,你的信任,但攻击者可以执行各种各样的技巧来修改代码之前到达你。黑客下载网站,冒充DNS欺骗或缓存中毒,让系统重定向到一个不同的网站,甚至修改代码在运输途中穿过网络。这个场景甚至适用于案件中,下载并安装自己的更新自己的产品。当这种情况发生时,您的软件将会运行代码,它不期望,这是对你有害,但对攻击者。

…查看完整的技术细节

预防和缓解措施
实现 执行适当的正向和反向DNS查找检测DNS欺骗。这只是一个部分解决方案,因为它不会阻止你的代码被修改的托管站点或在运输途中。
架构和设计 加密传输之前代码与可靠的加密方案。
这只会是一个部分解决方案,因为它不会检测DNS欺骗,它不会阻止您的代码修改托管网站。
架构和设计 使用完整性检查传输代码。
如果你提供下载的代码,比如自动更新你的软件,然后使用加密签名为你下载代码并修改客户来验证签名。确保您的实现不包含cwe - 295, cwe - 320, cwe - 347,和相关的弱点。
使用代码签名Authenticode等技术。看到引用。
测试 使用工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。
测试 使用监控工具,检查软件的流程与操作系统交互和网络。这种技术的情况很有用的源代码不可用,如果软件并不是由你,或者如果你想验证构建阶段并没有引入任何新的弱点。例子包括调试器直接附加到正在运行的进程;系统调用跟踪实用程序,如桁架(Solaris)和strace (Linux);系统活动监视器如FileMon、RegMon、过程监控、和其他的Sysinternals工具(Windows);嗅探器和协议分析,监控网络流量。
把监控过程和嗅探网络连接。触发特性相关的产品更新或插件安装,这可能会迫使一个代码下载。监控当文件被下载和单独执行,或者如果他们否则读回的过程。寻找证据的密码库调用使用完整性检查。
相关的连续波
cwe - 247 依赖DNS查找在一个安全的决定
cwe - 292 相信自我报告的DNS名称
cwe - 346 起源验证错误
cwe - 350 不可信的反向DNS
相关的攻击模式

CAPEC-IDs:(查看所有)
184年,185年,186年,187年

cwe - 404:不当资源关闭或释放
总结
弱点患病率 媒介 后果 拒绝服务
代码执行
修复的成本 媒介 方便检测 容易温和
攻击频率 很少 攻击者的意识
讨论

当你宝贵的系统资源已达到临终时,你需要正确地处理它们。否则,您的环境将变得严重拥挤或污染。这适用于内存,文件,饼干,数据结构、会话、通信管道、等等。攻击者可以利用不当关闭维护控制这些资源后你以为你摆脱他们。这可能导致巨大的资源消耗,因为实际上没有被释放回系统。如果你不洗你的垃圾处置前,攻击者可能会筛选,寻找宝石的形式应该被敏感数据。他们还可以重用的资源,这似乎是正确的在一个“绿色”的世界里,除了在虚拟世界中,这些资源可能仍然具有重要的价值。

…查看完整的技术细节

预防和缓解措施
需求 使用一种语言功能,可以自动减轻或消除resource-shutdown弱点。
例如,语言(如Java、Ruby和Lisp执行垃圾收集自动释放内存的对象已经被收回。
实现 是一种很好的做法负责释放所有资源分配和符合你怎么没空闲内存的一个函数。如果你分配内存,你打算免费功能,完成后,你必须确保释放内存出口点的功能包括错误条件。
实现 内存应该分配/释放使用匹配函数如malloc / free,新/删除,新的[]/[]删除。
实现 当释放一个复杂对象或结构,确保您正确地处理组件,它的所有成员不仅仅是对象本身。
测试 使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
测试 压力测试软件通过调用它同时从大量的线程或进程,并寻找任何意想不到的行为的证据。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
测试 识别错误情况不太可能发生在正常使用和触发器。例如,在低内存条件下运行程序,运行特权或权限不足,中断一个事务之前完成,或禁用连接DNS等基本网络服务。监控软件为任何意想不到的行为。如果你触发一个未处理的异常或类似的错误被发现,由应用程序的环境中,它仍可能表明意想不到的条件并不是由应用程序本身。
相关的连续波
CWE-14 编译器的代码清除缓冲区
cwe - 226 敏感信息发布前未清偿
cwe - 262 不使用密码老化
cwe - 299 未能检查证书撤销
cwe - 401 内存泄漏
cwe - 415 双自由
cwe - 416 使用后免费
cwe - 568 没有super.finalize finalize()方法()
cwe - 590 免费的无效指针不是在堆上
相关的攻击模式

CAPEC-IDs:(查看所有)
118年,119年,125年,130年,131年

cwe - 665:不适当的初始化
总结
弱点患病率 媒介 后果 代码执行
数据丢失
修复的成本 方便检测 容易
攻击频率 有时 攻击者的意识
讨论

就像你应该开始你的一天和一个健康的早餐,适当的初始化有助于确保您的软件将运行没有晕倒在中间的一个重要事件。如果你不正确地初始化数据和变量,攻击者可能会为你做初始化,或提取敏感信息仍从先前的会话。当使用这些变量重要的安全操作,如作出认证决定,这样他们就可以被修改,绕过你的安全。不正确的初始化可以在任何地方发生,但它可能是最流行的在极少情况下导致代码无意中跳过初始化,比如掩盖错误。

…查看完整的技术细节

预防和缓解措施
需求 使用一种语言功能,可以自动减轻或消除缺陷相关的初始化。
例如,在Java中,如果程序员不显式初始化一个变量,然后代码可以产生一个编译时错误(如果变量是本地)或自动初始化变量的默认值变量的类型。在Perl中,如果没有执行显式的初始化,然后分配一个默认值undef,解释为0,假,或同等价值取决于上下文变量的访问。
架构和设计 识别所有的变量和数据存储,接收信息从外部来源,并应用输入验证以确保他们只是预期值初始化。
实现 显式初始化所有的变量和其他数据存储在声明或在第一次使用。
实现 密切关注复杂的条件,影响初始化,因为一些条件可能不执行初始化。
实现 避免竞态条件(cwe - 362)在初始化例程。
构建和编译 运行或编译软件设置生成警告未初始化的变量或数据。
测试 使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。
测试 使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
测试 压力测试软件通过调用它同时从大量的线程或进程,并寻找任何意想不到的行为的证据。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
测试 识别错误情况不太可能发生在正常使用和触发器。例如,在低内存条件下运行程序,运行特权或权限不足,中断一个事务之前完成,或禁用连接DNS等基本网络服务。监控软件为任何意想不到的行为。如果你触发一个未处理的异常或类似的错误被发现,由应用程序的环境中,它仍可能表明意想不到的条件并不是由应用程序本身。
相关的连续波
cwe - 453 不安全的默认变量初始化
cwe - 454 外部信任变量的初始化
cwe - 456 失踪的初始化
相关的攻击模式

CAPEC-IDs:(查看所有)
26,29日,172年

cwe - 682:不正确的计算
总结
弱点患病率 后果 拒绝服务
数据丢失
代码执行
修复的成本 方便检测 容易困难
攻击频率 经常 攻击者的意识 媒介
讨论

计算机可以执行计算的结果似乎不数学意义。例如,如果你是用两个大,正数,结果可能是由于一个整数溢出数量小得多。在其他情况下,计算可能计划无法执行,如被零除。当攻击者控制的输入,用于数值计算,这一弱点可以有安全的后果。它可能会导致你做出错误的安全决策。它可能会导致你分配资源远远超过你预期——或者更少,在整数溢出的情况下,由于内存分配不足引发缓冲区溢出。它可能违反业务逻辑,例如计算产生负的价格。最后,拒绝服务也是可能的,如除触发程序崩溃。

…查看完整的技术细节

预防和缓解措施
实现 了解编程语言的基本表示形式,以及它如何与数值计算。密切关注字节大小差异,精度,签署/无符号的区别,截断,类型之间的转换和铸造,“不是一个数字”计算,和你的语言如何处理数字太大或太小的底层表示。
实现 对任何数字输入执行输入验证,确保他们在预期的范围内。
实现 使用适当的类型所需的行动。例如,在C / c++中,只使用无符号类型值,不可能是负的,如高度、宽度、或其他数字与数量有关。
实现 使用语言、库或框架更容易处理数字没有意想不到的后果。
例子包括安全整数处理包如SafeInt (c++)或IntegerLib (C或c++)。
测试 使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。
测试 使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
相关的连续波
cwe - 131 不正确的缓冲区大小的计算
cwe - 135 多字节字符串长度不正确的计算
cwe - 190 整数溢出或概括的
cwe - 193 错误
cwe - 369 除以零
cwe - 467 使用sizeof()在一个指针类型
cwe - 681 不正确的数值类型之间的转换
相关的攻击模式

CAPEC-IDs:(查看所有)
124年,128年,129年

多孔防御
cwe - 285:不适当的访问控制(授权)
总结
弱点患病率 后果 安全绕过
修复的成本 低到中等 方便检测 温和的
攻击频率 经常 攻击者的意识
讨论

假设你举办聚会几个亲密的朋友和他们的客人。你邀请大家进入你的客厅,但是当你赶上你的一个朋友,其中一个客人袭击你的冰箱,偷看到你的药箱,思考你藏在你的床旁边的床头柜上。软件面临类似的授权问题,可能会导致更严重的后果。如果你不确保您的软件的用户只有做他们允许,那么攻击者会试图利用你的授权和不当锻炼未经授权的功能,你只用于限制用户。

…查看完整的技术细节

预防和缓解措施
架构和设计 将应用程序划分为匿名的,正常的,特权和行政区域。减少攻击表面通过仔细映射角色的数据和功能。使用基于角色的访问控制(RBAC)执行的角色在适当的界限。
注意,这个方法可能不是防止水平授权,即。,它不会保护用户免受攻击别人用同样的角色。
架构和设计 确保您执行访问控制检查相关的业务逻辑。这些可能是不同的访问控制检查你申请资源,支持您的业务逻辑。
架构和设计 使用授权框架如JAAS授权框架和OWASP ESAPI访问控制功能。
架构和设计 对于web应用程序,确保访问控制机制是正确的每一页都在服务器端执行。用户不能访问任何未经授权的功能或信息,只需请求直接访问该页面。
要做到这一点的方法之一是确保包含敏感信息的所有页面不缓存,,所有此类页面限制访问请求都伴随着一个活跃的和经过身份验证的会话令牌关联到一个用户所需的权限访问该页面。
测试 使用工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。
系统配置 使用您的操作系统的访问控制功能和服务器环境,并相应地定义访问控制列表。使用“默认否认”政策在定义这些acl。
相关的连续波
cwe - 425 直接请求(“强迫浏览”)
cwe - 749 不公开的方法
相关的攻击模式

CAPEC-IDs:(查看所有)
1,13,17,39,45,51,59,60,76年,77年,87年,104年

cwe - 327:使用损坏或危险的密码算法
总结
弱点患病率 后果 数据丢失
安全绕过
修复的成本 中等到高 方便检测 温和的
攻击频率 很少 攻击者的意识 媒介
讨论

如果你处理敏感数据或需要保护通信通道,你可以使用加密,以防止攻击者阅读它。你可能会开发自己的加密方案,希望使攻击者难以破解。这样的一小块加密是一个受欢迎的视线攻击者。加密是困难的。如果全球杰出的数学家和计算机科学家不能正确(和他们总是打破自己的东西),然后你也不会。你可能认为您创建了一个全新的算法,没有人会算出,但更有可能的是,你重新发明轮子脱落前游行即将开始。

…查看完整的技术细节

预防和缓解措施
架构和设计 不开发自己的加密算法。他们可能会暴露于攻击易于理解的密码。逆向工程技术是成熟的。如果可以攻破你的算法如果攻击者了解它是如何工作的,那么它尤其薄弱。
架构和设计 使用严格的审查算法是目前被认为是强大的由该领域的专家,并选择经过良好测试的实现。
例如,美国政府系统需要FIPS 140 - 2认证。
正如所有加密机制,应该用于分析源代码。
定期确保您不使用过时的加密。一些老算法,一度被认为需要十亿年的计算时间,现在可以打破在几天或几小时。这包括MD4 MD5、SHA1 DES和其他算法,曾被认为是强大的。
架构和设计 设计你的软件,这样你可以用另一个代替一个密码算法。这将使它更容易升级到更强的算法。
架构和设计 精心管理和保护的密钥(见cwe - 320)。如果键可以猜测或被盗,那么密码本身的强度是无关紧要的。
架构和设计 使用语言、库或框架,使其更容易使用强密码。
行业标准的实现可以节省开发时间和更有可能避免错误可能发生在加密算法的实现。考虑到ESAPI加密功能。
实现 当你使用有技术,你需要正确地使用它们。不偷工减料,跳过资源密集型步骤(cwe - 325)。这些步骤通常是必不可少的预防常见的攻击。
测试 使用工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。
相关的连续波
cwe - 320 密钥管理错误
cwe - 329 不使用一个随机IV与CBC模式
cwe - 331 熵不足
cwe - 338 使用密码地PRNG疲软
相关的攻击模式

CAPEC-IDs:(查看所有)
97年

cwe - 259:硬编码的密码
总结
弱点患病率 媒介 后果 安全绕过
修复的成本 方便检测 温和的
攻击频率 很少 攻击者的意识
讨论

硬编码一个秘密账户和密码到您的软件验证模块非常方便,对熟练反向工程师。虽然它可能缩小您的测试和支持预算,它可以减少灰尘的安全你的客户。如果密码是相同的所有您的软件,然后每一位客户成为脆弱如果相反,当你密码就知道。因为它是硬编码的,它通常是一个巨大的疼痛让系统管理员解决。你知道他们有多爱不便凌晨2点时网络被攻击,相当于你会喜欢对一群愤怒的客户和大量的负面新闻,如果你的小秘密应该出去。大多数CWE的前25名可以被解释为一个诚实的错误;然而,对于这个问题,客户不会这么看。

…查看完整的技术细节

预防和缓解措施
架构和设计 出站身份验证:密码之外的代码存储在一个强烈保护,加密配置文件或数据库受访问的所有外人,包括其他本地用户在同一个系统上。适当的保护(cwe - 320)的关键。如果你不能使用加密来保护文件,然后确保尽可能严格的权限。
架构和设计 入站认证:而不是硬编码一个默认为首次登录的用户名和密码,利用一个“首次登录”模式,需要用户输入一个独特的强密码。
架构和设计 执行访问控制检查,限制哪些实体可以访问功能,需要硬编码的密码。例如,一个特性可能只有通过系统控制台,而不是通过一个网络连接。
架构和设计 对于入站认证:应用强有力的单向散列密码和那些散列存储在一个配置文件或数据库以适当的访问控制。这样,窃取文件/数据库仍然需要攻击者试图破解密码。在处理期间传入密码身份验证,密码的哈希和比较哈希,你救了。
使用随机分配为每个单独的散列,生成盐。这增加的计算量,攻击者需要进行强力攻击,这可能限制彩虹表法的有效性。
架构和设计 前端到后端连接:三个解决方案是可行的,尽管没有人完成。
第一个建议是使用自动生成的密码,改变,必须在给定的时间间隔输入系统管理员。这些密码将在内存中,只有有效的时间间隔。
接下来,使用的密码应该是有限的后端只执行操作有效的前端,而不是完整的访问。
最后,发送的消息应该标记和校验和时间敏感值,防止重放攻击方式。
测试 使用工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。
测试 使用监控工具,检查软件的流程与操作系统交互和网络。这种技术的情况很有用的源代码不可用,如果软件并不是由你,或者如果你想验证构建阶段并没有引入任何新的弱点。例子包括调试器直接附加到正在运行的进程;系统调用跟踪实用程序,如桁架(Solaris)和strace (Linux);系统活动监视器如FileMon、RegMon、过程监控、和其他的Sysinternals工具(Windows);嗅探器和协议分析,监控网络流量。
把监控和执行登录过程。使用反汇编代码,看看相关的指令,看看他们中的任何一个似乎比较固定的输入字符串或价值。
相关的连续波
cwe - 256 明文存储密码
cwe - 257 可恢复的格式存储的密码
cwe - 260 密码配置文件
cwe - 321 使用硬编码的加密密钥
相关的攻击模式

CAPEC-IDs:(查看所有)
188年,189年,190年,191年,192年,205年

cwe - 732:关键资源的不正确的权限分配
总结
弱点患病率 媒介 后果 数据丢失
代码执行
修复的成本 低到高 方便检测 容易
攻击频率 经常 攻击者的意识
讨论

非常粗鲁的东西未经许可,但用户(也就是不礼貌的。,攻击者)愿意花一点时间看看他们能侥幸。如果你有关键程序,数据存储,或配置文件的权限,让你的资源可读或写的世界——好吧,这就是他们会成为什么。虽然这可能不被认为是在实现或设计问题,有时需要应用的解决方案。让一个忙碌的sysadmin注意到并做出适当的改变远非最佳,有时是不可能的。

…查看完整的技术细节

预防和缓解措施
架构和设计 当使用临界资源,如一个配置文件,检查资源是否有不安全的权限(如被任何普通用户可以修改),并生成一个错误,甚至退出软件如果有可能资源可能被未经授权的修改。
架构和设计 将应用程序划分为匿名的,正常的,特权和行政区域。减少攻击表面通过仔细定义不同的用户组,特权和/或角色。地图这些对数据、功能和相关资源。然后设置相应的权限。这将允许您维护更细粒度的控制你的资源。
实现 在程序启动时,显式地设置默认的权限或umask最为严格的设置。在程序安装设置适当的权限。这将阻止你继承安全权限的任何用户安装或运行程序。
系统配置 所有配置文件、可执行文件和库,确保他们只可读和可写软件的管理员。
文档 不建议在你的文档中不安全的配置更改,特别是如果这些配置可以扩展到资源和其他软件,软件超出了你的范围。
安装 不要认为系统管理员将手动更改配置设置,你推荐的手册。
测试 使用工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。
测试 使用监控工具,检查软件的流程与操作系统交互和网络。这种技术的情况很有用的源代码不可用,如果软件并不是由你,或者如果你想验证构建阶段并没有引入任何新的弱点。例子包括调试器直接附加到正在运行的进程;系统调用跟踪实用程序,如桁架(Solaris)和strace (Linux);系统活动监视器如FileMon、RegMon、过程监控、和其他的Sysinternals工具(Windows);嗅探器和协议分析,监控网络流量。
把监控流程和注意库函数和系统调用操作系统资源(如文件、目录和共享内存。检查这些调用的参数来推断哪些权限。
注意,这种技术只用于权限相关问题的系统资源。它不可能检测应用程序级业务规则相关的权限,比如如果一个用户博客系统标志着职务“私人”,但这个博客系统不经意地将它标记为“公开”。
测试 确保您的软件运行正常在联邦桌面核心配置(FDCC)或一个等价的硬化配置指南,许多组织使用限制部署软件的攻击表面和潜在风险。
相关的连续波
cwe - 276 不安全的默认权限
cwe - 277 不安全的继承权限
cwe - 279 不安全的Execution-assigned权限
相关的攻击模式

CAPEC-IDs:(查看所有)
60,61年,62年

cwe - 330:使用不够随机值
总结
弱点患病率 媒介 后果 安全绕过
数据丢失
修复的成本 媒介 方便检测 容易困难
攻击频率 很少 攻击者的意识 媒介
讨论

想象拉斯维加斯一家赌场多快会破产如果赌客可以预测下一个滚动的骰子,旋转的轮子,或把卡。如果您使用安全特性,需要良好的随机性,但你不提供它,那么你会有攻击者一路笑着到银行。你可能取决于随机性的情况下,例如当生成会话id或临时文件名。(PRNG)是常用的伪随机数生成器,但很多事情可能出错。一旦攻击者可以确定哪些算法被使用,他或她可以猜下一个随机数经常推出相对较少的努力后成功的攻击。毕竟,如果你是在拉斯维加斯,你发现一个游戏与1000 - 1的赔率可以击倒10:1的可能性在你关注几个游戏,不是很值得继续玩,直到你中了大奖?

…查看完整的技术细节

预防和缓解措施
架构和设计 使用严格的审查算法是目前被认为是强大的由该领域的专家,并选择适当长度的种子经过良好测试的实现。
一般来说,如果一个伪随机数发生器不是广告作为密码安全,那么它可能是一个统计PRNG和不应该在安全敏感的环境中使用。
伪随机数发生器可以产生可预测的数字如果知道发电机和种子可以猜到了。一个256位的种子是一个好的起点生产一个足够“随机”的数字。
实现 根据需要考虑PRNG补种本身从高质量的伪随机输出源,如硬件设备。
测试 使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。
测试 执行FIPS 140 - 2测试数据明显的熵问题。
测试 使用工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。
测试 使用监控工具,检查软件的流程与操作系统交互和网络。这种技术的情况很有用的源代码不可用,如果软件并不是由你,或者如果你想验证构建阶段并没有引入任何新的弱点。例子包括调试器直接附加到正在运行的进程;系统调用跟踪实用程序,如桁架(Solaris)和strace (Linux);系统活动监视器如FileMon、RegMon、过程监控、和其他的Sysinternals工具(Windows);嗅探器和协议分析,监控网络流量。
把监控过程,寻找库函数表明随机性时使用。多次运行流程,看看种子的变化。寻找访问的设备或相关资源,通常用于强(或弱)随机性,比如/dev/urandom Linux。寻找库或系统调用访问可预测的进程id和系统时间等信息。
相关的连续波
cwe - 329 不使用一个随机IV与CBC模式
cwe - 331 熵不足
cwe - 334 小空间的随机值
cwe - 336 同样的种子PRNG
cwe - 337 可预测的种子在PRNG
cwe - 338 使用密码地PRNG疲软
cwe - 341 预测从可观察到的状态
相关的攻击模式

CAPEC-IDs:(查看所有)
59,112年

cwe - 250:执行不必要的特权
总结
弱点患病率 媒介 后果 代码执行
修复的成本 媒介 方便检测 温和的
攻击频率 有时 攻击者的意识
讨论

蜘蛛侠,著名的漫画英雄,生活的座右铭“大国意识到有很大的责任。”Your software may need special privileges to perform certain operations, but wielding those privileges longer than necessary can be extremely risky. When running with extra privileges, your application has access to resources that the application's user can't directly reach. For example, you might intentionally launch a separate program, and that program allows its user to specify a file to open; this feature is frequently present in help utilities or editors. The user can access unauthorized files through the launched program, thanks to those extra privileges. Command execution can happen in a similar fashion. Even if you don't launch other programs, additional vulnerabilities in your software could have more serious consequences than if it were running at a lower privilege level.

…查看完整的技术细节

预防和缓解措施
架构和设计 识别功能,需要额外的特权,比如访问特权操作系统资源。包装和集中这个功能如果可能的话,尽可能和隔离特权的代码与其他代码。尽可能晚地提高你的特权,尽快。避免弱点例如cwe - 288和cwe - 420保护所有可能的沟通渠道,与特权代码交互,如第二套接字,你只打算被管理员访问。
实现 执行广泛的输入验证任何特权的代码必须暴露给用户并拒绝任何不适合您的严格要求。
实现 确保您尽快放弃特权(cwe - 271),并确保你检查以确保特权已经成功(cwe - 273)下降。
实现 如果环境迫使你运行额外的特权,然后确定必要的最低访问级别。首先识别软件的不同的权限和用户需要执行他们的行为,如文件读写权限,网络套接字权限,等等。然后明确允许这些行为而否定一切。执行广泛的输入验证和规范化引入一个单独的漏洞的可能性降到最低。这种缓解比放弃更容易出错的特权。
测试 使用工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。
测试 使用监控工具,检查软件的流程与操作系统交互和网络。这种技术的情况很有用的源代码不可用,如果软件并不是由你,或者如果你想验证构建阶段并没有引入任何新的弱点。例子包括调试器直接附加到正在运行的进程;系统调用跟踪实用程序,如桁架(Solaris)和strace (Linux);系统活动监视器如FileMon、RegMon、过程监控、和其他的Sysinternals工具(Windows);嗅探器和协议分析,监控网络流量。
把监控和执行登录过程。寻找库函数和系统调用表明当特权被提高或下降。寻找资源的访问限制普通用户。
注意,这种技术只适用于特权与系统资源有关的问题。它不可能检测应用程序级业务规则相关的特权,例如如果一个博客系统允许用户删除一个博客条目没有首先检查用户拥有管理员权限。
测试 确保您的软件运行正常在联邦桌面核心配置(FDCC)或一个等价的硬化配置指南,许多组织使用限制部署软件的攻击表面和潜在风险。
相关的连续波
cwe - 272 最小特权违反
cwe - 273 未能检查权限是否成功了
cwe - 653 划分不足
相关的攻击模式

CAPEC-IDs:(查看所有)
69年,104年

cwe - 602:客户端执行服务器端安全
总结
弱点患病率 媒介 后果 安全绕过
修复的成本 方便检测 温和的
攻击频率 有时 攻击者的意识
讨论

富客户端可以使攻击者富有,贫穷和客户,如果你信任的客户代表您的服务器进行安全检查。记住下面的GUI,它只是代码。攻击者可以反向工程客户和编写自己的自定义客户遗漏某些不便特征像所有那些讨厌的安全控制。后果将取决于你的安全检查是什么保护,但一些较常见的目标是身份验证、授权和输入验证。如果你实现安全服务器,那么您需要确保你不仅仅依赖于客户执行。

…查看完整的技术细节

预防和缓解措施
架构和设计 对于任何一个在客户端执行安全检查,确保这些检查重复的在服务器端。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。
即使客户端对服务器端安全检查提供最小的好处,他们仍然有用。首先,他们可以支持入侵检测。如果服务器接收输入,应该已经被客户拒绝,那么它可能是一个攻击的迹象。第二,客户端错误检查可以提供有用的反馈给用户预期的有效输入。第三,可能会有意外的服务器端处理时间的减少输入错误,虽然这通常是一个小的储蓄。
架构和设计 如果需要某种程度的信任在两个实体之间,然后使用完整性检查和强大的身份验证以确保输入来自可信来源。设计产品,使这种信任在一个集中的管理时尚,特别是如果有复杂或多种沟通渠道,为了减少风险,实现者将错误地忽略检查在一个代码路径。
测试 使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
测试 使用工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。
相关的连续波
CWE-20 足够的输入验证
cwe - 642 外部控制临界状态的数据
相关的攻击模式

CAPEC-IDs:(查看所有)
21,31日,122年,162年,202年,207年,208年

附录A:选择标准和支持字段
附录A:选择标准和支持字段

条目在CWE排名前25位的选择使用两个主要标准:弱点发病率和严重程度。反映在的共同后果严重性的弱点。

弱点患病率

多久这个弱点不是出现在软件开发与安全集成到软件开发生命周期(SDLC)。普遍只适用于潜在的敏感的应用程序。例如,SQL注入的流行只是评估使用数据库的应用程序。

普遍价值决定基于估计从多个贡献者评选名单之列,其中包括CVE漏洞趋势数据。前25名贡献者提倡使用更精确的统计数据,但这些数据并不容易获得,深度和范围。大多数漏洞跟踪工作在高水平的抽象工作。例如,CVE趋势数据可以追踪缓冲区溢位,但公众脆弱性报告很少提及具体错误导致溢出。一些软件供应商可能跟踪弱点在低水平,但他们可能不愿分享这些信息。

  • 高:疲软可能出现至少一次在超过50%的可能受到影响的软件。
  • 媒介:缺点是可能发生至少一次在10%到50%的潜在影响的软件。
  • 低:缺点是可能发生在不到10%的可能受到影响的软件。

后果

当这个弱点出现在软件形成一个漏洞,利用典型的后果是什么吗?

  • 代码执行:攻击者可以执行代码或命令
  • 数据丢失:攻击者可以窃取、修改或腐败的敏感数据
  • 拒绝服务攻击:攻击者可以导致软件失败或放慢速度,防止合法用户能够使用它
  • 安全旁路:攻击者可以绕过安全保护机制;结果取决于旨在保护的机制

攻击频率

多久这个弱点发生在弱点目标的技术,确定攻击者?

考虑一个“暴露主机”:一个面向internet服务器,一个即上网客户端,一个多用户系统与不受信任的用户或多层系统,跨越组织或信任边界。也考虑到熟练,确定攻击者可以结合攻击多个系统为了达到一个目标主机。

  • 通常:一个暴露的主人可能每天看到这种攻击。
  • 有时:一个暴露的主人可能会看到这种攻击超过每月一次。
  • 很少:一个暴露的主人可能会看到这种攻击通常少于每月一次。

方便检测

技术有多容易,确定攻击者找到这个弱点,使用黑盒还是白盒方法,手动还是自动?

  • 容易:自动化工具或技术存在检测这一弱点,或者它可以迅速找到使用简单的操作(比如在表单字段输入“<脚本>”)。
  • 中度:只有部分支持使用自动化工具或技术;可能需要一些程序逻辑的理解;可能只存在在罕见情况下可能不会直接攻击者控制(如低内存条件)。
  • 困难:需要耗费时间,手工方法或智能自动化的支持,随着攻击者的专业知识。

修复的成本

资源密集型如何修复这一弱点时吗?这不能量化一般地,因为每个开发人员都是不同的。对于这个列表的目的,成本被定义为:

  • 低:在单块或函数代码更改
  • 介质:代码或算法改变,可能当地的单个文件或组件
  • 高:要求设计或结构上的重大改变,或脆弱的行为要求下游消费者,如库函数的设计问题

这个选择没有考虑其他成本因素,如程序修复、培训、补丁部署、质量保证等。

攻击者的意识

一个熟练的可能性,确定攻击者会意识到这个缺点,检测方法和开发方法。假设攻击者知道这配置或使用环境。

  • 高:攻击者能够检测这种类型的弱点和编写可靠的流行平台利用或配置。
  • 介质:攻击者意识到缺点通过定期监测安全邮件列表或数据库,但不一定探索密切,和自动利用框架或技术不一定是可用的。
  • 低:攻击者没有意识到这个问题,并不关注它,或者弱点需要特殊的技术专长,攻击者并不一定(但可能获得)。

相关的连续波

一些CWE给定的条目相关的条目。这包括低级变异,或可能发生的连续波,当给定的条目也在场。

列表相关的连续波是说明性的,不是完整的。

附录B:熟练的威胁模型,确定攻击者
附录B:熟练的威胁模型,确定攻击者

CWE的选择排名前25位的假设用户希望使它困难和耗时的熟练,确定攻击者进入软件。

虽然许多类型的攻击者存在,假设攻击者最下面的特征。

技能:

  • 有一个坚实的技术理解证据确凿的漏洞;
  • 可以用一些成功检测和利用这些漏洞,使用黑盒和白盒方法;
  • 可以学习新的漏洞和攻击技术需要付出大量的努力;和
  • 可以把攻击多个系统来获得更深的进入目标组织。

决心:

  • 试图窃取机密数据或接管整个软件包的计算能力,独立的动机(金融、军事、政治或其他);
  • 不一定是大型或资金充足集团的一部分,但可能与少量的其他个体;和
  • 愿意投资至少20小时攻击一个软件包。

非正式地,攻击者的能力和决心超过“学前脚本”,但不到一个民族国家或犯罪组织。

注意,该模型没有考虑拒绝服务攻击者的一个主要动机。这是与随后的模型,可能在某些领域,如关键基础设施保护和电子商务系统停机时间可能产生灾难性的后果。

还要注意,这个模型是在审核期后期开发的前25位,所以它没有显著影响排名前25位的选择项。然而,包括这里给一些上下文其他支持字段的值是如何得到的。未来的“N”的作者列表应该考虑让他们更明确的威胁模型,它可以确保优先级适合所需的环境。

附录C:排名前25位的其他资源
附录C:排名前25位的其他资源

虽然这是主文档,其他证明文件是可用的:

页面最后更新:2021年7月22日