




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2011CWE/SAN前25个最危险的软件错误
简介2011CW日SANS前25个最危险的软件错误是一个可以导致严重的软件漏洞有最普遍和关键性误差的列表。这些经常很容易找到,也很容易消减。这些是危险的,因为经常允许攻击者完全接管软件,偷窃数据,或者组织软件工作。前25列表是一个通过标识和避免太过寻常出现在软件装配之前的错误,来教育和帮助程序员防止各种各样折磨软件行业的漏洞。软件客户也可以用同样的列表帮助他们寻求更多安全软件。软件研究人员可以用前25来关注一个对于所有已知的安全漏洞狭隘的但重要的小结合。最后,软件管理者和首席信息官可以用这前25列表作为一个进步量尺,以此来努力来保护软件的安全。这个列表是系统网络安全协会,MITRE和许多顶级美国和欧洲的软件安全专家合作的结果。它的影响了SANS前20攻击向量和MITRE的共同漏洞列举(CWE)的发展经验。在国土安全部的状态网络安全部门的支持下,MITRE维护CWE网页,对前25程序错误展开详细的描述,同时包括对错误减轻与避免的权威指导。CWE页面包括超过800个可导致可利用漏洞的程序错误,设计错误和结构错误的数据。2011年前25在2010年列表上做了改进,但是精神和目标仍相同。今年的前25条目有限使用从超过20个不同的组织的输入,这些组织基于普遍率,重要性和开发的可能性评估各自的漏洞。用了前25列表的CWSS来对最后的结果进行评分和排名。前25列表涵盖了最有效的减轻错误的一小部分,可以帮助开发者减少或消除全部前25的漏洞,同时也包括许多数百被CWE记录的漏洞。对前25的使用指南用户活动安全编程新手阅读简短的清单,然后检查“MonsterMitigations部分来看在实践中改变很小可以对前25有很大的影响。最初选择少量的不足,看详细的CWE对更多不足信息的描述,包括代码示例和具体措施。有经验的安全开发者使用通用的25个座位检查的提醒,记录在最近变得普遍的事件。求教的看在对其他为成为最后25不足的顶页,包括正在迅速增长或已经增长迅速的不足。如果你对流行的漏洞已经熟悉,查询详细的CWE描述去看相关的CWE们",连接到你还未完全考虑的变种。
建立你自己的MonsterM市gations部分,因此一可以对自己的措施实践有清晰的认识,对于你的瓶颈也更后效考虑建立一个自定义的顶级”列表,适合需要和实践。查询共同漏洞危险分析框架页而,用于通用创建顶级列表的框架,来看附录C对于怎样完成今年前25的描述。发展你自己的年度25候选列表,根据你自己的普遍及重要因素,包括其他希望参考的因素,建立一个度量和对比的结果与同事相比,可能会产生一些丰富的描述。软件工程经理解决前25对于努力实现软件安全是一个早期的步骤。战略性的可能在努力覆盖,包括建立安全成熟度模型,SAFECode,OpenSAMM,MicrosoftSDL,和OWASPASVSo检查“MonsterMitigations部分对于决止米用何种最适合的方法,或建立自己的MonsteMitigations及'标出前25与他们的联系。考虑建立一个自定义的顶级”列表,适合需要和实践。查询共同漏洞危险分析框架页而,用于通用创建顶级列表的框架,来看附录C对于怎样完成今年前25的描述。发展你自己的年度25候选列表,根据你自己的普遍及重要因素,包括其他希望参考的因素,建立一个度量和对比的结果与同事相比,可能会产生一些丰富的描述。软件测试人员阅读简短的清单,考虑如何整合这些漏洞相关知识进入你的测试。如果你处在一个开发人员友好的竞争中,你可以发现一些原喜在风口浪尖,甚至是剩下的CWE。对于每个CWE入门者在详细的部分,你可以从来自技术细节.”链接的检测方法获得信息。回顾CAPEC标识对于关于攻击类型的观念,可以发起漏洞。软件客户认识到市场常常驱动供应商提供功能丰富的软件,但是安全可能没有关B重的考虑。作为一个消费者,你有权利去影晌供应商来提供更多的安全产品,让他们知道,安全对你来说十分重要。用前25来帮助有行
为准则的软件供应商来建立最低限度的期望。考虑使用前25作为联系谛言的部分,在软件采集谛言的过程中。SANS应用安全获得语言网站提供以用户为中心的语言,是来自于OWASP安全软件合同的附件,以此在消费者与供应商之间来提供描述期望与兑现的责任的框架。其他信息可以从美国国土安全局的收购和外包工作组获得。商议共同的漏洞危害分析框架页而作为通用框架,来奖励前N的列表可以满足你的需要。对于你实用的软件产品,密切关注那些产品中被公开报道的漏洞。看他们中是否与前25相关(或者你自己的客户清单),如果有,联系你的供应商来解决这些进程中那些里减少风险,这些漏洞继续引入到代码中。看到其他形成前25的漏洞顶尖总结,这将包括知识开始土管长到流行或者重要的漏洞,它们有可能成为未来的问题。教育工作者在简要的清单开始,一些训练材料也可用。2010前25的用户观察改变的部分,因为许多表面就改变的,今年的努力组织结构更加优化。对前25简要的列出:排名分数名称193.8CWE-89SQL命令中实用的特定特定元素处理不当(SQL注入)283.3CWE-78OS命令中使用的特定元素处理不当(命令攻击)379.0CWE-120没有检查输入大小对缓冲区进行复制(经典的缓冲区溢出)477.7CWE-79网贝架构保持失败(跨平台脚本攻击)576.9CWE-306对判定函数缺少验证676.8CWE-862缺少权威性认证775.0CWE-798使用硬编码的证书875.0CWE-311缺少对敏感数据的加密974.0CWE-434对危险类型文件的上载不加限制1073.8CWE-807在安全决策中依赖不被信任的输入1173.1CWE-250执行冗余的特权1270.1CWE-352跨站点伪造请求(CSPF)1369.3CWE-22不当地将路径名限制为受限目录(路径穿透)
1468.5CWE-494下载代码却不做完整性检查1567.8CWE-863错误的认证1666.0CWE-829包含来自非信任的控制范围函数1765.5CWE-732对临界资源分配的错误许可1864.6CWE-676使用具有潜在危险的函数1964.1CWE-327使用被破解或有风险的加密算法2062.4CWE-131对缓冲区大小计算错误2161.5CWE-307对过多的认证意图错误的限制2261.1CWE-601重定向到不受信任站点的URL(开放转移)2361.0CWE-134不受控制的格式字符串2460.3CWE-190整数溢出或无限循环2559.9CWE-759单一使用单向哈希函数CWE-89-SQL注入-交付这些危害性的安全隐患在2011。在数据丰富的软件应用,SQL注入意味着通向王国偷窃的钥匙。CWE-78,OS命令注入,是引用与操作系统交互处。传统的缓存溢出(CWE-120)排在第三,这些年来还是有害的。跨站点的脚本(CWE-79)是在各处毒害网站的。排在第5是丢失认证(CWE-306)对于判定函数。前25名的Category-Based视图这部分把条目到三个高级类别中使用了2009年的前25:安全组件之间的交互有风险的资源管理多孔防御安全组件之间的交互这些漏洞与不安全的方式发送和接收数据之间单独的组件,模块,程序,进程,线程,或系统有关系。对于每一个漏洞,它的排名一般列表中在方括号中被提供。排名CWEID名称[1]CWE-89在SQL命令中实用的特定特定元素处理不当(SQL注入)[2]CWE-78在OS命令中使用的特定元素处理不当(命令攻击)[4]CWE-79网贝架构保持失败(跨平台脚本攻击)[9]CWE-434对危险类型文件的上载不加限制[12]CWE-352跨站点请求伪造(CSRF)[22]CWE-601重定向到不受信任站点的URL(开放转移)有风险的资源管理
这个类别中的,漏洞与软件不正确管理创建,使用,转让,或破坏重要系统资源有关。排名CWEID名称[3]CWE-120没有检查输入大小对缓冲区进行复制(经典的缓冲区溢出)[13]CWE-22不当地将路径名限制为受限目录(路径穿透)[14]CWE-494下载代码却不做完整性检查[16]CWE-829包含来自非信任的控制范围函数[18]CWE-676[使用具有潜在危险的函数[20]CWE-131对缓冲区大小计算错误[23]CWE-134不受控制的格式字符串[24]CWE-190整数溢出或无限循环多孔防御这个类别中,威胁与防御技术常常被误用,滥用,或仅仅是忽略有关。排名CWEID名称[5]CWE-306对判定函数缺少验证[6]CWE-862缺少权威性认证[7]CWE-798使用硬编码的证书[8]CWE-311缺少对敏感数据的加密[10]CWE-807在安全决策中依赖不被信任的输入[11]CWE-250执行冗余的特权[15]CWE-863错误的认证[17]CWE-732对临界资源分配的错误许可[19]CWE-327使用被破解或有风险的加密算法[21]CWE-307对过多的认证意图错误的限制[25]CWE-759单一使用单向哈希函数排名前25位的组织为每个单独的去漏洞条目提供的额外信息。主要受众是软件程序员和设计师。排名漏洞在常用表中的排名分数总结是对于这个漏洞的个体评级和分数的总结,包括流行,重要性和调整分数。CWEID和名字对于漏洞的CWE标识和简称支持信息关于漏洞的补充信息,可能对决策者对于未来优化条目有用。
描述简短,非正式的描述关于漏洞和后果的特性。描述避免太过深入的挖掘技术细节。避免和移植开发者可用的移植或者限制漏洞的步骤。开发者可能选择一个或多个移植方法来适应自身需求。记录下技术多样性的影响,多种技术可能会综合在为了更好的深度防御。关于CWE其他CWE条目与前25有关的漏洞,注:这个列表是说明性的,不是全面的通常的父类一个或多个^旨示对于通常的CWE条目,你可以看到深度和广度。相关的攻击类型CAPEC关于攻击的条目,可能成功地反击了漏洞。注:这个列表/、是很必须。其他指示连接更多的详情,包括源代码示例演示漏洞,探测方法等。支持信息每个排名前25位的条目包括支持数据字段的普遍漏洞点,技术的影响和其他信息。每个条目还包括以下数据字段。字段描述攻击频率漏洞多久发生一次并被攻击者利用。检测难易攻击者找到这个漏洞是多么的简单。修复成本很多努力为了适合这个漏洞。攻击者意识攻击者将要意识到这个特别的漏洞的可能性,探测方法和探索方法。CWE详细描述本节为每个单独的CWE条目提供细节,随着更多信息的链接。看到前25的组织和各领域的解释。1CWE-89:SQL命令中实用的特定特定元素处理不当(SQL注入)总结流行程度高后果数据丢失,安全绕过修复成本低检测难易容易攻击频率经常攻击者意识高描述最近,似乎软件都是关于数据:取出放入数据库。传递信息,并将其发送给其他地方为了爱好和利润。如果攻击者可以影响SQL,是你使用与数据库通信,然后突然你所有的乐趣和利润他们都知道。如果你使用SQL进行安全控制,例如,用户认证,攻击者可能会改变这些查询的逻辑绕过安全。他们可以修改查询来窃取,记录,或者改变你的基础数据。他们甚至会每次窃取一个字节的数据如果必要,他们有耐心也知道怎么做。2011年,SQL注入对许多知名组织的妥协负责,包括索尼,PBS,MySQL.com,安全公司HBGaryFederal和许多其他公司。预防和移植架构和设计使用审查库或框架为不允许这个漏洞出现提供了结构,使这个漏洞更容易避免。例如,考虑使用持久性层,如Hibernate或EnterpriseJavabean,它可以提供重要的保护防止SQL注入,如果使用得当。架构和设计如果可用,使用结构化机制,自动执行数据和代码之间的分离。这些机制可以提供相关的引用,编码,自动验证,而不是依赖开发人员在每一点上提供此功能,生成输出。流程使用预处理语句的SQL查询,参数化查询或存储过程。这些功能应该接受和支持强类型参数或变量。不能动态地构建和执行查询字符串,使用执行”或类似功能的这些特性,因为有重新引入SQL注入的可能性。架构和设计,操作使用所需的最低特权运行代码来完成必要的任务。如果可能的话,创建有限的独立帐户权限,只用于一个任务。这样,一个成功的攻击不会立即让攻击者访问其他软件和环境。例如,数据库应用程序很少需要运行数据库管理员,特别是在日常操作。具体来说,遵循最小特权原则是在创建SQL数据库用户帐户时候。数据库用户应该只给使用他们的帐户必要的最低特权。如果系统的需求表明,用户可以阅读和修改自己的数据,因此限制他们的权限,所以他们不能读/写别人的数据。在所有数据库对象使用最严格的权限可能,例如只执行存储过程。架构和设计对于任何在客户端执行的安全检查,要确保这些检查复制在服务器端,为避免CWE-602。攻击者可以绕过客户端检查,通过检查被执行后修改值,或通过改变客户端来完全删除客户端检查。然后,这些修改的值将被提交到服务实现尽管有风险,但是如果你需要使用动态生成来查询字符串或命令,在这些参数中需要正确引用参数和任何特殊字符转义。最保守的方法是离开或者过滤所有字符,不通过一个极其严格的白名单(如一切的不是字母数字或空白的字符)。如果仍然需要一些特殊字符,如空格,每个参数封装在引号转义,小心参数注入。这些特性可以在数据库或编程语言中,而不是建立自己的实现,。例如,OracleDBMS_ASSERT包可以检查或执行参数一定的属性,使他们更容易受到SQL注入。对于MySQL,mysql_real_escape_string()API函数可用于C和PHP。实现假设所有的输入都是恶意的。使用一个接受已知的好的信息”,即输入验证策略,可接受的输入,使用白名单,严格遵守规范。拒绝任何不严格符合规范的输入,或将其转换。不完全依赖寻找恶意或不正常的输入(即,不依赖于一个黑名单)。然而,黑名单可以用于检测潜在的攻击或确定哪些输入是不正常的,应该直接被驳回。当执行输入验证,考虑所有可能相关的属性,包括长度,类型的输入,可接受的值,缺失或额外的输入,语法,一致性相关领域,符合业务规则。业务规则逻辑的一个例子,船”在语法上可能是有效的,因为它只包含字母数字字符,但它不是有效的,就像你期望的颜色,如红色”或篮色”。当构造SQL查询字符串,使用严格的白名单,基于请求中的参数的期望值限制字符集。这将间接限制的范围攻击,但这种技术没有适当的重要输出编码和避免。注意,尽管输入验证可能提供一些深度防护,适当的输出编码,避免和引用是防止SQL注入最有效的解决方法。这是因为它有效地限制了将出现在输出。输入验证不会总是阻止SQL注入,尤其是如果你需要支持自由格式的文本字段可以包含任意字符。例如,"Oreilly这个名字可能会通过验证步骤,因为在英语语言它是一种常见的姓氏。但是,它不能直接插入到数据库,因为它包含了“撇号的特性,这将需要去掉或以其他方式处理。在这种情况下,剥离撇号可能减少SQL注入的风险,但会产生不正确的行为,因为错误的名字将被记录下来。在可行的情况下,完全禁止元字符可能是最安全的,而不是去掉它们,这将提供一些深度防御。数据进入数据库后,后来过程可能忽视去掉元字符而使用,你可能没有控制这些流程。架构和设计当可接受的对象集,如文件名或url,是有限的或已知的,创建一个映射从一组固定的输入值(比如数字id)到实际的文件名或url,并拒绝所有其他输入。实现确保错误消息只包含最小的细节,是有用的目标受众,并没有其他。消息需要平衡又不过于限制。他们应该不一定揭示被用来确定错误的方法。如此详细的信息可以用来改进原攻击以此增加成功的机会。如果错误必须跟踪一些细节,捕捉他们的日志消息,但想想可能发生的,如果日志消息可以被攻击者得到。避免任何形式对高度敏感信息的记录,如密码。避免不一致的消息可能会意外地提示攻击者内部状态,如用户名是否有效。在SQL注入的上下文中,错误消息显示SQL查询的结构可以帮助攻击者成功攻击裁剪字符串。操作使用应用程序防火墙,可以检测攻击这个漏洞。它在有益的情况下,代码不能固定(因为由一个第三方提供),作为一项紧急预防措施,更全面的保证软件措施被应用,或者提供深度防御。有效性:温和注:应用程序防火墙不可能涵盖所有可能的输入向量。止匕外,攻击技术可能绕过保护机制,比如使用不正常的输入,仍然可以由组件接收处理这些输入。根据功能,应用程序防火墙可能会无意中拒绝或修改合法请求。最后,可能需要定制一些手动工作。操作,实现如果你使用的是PHP,配置你的应用程序,以便它不使用register_globalso实现期间,开发你的应用程序,以便它不依赖于这个特性,但是小心实现registerglobals的模拟CWE-95等漏洞,CWE-621或类似的问题。相关的CWECWE-90在LDAP查询中特殊兀素使用/、当(LDAP注入)CWE-564SQL注入:冬眠CWE-566授权旁路通过用户控制SQL主键CWE-619悬空数据库游标(光标注入)相关攻击模式CAPEC-IDs:[查看所有]66,108,109,1102CWE-78:OS命令中使用的特定元素处理不当(命令攻击)总结流行程度中后果数据异常修复成本中检测难易容易攻击频率经常攻击者意识高描述软件在网络之间通常是一个局外人与操作系统内部的桥梁。当你调用另一个程序上的操作系统,但你允许不受信任的输入输入的命令字符串生成执行计划,那么你就邀请攻击者穿过那座桥来执行自己的命令,而不是你的命令。预防和移植架构和设计如果可能的话,使用库调用,而不是用外部流程重建所需的功能。架构和设计操作在一个监视”或类似封闭环境运行代码,执行严格的流程和操作系统之间的边界。这可能有效地限制哪些文件可以在一个特定的目录下或访问哪些命令可以执行软件。操作系统的例子包括Unixchroot见识,AppArmor队,SELinux。在一般情况下,托管代码可能会提供一些保护。例如,java。在JavaSecurityManagerFilePermission允许用户指定文件操作的限制。这可能不是一个可行的解决方案,而且它只限制了影响操作系统的部分;应用程序的其余部分仍可能被威胁。应该注意避免CWE-243和相关漏洞。有效性:有限注:这种能缓解的有效性取决于的预防功能所使用的特定的封闭环境或监视,只可能有助于减少攻击的范围,比如限制某些系统调用或限制攻击者可以访问文件系统的一部分。架构和设计对于任何将被用来生成一个命令执行的数据,保持尽可能多的从外部控制的的数据。例如,在web应用程序中,这可能需要将数据存储在会话的状态,而不是向在一个隐藏的表单字段向客户机发送。架构和设计对于任何在客户端执行的安全检查,确保这些检查复制在服务器端,以避免CWE-602。攻击者可以在检查被执行后通过修改值绕过客户端检查或通过完全删除客户端检查来改变客户端。然后,这些修改的值将被提交到服务器。架构和设计使用审查库或框架为不出现这个漏洞提供了结构,使这个漏洞更容易避免。例如,考虑使用ESAPI编码控制或类似的工具,库或框架。这些将帮助程序员编码输出的方式不容易出错。尽管有风险,但是如果你需要使用动态生成来查询字符串或命令,在这些参数中需要正确引用参数和任何特殊字符转义。最保守的方法是离开或者过滤所有字符,不通过一个极其严格的白名单(如一切的不是字母数字或空白的字符)。如果仍然需要一些特殊字符,如空格,每个参数封装在引号转义,小心参数注入(CWE-88)。如果要执行的程序允许参数被指定为一个输入文件或标准输入,那么考虑使用传递参数模式,而不是命令行。架构和设计如果可用,使用结构化机制,自动执行数据和代码之间的分离。这些机制可以提供相关的引用,编码,自动和验证,而不是依赖开发人员在每一点上提供此功能,生成输出。一些语言提供多种功能,可用于调用命令。在可能的情况下,使用一个字符串识别任何函数调用命令shell,并用个人参数编写替换函数,。这些函数通常执行适当的引用或过滤参数。例如,在C语言中,system。函数接受一个字符串,该字符串包含整个执行命令,而execl(),execve()和其他每个参数需要一个字符串数组。在Windows中,CreateProcess()只接受一个参数。在Perl中,如果system。提供了一组参数,那么它将引用的多个参数。实现假设所有的输入都是恶意的。使用一个接受已知的好的信息”,即输入验证策略,可接受的输入,使用白名单,严格遵守规范。拒绝任何不严格符合规范的输入,或将其转换。不完全依赖寻找恶意或不正常的输入(即,不依赖于一个黑名单)。然而,黑名单可以用于检测潜在的攻击或确定哪些输入是不正常的,应该直接被驳回。当执行输入验证,考虑所有可能相关的属性,包括长度,类型的输入,可接受的值,缺失或额外的输入,语法,一致性相关领域,符合业务规则。业务规则逻辑的一个例子,船”在语法上可能是有效的,因为它只包含字母数字字符,但它不是有效的,就像你期望的颜色,如红色”或篮色”。当构建操作系统命令字符串,使用严格的白名单,基于请求中的参数的期望值限制字符集。这将间接限制的范围攻击,但这种技术没有适当的重要输出编码和避免。注意,尽管输入验证可能提供一些深度防护,但是适当的输出编码,避免和引用是防止OS命令注入最有效的解决方法。这是因为它在输出进行了有效的限制。输入验证不会总是阻止OS命令注入,尤其是当你需要支持自由格式的文本字段时会包含任意字符。例如,当调用一个邮件程序,你可能需要允许主题字段包含溢出微点,输入“;和”>竽符也将需要忽略或以其他方式处理。在这种情况下,剥离的字符可能会减少OS命令注入的风险,但会产生不正确的行为。因为这个主题字段将不会被认为是用户的需求,这可能是一个小小的不便,但可能更重要的是程序依赖于结构良好的主题行,将消息传递给其他组件。即使在你的验证犯了错(忘记一个输入字段),适当的编码仍可能保护你免受基于注入的攻击。只要不是做隔离,输入验证仍然是一个有用的技术,因为它可以大大降低你的攻击层面,让你发现一些攻击,并提供适当的编码。架构和设计当可接受的对象集,如文件名或url,是有限的或已知的,创建一个映射从一组固定的输入值(比如数字id)到实际的文件名或url,并拒绝所有其他输入。操作在自动感染传播的环境中运行代码执行,防止使用受感染的任何命令执行变量,比如Perl的-t听关。这将迫使你执行验证步骤,消除感染,尽管你必须小心正确验证你的输入,这样就不会对危险的输入标记为未染污的感到意外(见CWE-183和CWE-184)。实现确保错误消息只包含最小的细节,是有用的目标受众,并没有其他。消息需要平衡又不过于限制。他们应该不一定揭示被用来确定错误的方法。如此详细的信息可以用来改进原攻击以此增加成功的机会。如果错误必须跟踪一些细节,捕捉他们的日志消息,但想想可能发生的,如果日志消息可以被攻击者得到。避免任何形式对高度敏感信息的记录,如密码。避免不一致的消息可能会意外地提示攻击者内部状态,如用户名是否有效。在OS命令注入中,错误信息返回给用户会揭示是否正在执行一个操作系统命令,并可能正在使用哪个命令。操作使用运行时策略实施来创建一个被允许命令的白名单,然后避免使用任何不出现在白名单中的命令。AppArmor对等技术可以做到这一点。操作使用应用程序防火墙,可以检测攻击这个漏洞。它在有益的情况下,代码不能固定(因为由一个第三方提供),作为一项紧急预防措施,更全面的保证软件措施被应用,或者提供深度防御。有效性:温和注:应用程序防火墙不可能涵盖所有可能的输入向量。止匕外,攻击技术可能绕过保护机制,比如使用不正常的输入,仍然可以由组件接收处理这些输入。根据功能,应用程序防火墙可能会无意中拒绝或修改合法请求。最后,可能需要定制一些手动工作。架构和设计操作使用所需的最低特权运行代码来完成必要的任务。如果可能的话,创建有限的独立帐户权限,只用于一个任务。这样,一个成功的攻击不会立即让攻击者访问其他软件和环境。例如,数据库应用程序很少需要运行数据库管理员,特别是在日常操作。操作,实现如果你使用的是PHP,配置你的应用程序,以便它不使用register_globalso实现期间,开发你的应用程序,以便它不依赖于这个特性,但是小心实现register_globals的模拟CWE-95等漏洞,CWE-621或类似的问题。相关的CWECWE-88参数注入或修改相关攻击模式CAPEC-IDs:[查看所有]6,15,43,88,1083CWE120:在没有没有检查输入大小的情况下就对缓冲区进行复制(经典的缓冲区溢出)总结流行程度高后果代码一场,拒绝服务,数据丢失修复成本低检测难易容易攻击频率经常攻击者意识高描述缓冲区溢出是大自然母亲的小提醒,物理定律说:如果你想把更多的东西放进一个容器,若超过它所能容纳的量,会制造混乱。几十年来的C应用程序,缓冲区溢出待消除。然而,在没有检查的大小的情况下复制一个不可信的输入,输入错误是要避免的错误中中最简单。这就是为什么这种类型的缓冲区溢出常被称为经典”。这是几十年的,通常你了解101安全编程的第一件事。预防和移植需求使用一种语言,为不允许出现这个漏洞提供了结构,使这个漏洞更容易避免。例如,许多执行内存管理的语言,如Java,Perl,不理会缓冲区溢出。其他语言,比如Ada和c#,通常提供溢出保护,但程序员可以禁用保护。警惕,在语言的接口,本地代码仍然可能溢出,即使语言本身在理论上是安全的。架构和设计使用审查库或框架,为不允许这个漏洞出现提供了结构,使这个漏洞更容易避免。例如,安全C字符用库(SafeSt。和ViegaStrsafe系列,lib从微软h。这些库提供安全版本的越界字符串处理函数。注:这不是一个完整的解决方案,因为很多缓冲区溢出字符串并不相关。构建和编译使用功能或扩展运行或自动编译你的软件,提供一种保护机制,减轻或消除缓冲区溢出。某些编译器和扩展会提供自动缓冲区溢出检测机制,构建编译后的代码。例如,MicrosoftVisualStudio/GS标志,Fedora/RedHatFORTIFY_SOURCEGCC,StackGuard,ProPolice。有效性:深度防御注:这个不一定是一个完整的解决方案,因为这些机制只能检测某些类型的溢出。止匕外,仍有可能导致拒绝服务攻击,因为典型的反应就是退出应用程序。实现考虑遵守以下规则,分配和管理应用程序的内存:仔细检查你的缓冲区与你指定一样大;当使用函数接受一个复制的字节,如strncpy(),请注意,目的缓冲区大小但是否等于源缓冲区大小,它可能不是NULL-terminate字符串。如果访问在一个循环缓冲区检查缓冲边界,确保你写过去的不是危险空问。如果有必要,截断所有输入字符串传递给前一个合理的长度复制和连接功实现假设所有的输入都是恶意的。使用一个接受已知的好的信息”,即输入验证策略,可接受的输入,使用白名单,严格遵守规范。拒绝任何不严格符合规范的输入,或将其转换。不完全依赖寻找恶意或不正常的输入(即,不依赖于一个黑名单)。然而,黑名单可以用于检测潜在的攻击或确定哪些输入是不正常的,应该直接被驳回。当执行输入验证,考虑所有可能相关的属性,包括长度,类型的输入,可接受的值,缺失或额外的输入,语法,一致性相关领域,符合业务规则。业务规则逻辑的一个例子,船”在语法上可能是有效的,因为它只包含字母数字字符,但它不是有效的,就像你期望的颜色,如红色”或篮色”。架构和设计对于任何在客户端执行的安全检查,确保这些检查复制在服务器端,以避免CWE-602。攻击者可以在检查被执行后通过修改值绕过客户端检查或通过完全删除客户端检查来改变客户端。然后,这些修改的值将被提交到服务器。「隙作使用一个特性,如地址空间布局来随机化。有效性:深度防御注:这不是一个完整的解决方案。然而,它迫使攻击者猜测一个未知数,改变每一个程序执行。止匕外,仍有可能导致拒绝服务攻击,典型的反应就是退出应用程序。操作使用CPU和操作系统提供数据执行保护(NX)或其等价的操作。有效性:深度防御注:这不是一个完整的解决方案,因为缓冲区溢出可以以危险的方式修改软件的状态覆盖附近变量。止匕外,代码是必需的,它不能用于无效来情况下,.最后,仍可能导致拒绝服务攻击典型的反应就是退出应用程序。构建和编译,操作大多数在编译器或操作系统级别的减轻技术迄今为止只能解决地址只有一个子集的缓冲区溢出问题,甚至很少提供完整的子集保护。这是一种很好的做法来实现策略来增加攻击者的工作负载,比如让攻击者猜测一个未知数来改变每一个程序执行。实现取代无限复制函数具有类似的功能,支持长度参数,如拷贝字符串strncpy<如果他们不是可用的,需要创建这些,。有效性:温和注:这种方法仍然是容易计算错误,包括诸如off-by-one错误(CWE-193)和错误地计算缓冲区长度(CWE-131)。架构和设计当可接受的对象集,如文件名或url,是有限的或已知的,创建一个映射从一组固定的输入值(比如数字id)到实际的文件名或url,并拒绝所有其他输入。架构和设计操作使用所需的最低特权运行代码来完成必要的任务。如果可能的话,创建有限的独立帐户权限,只用于一个任务。这样,一个成功的攻击不会立即让攻击者访问其他软件和环境。例如,数据库应用程序很少需要运行数据库管理员,特别是在日常操作。架构和设计操作在一个监视”或类似封闭环境运行代码,执行严格的流程和操作系统之间的边界。这可能有效地限制哪些文件可以在一个特定的目录下或访问哪些命令可以执行软件。操作系统的例子包括Unixchroot见识,AppArmor队,SELinux。在一般情况下,托管代码可能会提供一些保护。例如,java。在JavaSecurityManagerFilePermission允许用户指定文件操作的限制。这可能不是一个可行的解决方案,而且它只限制了影响操作系统的部分;应用程序的其余部分仍可能被威胁。应该注意避免CWE-243和相关漏洞。有效性:有限注:这种能缓解的有效性取决于的预防功能所使用的特定的封闭环境或监视,只可能有助于减少攻击的范围,比如限制某些系统调用或限制攻击者可以访问文件系统的一部分。相关的CWECWE-129数组索引验证不当CWE-131缓冲区大小计算错误相关攻击模式CAPEC-IDs:[查看所有]9,10,14,24,42,44,45,46,47,67,92,1004CWE-79:网页架构保持失败(跨平台脚本攻击)总结流行程度高后果代码异常,安全绕过修复成本中检测难易容易攻击频率经常攻击者意识高描述在web应用程序中,跨站点脚本(XSS)是一种最普遍,最顽固的,危险的漏洞。这是几乎不可避免的,把HTTP无状态的特性,数据和脚本混合在HTML中,很多网站之间的数据传递,不同的编码方案,功能丰富的web浏览器。如果你不小心,攻击者可以注入Javascript或其他browser-executable内容应用程序生成一个web页面。然后由其他用户访问你的网页,浏览器的执行恶意脚本。突然,你的网站显示你没有写的代码。攻击者可以使用各种技术来获得或输入到你的服务器,或者使用一个不知情的受害者的中间人技术:预防和移植架构和设计使用审查库或框架,为不允许这个漏洞出现提供了结构,使这个漏洞更容易避免。库和框架更容易生成正确编码的输出,如微软Anti-XSS图书馆,OWASPESAPI编码模块和ApacheWicket。实现,架构和设计上下文将预期使用你的数据编码。不同组件之间传送数据的时候或在生成输出时,这是特别重要的,可以包含多个编码,如网页或多部邮件。研究所有预期的通信协议以及数据表现方式来决定所需要的编码策略。任何数据,输出到另一个网页,特别是收到外部输入任何数据,在所有非字母数字的字符使用适当的编码。部分相同的输出文档可能需要不同的编码,这将取决于是否输出:HTML实体,元素属性(如src="XYZ"),uriJavaScript,层叠样式表和样式属性等。注意HTML实体编码只适合实体的HTML。查阅XSS预防备忘单[REF-16]更多细节的类型编码和避免是必要的。架构和设计,实现明确所有的潜在领域不受信任的输入,参数,cookies,任何从网络读取环境变量,反向DNS查找,查询结果,请求头,URL组件,电子邮件,文件,文件名,数据库,和任何外部系统向应用程序提供数据。记住,通过API调用可以获得间接收获。有效性:有限注:这种技术效果有限,但可以帮助时可以在服务器端存储客户端状态和敏感信息而不是cookies,头,隐藏的表单字段等。架构和设计对于任何在客户端执行的安全检查,确保这些检查复制在服务器端,以避免CWE-602。攻击者可以在检查被执行后通过修改值绕过客户端检查或通过完全删除客户端检查来改变客户端。然后,这些修改的值将被提交到服务器。架构和设计如果可用,使用结构化机制,自动执行数据和代码之间的分离。这些机制可以提供相关的引用,编码,自动和验证,而不是依赖开发人员在每一点上提供此功能,生成输出。为每一个web页面生成,使用和指定一个字符编码,如iso-8859-1或utf-8。如果不指定一个编码,web浏览器可能会通过猜测哪些编码实际上是使用的web页面来选择不同的编码。这可能会导致web浏览器诊断某些特殊序列,开放客户端微妙的XSS攻击。移植相关的更多信息,请参见CWE-116编码/避免。实现使用Struts,应该将所有的数据表单bean与bean的过滤属性设置为true。实现只允许Http设置会话cookie,帮助减轻XSS攻击用户的会话cookie。在浏览器支持只允许Http(比如最近版本的InternetExplorer和Firefox),这个属性可以防止用户的会话cookie访问使用document.cookie恶意客户端脚本。这不是一个完整的解决方案,因为只允许Http不是所有浏览器都支持的。更重要的是,XMLHTTPRequest和其他强大的浏览器技术提供读访问HTTP头,包括Set-CookieHttpOnly标志设置的标题。有效性:深度防御实现假设所有的输入都是恶意的。使用一个接受已知的好的信息”,即输入验证策略,可接受的输入,使用白名单,严格遵守规范。拒绝任何不严格符合规范的输入,或将其转换。不完全依赖寻找恶意或不正常的输入(即,不依赖于一个黑名单)。然而,黑名单可以用于检测潜在的攻击或确定哪些输入是不正常的,应该直接被驳回。当执行输入验证,考虑所有可能相关的属性,包括长度,类型的输入,可接受的值,缺失或额外的输入,语法,一致性相关领域,符合业务规则。业务规则逻辑的一个例子,船”在语法上可能是有效的,因为它只包含字母数字字符,但它不是有效的,就像你期望的颜色,如红色”或篮色”。当动态地构建web页面时,使用严格的白名单,基于请求中的参数的期望值限制字符集。不仅用户应该指定参数,所有输入应该验证和干净,包括所有的数据请求,包括隐藏字段,cookies,标题,URL本身等。在将得到的网站仅是验证字段,这样一个常见的错误,导致持续的XSS漏洞。通常看到的数据请求所反映的应用程序服务器或应用程序开发团队出乎意料。一个字段,目前没有反映未来的开发人员可以使用。因此,建议当^证HTTP请求的所有部分。注意,适当的输出编码,避免和引用是防止XSS最有效的解决方法,尽管输入验证可能提供一些深度防护。这是因为它有效地限制了出现在输出。输入验证不会总是防止XSS,尤其是如果你需要支持自由格式的文本字段可以包含任意字符。例如,在一个聊天应用程序,心表情符号(<3)可能会通过验证步骤,因为它是常用的。但是,它不能直接插入到web页面,因为它包含了“〈将性,这需要转义或以其他方式处理。在这种情况下,剥离“<可能降低XSS的风险,但它会产生不正确的行为,因为表情符号将不会被记录下来。这可能是一个小小的不便,但在一个数学论坛,想代表不平等这将是更重要的。即使在你的验证犯了错,适当的编码仍可能保护你免受基于注入的攻击。只要不是做隔离,输入验证仍然是一个有用的技术,因为它可以大大降低你的攻击范围,让你发现一些攻击,并提供适当的编码。确保你在应用程序中定义良好的接口执行输入验证。这将有助于保护应用程序即使某个组件的重用或移动。架构和设计当可接受的对象集,如文件名或url,是有限的或已知的,创建一个映射从一组固定的输入值(比如数字id)到实际的文件名或url,并拒绝所有其他输入。操作使用应用程序防火墙,可以检测攻击这个漏洞。它在有益的情况下,代码不能固定(因为由一个第三方提供),作为一项紧急预防措施,更全面的保证软件措施被应用,或者提供深度防御。有效性:温和注:应用程序防火墙不可能涵盖所有可能的输入向量。止匕外,攻击技术可能绕过保护机制,比如使用不正常的输入,仍然可以由组件接收处理这些输入。根据功能,应用程序防火墙可能会无意中拒绝或修改合法请求。最后,可能需要定制一些手动工作。操作,实现如果你使用的是PHP,配置你的应用程序,以便它不使用register_globals实现期间,开发你的应用程序,以便它不依赖于这个特性,但是小心实现register_globals的模拟CWE-95等漏洞,CWE-621或类似的问题相关的CWECWE-82中和不当脚本在IMG标记的属性在一个Web页面CWE-85中和不当交替XSS语法CWE-87跨站点脚本CWE-692不完整的黑名单CWE-619悬空数据库游标(光标注入)CAPEC-IDs:[查看所有]18,19,32,63,85,86,91,106,198,199,209,232,243,244,245,246,2475CWE-306:对判定函数缺少验证总结流行程度常见后果安全绕过修复成本从低到高检测难易中等的攻击频率有时攻击者意识高描述在无数的动作片,恶棍闯通过加热管道或管道爬行扩展电梯井,或隐藏在一个移动的车,进一个戒备森严的建筑。这工作,因为从这些路径进入大楼没有那些好管闲事的保安要求出示证件。软件可能使某些关键功能的假设,没有人会认为试图通过打破前门做任何事情。但是攻击者知道如何联合找出替代的方式进入系统。预防和移植架构和设计将软件划分为匿名,正常,特权和行政区域。确定哪些领域需要验证用户身份,并使用一个集中的身份验证功能。识别所有潜在的沟通渠道,或其他的方法与软件的交互,确保所有通道被适当的保护。开发人员有时执行身份验证的主要渠道,但打开一个被认为是私有的二级频道。例如,登录机制可能是监听一个网络端口,但成功的身份验证之后,可以打开一个端口,等待连接,但避免了身份验证,因为它假设只有经过身份验证的用户能连接到端口。一般来说,如果软件或协议允许单个会话或用户状态持续多个连接或渠道,需要使用身份验证和适当的凭证管理。架构和设计对于任何在客户端执行的安全检查,确保这些检查复制在服务器端,以避免CWE-602。攻击者可以在检查被执行后通过修改值绕过客户端检查或通过完全删除客户端检查来改变客户端。然后,这些修改的值将被提交到服务器。架构和设计在可能的情况下,避免使用身份验证功能实现自定义的身份验证例程,考虑周边框架提供,如操作系统或环境。这些可能会使它更容易提供身份验证任务和授权明确划分的任务。在万维网等环境中,身份验证和授权的界限有时是模糊的。如果需要自定义身份验证例程,而不是那些提供的服务器,那么这些例程必须适用于每一个页面,因为这些页面可以直接请求。架构和设计使用审查库或框架为不允许这个漏洞出现提供了结构,使这个漏洞更容易避免的。例如,考虑使用与身份验证功能,如OpenSSL库或ESAPI身份。相关的CWECWE-302绕过Assumed-Immutable数据的认证CWE-307不当限制过度的身份验证CAPEC-IDs:[查看所有]12,36,40,62,2256CWE-862:缺少权威性认证总结流行程度高后果安全绕过修复成本中检测难易容易攻击频率经常攻击者意识高描述假设你举办一个聚会,有几个亲密的朋友和他们的客人。你邀请大家进入你的客厅,但是当你赶上你的一个朋友,其中一个客人袭击你的冰箱,窥探到你的药箱,思考你藏在你的床旁边的床头柜的东西。软件也面临着类似的授权问题,可能会导致更严重的后果。如果你不能保证你的软件的用户只做允许的,那么攻击者会试图利用你的授权尝试只用于特定用户的未经授权的功能。2011年5月,花旗集团(Citigroup)表示,通过改变出现在URL中的字段,已经被黑客可以盗取成千上万的银行账户信息;授权会检查用户权限访问指定的账户。一个类似缺少授权攻击从一个美国电话电报公司(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公路工程新材料项目可行性研究报告(参考范文)
- 年产2000套家具3万套钢木床板项目可行性研究报告写作模板-备案审批
- 《表面涂色的正方体》(教学设计)-2024-2025学年六年级上册数学苏教版
- 2025年一建机电工程师考试经济与造价管理题库深度解析
- 2025年高压电工考试题库:高压电力系统运行优化与电力系统过电压试题
- 2025年成人高考语文《语言表达与运用》全真模拟实战题库试题
- 2025年电工中级职业技能考试真题卷:电力线路施工与管理综合试题集
- 2025年电工中级职业技能考试真题卷:电气设备运行维护与管理案例分析试题
- 2025年高尔夫球教练职业能力测试卷:高尔夫球运动市场营销策略
- 2025年小学语文毕业升学考试全真模拟卷(文学名著阅读)-名著阅读与语文教学实践试题
- 茶百道结业试题及答案
- 2025年濮阳职业技术学院高职单招语文2019-2024历年真题考点试卷含答案解析
- 农田水土保持的技术与治理策略研究试题及答案
- 2024农业考试重要措施试题及答案
- 甲亢病人护理讲课
- 2025年安徽滁州中盐东兴盐化股份有限公司招聘笔试参考题库含答案解析
- 2024年陕西高中学业水平合格考试化学试卷真题(含答案详解)
- 2025年金丽衢十二校高三语文第二次模拟联考试卷附答案解析
- 国际贸易实务与案例教程题库及答案
- 2025新能源考试试题及答案
- 小学思政教育主题班会
评论
0/150
提交评论