技术主题

什么是 OWASP Top 10?

以问号为重点的信息技术项目图示

概述

开放Web 应用程序安全项目(OWASP)是一个开源应用程序安全社区,其目标是提高软件的安全性。OWASP Top 10 是一项行业标准指南,列出了最关键的应用程序安全风险,以帮助开发人员更好地保护其设计和部署的应用程序的安全。

由于安全风险不断演变,OWASP Top 10 列表会定期修订,以反映这些变化。在 2021 年发布的最新版 OWASP Top 10 中,一些不再构成严重威胁的漏洞类型被最有可能构成重大风险的漏洞类型所取代。

虽然 OWASP Top 10 是保护应用程序安全的良好开端,但它当然不应被视为终极目标,因为一些最受关注的漏洞并未进入 OWASP Top 10 2021。要防范软件弱点,防御者需要更广泛地审视整个信息技术堆栈。这意味着 IT 安全专业人员需要关注整个软件生态系统,并超越 "传统 "的漏洞来源。

OWASP 10 强

什么是 OWASP Top 10(2021 年)类别?

A1: 注射

只要向解释器发送不受信任的数据源,就会产生注入漏洞。用户输入的 SQL、LDAP、XPath 或 NoSQL 动态数据库查询中经常会出现这样的例子。攻击者在用户输入中注入代码,诱使查询解释器执行恶意命令。

是什么让应用程序容易受到注入缺陷的攻击?

  • 用户提供的数据未得到充分验证。
  • 运行动态查询时未进行足够的输入消毒。
  • 系统内用于恶意行为的敌对数据。

注射缺陷有什么影响?

  • 应用程序或底层主机受损。
  • 暴露敏感数据。
  • 生产力、声誉或收入损失。

Fortify 如何帮助解决注射缺陷?

  • 如果您是开发人员:Fortify 可检测注入漏洞,并提供针对特定类型的修复建议。
  • 如果您是质量保证部门或运营部门的人员:Fortify 在运行时验证代码,以减少控制。
  • 如果您在运营部门:Fortify 为 Java 和 .NET 注入尝试提供运行时日志和保护。

A2:验证失灵

在有状态应用程序中管理身份或会话数据时,可能会出现身份验证失效的情况。当注册、凭证恢复和 API 途径容易受到未过期会话令牌、暴力或账户枚举的影响时,就经常会出现这种情况。攻击者假冒合法用户的身份,控制账户并破坏数据、流程或系统。

是什么导致应用程序容易受到身份验证漏洞的影响?

  • 暴露、未正确失效或无法旋转会话 ID。
  • 密码政策不符合 NIST 800-63B 等标准。
  • 缺乏双因素身份验证(2FA)或允许自动攻击。

认证失效会产生什么影响?

  • 用户身份盗窃。
  • 失去用户信任。
  • 敏感数据泄露。

Fortify 可以提供哪些帮助?

  • 如果您是开发人员:Fortify 可检测并建议修复已损坏的身份验证问题。
  • 如果您在质量保证部门或运营部门:Fortify 动态验证身份验证和会话管理安全性。
  • 如果您在运营部门:Fortify 针对 Java 和 .NET 应用程序事件的运行时监控工具。

A3:敏感数据曝光

当应用程序访问未加密的数据,特别是个人身份信息 (PII) 和其他受监管的数据类型时,可能会出现敏感数据暴露问题。在传统应用程序中使用弱加密密码器、错误实施安全传输协议或未使用以数据为中心的安全措施时,经常会发现这样的例子。攻击者可以访问敏感的用户数据,从而在现实生活中获得控制权。

是什么导致应用程序容易受到敏感数据暴露的影响?

  • 通过 HTTP、SMTP 和 FTP 等协议以明文传输数据。
  • 以明文形式存储、传输或使用不必要的敏感数据。
  • 使用旧的、弱的或非标准的加密算法。

敏感数据暴露会产生什么影响?

  • 破坏受监管数据(如 HIPAA 或 GDPR)导致罚款。
  • 身份劫持导致的数据清洗或监控成本。
  • 不符合隐私法律法规。

Fortify 如何帮助解决敏感数据暴露问题?

  • 如果您是开发人员:Fortify 可识别敏感数据风险并自动进行问题审计。
  • 如果您是质量保证部门或运营部门的人员:Fortify ,通过模板化在应用程序上下文之外消除发现的问题。
  • 如果您在运营部门:Fortify Java 和 .NET 应用程序的仪器记录和保护。

A4:XML 外部实体

当包含外部实体引用的 XML 输入被配置较弱的解析器处理时,就会产生 XML 外部实体问题。在解析来自不受信任来源的 XML 输入、启用文档类型定义 (DTD) 或使用 SOAP 1.0 等未打补丁框架的应用程序中,经常会发现这样的例子。XML 无处不在--从 SVG 和图像文件到网络协议以及 PDF 和 RSS 等文档格式。攻击者在 XML 输入中引用外部实体,导致处理器被利用来提取数据、远程执行代码或影响网络服务。

是什么让应用程序容易受到 XML 外部实体的攻击?

  • 应用程序会解析 XML 文档,处理器已启用 DTD。
  • 使用 SAML 进行 SSO、SOAP(版本 1.2 之前)或 .NET Framework(版本 2.0 之前)。
  • 解析器接受不受信任的来源或插入不受信任的 XML 数据。

XML 外部实体有什么影响?

  • 敏感数据被盗。
  • 加载攻击者控制的 URL。
  • 拒绝服务攻击(DoS)。

Fortify 如何帮助 XML 外部实体?

  • 如果您是开发人员:Fortify 可检测易受攻击的 XML 解析器,并推荐缓解因素。
  • 如果您是质量保证或操作人员:Fortify 会自动扫描易受攻击的 XML 解析器并验证漏洞有效载荷。
  • 如果您在运营部门:Fortify 为 Java 和 .NET 应用程序中的问题提供运行时日志和保护。

A5:访问控制失灵

当代码和环境限制重叠不完整,或在多个地方对类似功能进行定义时,就会产生访问控制问题。当通过强行浏览受限页面或应用程序以多种方式和位置定义复杂的访问控制方法来破坏安全性时,就经常会出现这样的例子。攻击者可以破坏访问边界,窃取敏感数据或破坏运行。

是什么导致应用程序容易受到访问控制漏洞的影响?

  • 无需登录即可充当用户,或以用户身份登录后充当管理员。
  • 操纵元数据或令牌以获得未经授权或提升的权限。
  • 拜占庭式、未执行或分散的访问控制逻辑。

访问控制失灵会造成什么影响?

  • 未经授权的信息披露或敏感数据泄露。
  • 修改或销毁数据。
  • 接管网站管理或用户。

Fortify 如何帮助解决门禁系统损坏的问题?

  • 如果您是开发人员:Fortify 可自动进行审核,并允许模板化以删除在其他地方减轻的问题。
  • 如果您在质量保证和运营部门:Fortify 代理检测隐藏的攻击面和损坏的访问控制系统。
  • 如果您在运行:Fortify 针对 Java 和 .NET 应用程序的运行时访问控制日志记录工具。

A6:安全配置错误

安全配置错误缺陷可能是在配置应用程序或其底层环境时引入的。配置错误可能发生在应用程序堆栈的任何层级,从网络服务和应用程序服务器到容器和存储。默认账户和配置、"泄漏 "的错误信息或未打补丁的框架和服务就是常见的例子。攻击者可以获取部署信息和访问权限数据,从而破坏运行。

是什么导致应用程序容易受到安全错误配置的影响?

  • 不必要地启用默认端口和账户或未更改密码。
  • 出现错误和异常时,显示堆栈跟踪或其他信息。
  • 未针对堆栈任何部分造成的风险适当加固安全性。

安全配置错误会产生什么影响?

影响程度从信息泄露到系统完全崩溃不等。

Fortify 如何帮助解决安全配置错误问题?

  • 如果您是开发人员:Fortify 会在扫描过程中识别应用程序依赖关系和配置文件。
  • 如果您在质量保证和运营部门:Fortify 动态评估应用程序和服务器配置,以发现问题。
  • 如果您在运营部门:Fortify 提供用于报告环境风险的开源分析。

A7:跨站脚本

当不受信任、未经消毒的用户输入作为 HTML 的一部分被执行时,或者当用户受影响与恶意链接进行交互时,就会出现跨站脚本 (XSS) 漏洞。当来自 JavaScript 或 Flash 等语言的熟悉代码结构从不受信任的来源被接受,或被存储起来供另一个用户代理稍后显示时,就经常会出现这样的例子。攻击者可以在用户机器上执行远程代码、窃取凭据或从重定向网站发送恶意软件。

是什么让应用程序容易受到跨站脚本 (XSS) 的攻击?

XSS 有三种形式,通常以浏览器等用户代理为目标:

  • 反射 XSS:应用程序或应用程序接口在 HTML 输出中包含不受信任的输入。
  • 存储的 XSS:保存到磁盘的未消毒代码稍后会被用户操作触发。
  • DOM XSS:使用不受信任输入的应用程序、框架和应用程序接口。

跨站脚本 (XSS) 有什么影响?

  • 接管受害者在应用程序中的账户。
  • 从目标网络应用程序中检索数据。
  • 修改页面内容。

Fortify 如何帮助解决跨站脚本 (XSS) 问题?

  • 如果您是开发人员:Fortify 可检测代码中的 XSS 漏洞,并预测被利用的可能性。
  • 如果您是质量保证部门和运营部门的人员:Fortify 动态验证代码是否存在易受 XSS 影响的未扫描输入。
  • 如果您在运营部门:Fortify 可记录 Java 和 .NET 事件,包括未经授权的重定向。

A8:不安全的反序列化

当语言和框架允许将不受信任的序列化数据扩展到对象中时,就会引入不安全的反序列化缺陷,这通常发生在网络应用程序与用户通信或保存应用程序状态时。当开发人员对反序列化过程中可以自行执行的方法不加限制时,就经常会出现这样的例子。攻击者会利用这些在应用程序逻辑外调用的 "小工具链 "远程执行代码、拒绝服务或获取未经授权的访问。

是什么导致应用程序容易受到不安全反序列化的影响?

  • 应用程序反序列化不受信任来源的数据。
  • 在反序列化之前,应用程序不会验证源代码或内容。
  • 可接受的类别不列入白名单,以避免不必要的小工具暴露。

不安全的反序列化有什么影响?

  • 这些缺陷可能导致远程代码执行攻击,这是最严重的攻击之一。

Fortify 如何帮助解决不安全的反序列化问题?

  • 如果您是开发人员:Fortify 可检测源代码中的漏洞并提供组件分析。
  • 如果您在质量保证和运营部门:Fortify 动态运行应用程序的仪器,以验证攻击向量。
  • 如果您在运营部门:Fortify 针对 Java 和 .NET 事件(包括反序列化)记录日志。

A9:使用存在已知漏洞的组件

当开源或第三方框架和库被引入应用程序并以相同权限运行时,就会产生这些缺陷。在基于组件的开发过程中,由于缺乏对依赖关系相关风险的了解,组件或系统难以或无法打补丁,往往会出现这样的例子。攻击者已经利用易受攻击的组件造成了历史上一些最大的漏洞,尽管漏洞的范围可能从应用程序受损到远程代码执行不等。

是什么导致应用程序易受开源或第三方框架和库的影响?

  • 这可能是偶然的(如编码错误),也可能是故意的(如后置组件)。
  • 应用程序或环境使用未打补丁或过时的组件(应用程序现代化 至关重要的原因之一)。
  • 缺乏对第三方代码或嵌套依赖关系中漏洞的扫描。
  • 无法获得组件库存或忽略安全公告。

使用存在已知漏洞的组件会有什么影响?

虽然一些已知漏洞只会造成轻微影响,但一些最大的已知漏洞,如 Heartbleed 和 Shellshock,都是利用了共享组件中的已知漏洞。使用存在已知代码漏洞的组件会导致在受影响的服务器上远程执行代码,使攻击者完全控制机器。

Fortify 如何为开源安全提供帮助?

  • 如果您是开发人员:Fortify 通过 Sonatype 集成提供软件组件分析。
  • 如果您在质量保证和运营部门工作:Fortify 可在运行时自动对已知漏洞进行动态验证。
  • 如果您在运行:Fortify 针对 Java 和 .NET 应用程序组件的工具记录和保护。

A10:记录和监测不足

如果对攻击载体或应用程序不当行为不甚了解,或者没有遵循监控入侵指标的最佳实践,就会导致日志记录和监控缺陷不足。没有日志记录功能的遗留系统、未检查应用程序渗透测试的日志,或者日志没有提供足够的细节以了解攻击者的行为,都是常见的例子。攻击者通常需要平均 200 天左右的时间才能从外部发现攻击,从而建立持久性并转移到其他易受攻击的系统。

是什么导致应用程序容易受到日志记录和监控不足的影响?

  • 警告和错误不会生成日志信息,也不会生成不完整或不清晰的日志信息。
  • 日志存储在本地,没有篡改控制和/或不受监控。
  • 警报阈值和响应流程不足或导致无法采取行动。

日志记录和监控不足会产生什么影响?

大多数成功的攻击都是从漏洞探测开始的。允许此类探测继续进行会增加成功利用的可能性。攻击者可能会建立持久性,回溯应用程序和操作系统,窃取数据,或以其他方式在不被察觉的情况下获得对系统的未授权控制。如果没有适当记录或存储安全关键信息,就无法通过取证分析发现攻击源。如果攻击者能够控制日志记录功能,那么要发现问题可能会变得更加困难,甚至不可能。

Fortify 如何帮助解决日志记录和监控不足的问题?

  • 如果您是开发人员:Fortify 扫描应用程序和应用程序接口中的日志记录功能,查找漏洞。
  • 如果您在质量保证和运营部门:Fortify 动态扫描生成应用程序日志,以便进行充分性审查,就像笔测试一样。
  • 如果您在运行:Fortify Java 和 .NET 应用程序的仪器记录和保护。

OWASP 的新动向(2021 年)?

虽然距离上一次在 2017 年发布前 10 名仅过去了四年,但网络安全行业已经发生了许多变化,这让我们不得不三思而后行,考虑首要关注的问题或增加哪些新问题。

引入了三个新类别:

A04:2021

不安全的设计:这一类主要针对设计缺陷。之所以需要这个类别,是因为开发过程中的左移运动要求威胁建模也要左移。

A08:2021

软件和数据完整性故障:重点关注围绕软件更新、关键数据和 CI/CD 管道的假设,而不验证它们可能影响的完整性。这也包含了 A08:2017 - 不安全反序列化。

A10:2021

服务器端请求伪造 (SSRF):在社区调查中,该类别主要排在前 10 位。他们非常强调这个漏洞,因为它的可利用性和影响都高于平均水平。

其他变动

其他类别要么更名,要么移级,要么合并到其他类别中:

  • A01:2017 - 注射下移至 A:03。
  • A02:2017 - 验证失败更名为识别和验证失败,并下移至 A07。
  • A03:2017 - 敏感数据暴露被移至 A02,更名为密码故障,以更全面地解决根本原因,而不仅仅是症状。
  • A05:2017 - 破损访问控制被移至 A01,因为他们测试的 94% 的应用程序都显示存在某种形式的破损访问控制。
  • A06:2017--安全配置错误被上移一位至 A05。
  • A07:2017 - 跨站脚本 (XSS) 已并入 A03 注入。
  • A09:2017 - 使用存在已知漏洞的组件》被移至 A06,并更名为《漏洞和过时组件》。这一变化在很大程度上是由于社区将其列为清单中的第 2 位。
  • A10:2017 - 记录与监控不足》上移至 A09,现称为《安全记录与监控故障》。

想了解Fortify 如何帮助您的组织? 立即通过OpenText™ 开始 免费试用Fortify on Demand 15 天

我们能提供什么帮助?

脚注