OWASP Top 10 2022介绍
Posted 世界尽头与你
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OWASP Top 10 2022介绍相关的知识,希望对你有一定的参考价值。
OWASP Top 10 2022 介绍
- 1.失效的访问控制
- 2.加密机制失效
- 3.注入
- 4.不安全的设计
- 5.安全配置错误
- 6.易受攻击和过时的组件
- 7.识别和认证失败
- 8.软件和数据完整性故障
- 9.安全日志记录和监控失败
- 10.服务器端请求伪造(SSRF)
每年 OWASP(开放 Web 应用程序安全项目)都会发布十大安全漏洞。它代表了对 Web 应用程序最关键的安全风险的广泛共识。
1.失效的访问控制
访问控制实施策略以防止用户超出其指定权限范围进行操作。由于访问漏洞,未经身份验证或不受欢迎的用户可能会访问机密数据和进程以及用户权限设置。 元数据操作,包括篡改或重放 JSON Web 令牌 (JWT) 访问控制令牌,或修改 cookie 或隐藏字段以提高权限或利用 JWT 失效,都是访问控制漏洞的一个示例。第二个例子是违反默认拒绝原则。必须仅向特定角色、能力或用户授予访问权限,但每个人都可以访问。此类错误可能使攻击者可以轻松访问他们想要的一切。 但是,可以通过应用安全编码方法并采取预防措施(例如禁用管理员帐户和限制以及安装多因素身份验证)来避免访问安全机制不足以及身份或密码管理问题。
其他预防技术包括:
- 仅强制执行一次访问控制机制,并在应用程序期间重复使用它们,以减少跨域资源共享 (CORS)。
- 领域模型应该施加不同的应用程序业务限制约束。
- 限制对应用程序编程接口 (API) 和控制器的访问,以减轻自动攻击工具的影响。
- 在访问控制中记录故障并根据需要向管理员发出警报。
- 模型访问控制必须强制执行记录所有权,而不是授予用户创建、查看、修改或删除任何信息的权限。
2.加密机制失效
这里的重点在于经常暴露敏感数据的密码错误或缺少密码错误。以下是敏感信息泄露的典型例子
- 会话令牌
- 登录 ID 和密码
- 网上交易
- 个人信息(交换服务网络或SSN、健康记录等)
例如,应用程序可以使用自动数据库加密来安全地加密信用卡数据。不幸的是,当访问此信息时,它会立即未加密,从而导致 SQL 注入错误以明文形式提取信用卡信息,入侵者可能会利用这些信息。可以使用以下预防技术来避免这些故障:
- 您应该使用具有延迟因子的稳健、加盐和自适应哈希算法来存储密码,例如 scrypt、Argon2、PBKDF2 或 bcrypt
- 传输敏感数据时应避免使用文件传输协议 (FTP)和简单邮件传输协议 (SMTP)等旧协议
- 建议实施经过身份验证的加密,而不是仅仅使用加密
- 必须生成加密随机密钥并将其存储为字节数组。如果使用密码,则必须使用基于密码的密钥创建算法将其更改为类似于密钥的东西
3.注入
注入(或SQL 注入)是针对网站的数据库攻击,该网站使用结构化查询语言 (SQL) 来获取信息或执行通常需要经过身份验证的用户帐户的活动。程序很难从自己的代码中解释这些代码,从而允许攻击者进行注入攻击以访问受保护区域和伪装成受信任用户的敏感数据。注入包括SQL注入、命令注入、CRLF注入、LDAP注入等。
一些预防技术包括:
- 一个更可取的替代方案是使用完全避开解释器、提供参数化 API 或易位到对象关系映射 (ORM) 工具的 API。
- 建议使用积极的服务器端验证输入。许多应用程序,包括用于移动应用程序的文本字段和 API,都需要特殊字符。
- 在查询中使用
LIMIT
和其他 SQL 约束是避免 SQL 注入情况下大量数据暴露的好方法。
4.不安全的设计
这是 2021 年的一个全新类别,专注于设计和架构缺陷,需要更多地使用威胁建模、设计安全建议和参考架构。不安全的设计是一个广泛的类别,包含各种问题,例如“缺失或不充分的控制设计”。这并不意味着不安全的设计是所有其他十大风险类别的根源。
不安全的设计与不安全的实现不同。即使设计是安全的,实施缺陷也可能导致漏洞。另一方面,有缺陷的设计不能通过完美的实现来弥补,因为不存在必要的安全保护措施来防御特定的威胁。
可以通过采用以下预防技术来避免这些威胁:
- 在 AppSec 专家的协助下设置和使用安全的开发生命周期,以评估和构建安全和隐私保护措施。
- 建议对关键验证、访问控制、应用程序逻辑和基本流程进行威胁建模。
- 在用户故事中包含安全术语和控制。
- 所有层级的租户隔离设计也被视为一种实用的预防方法。
5.安全配置错误
一般的安全设置问题,就像配置错误的访问控制一样,通过为攻击者提供对关键数据和站点区域的快速和轻松的访问而造成重大危险。
常见解决方案:
- 系统化的强化过程允许快速轻松地部署安全环境。开发、质量控制和操作环境的配置应该是相似的,具有不同的用户权限。
- 它非常适合自动化流程以建立新的安全环境,以节省必要的时间和精力。应删除或不安装未使用的功能和框架。没有不必要的功能、组件、文档或演示的主要平台会降低配置漏洞的可能性。
6.易受攻击和过时的组件
大多数在线应用程序都是在第三方框架的帮助下创建的。未知的应用程序代码可能会导致不良结果和不良情况,例如违反口音控制、SQL 注入等。
如果程序不安全、不受支持或过时,则可能存在与漏洞相关的危害。该软件包包括应用程序/Web 服务器、操作系统、应用程序、数据库管理系统 (DBMS)、API、其他元素、库和运行时环境。
自动化方法可帮助攻击者找到配置不当或未打补丁的机器。例如,Shodan IoT 搜索引擎可以帮助用户发现易受 Heartbleed 威胁的设备,该威胁已于 2014 年 4 月修复。某些预防技术包括:
- 最好通过安全渠道从官方来源购买组件。
- 留意那些不起作用或不为旧版本提供安全更新的模块和元素。如果无法进行修补,请考虑开发虚拟补丁来观察、识别或防范观察到的漏洞。
- 删除任何过多的要求、功能、元素、文件夹或文档。
7.识别和认证失败
现在包含与识别问题相关的 CWE。当攻击者获取用户信息、密码恢复、ID 会话和其他登录凭据时,就会产生安全问题。顾名思义,身份和身份验证失败包括黑客利用此类漏洞利用身份验证不足。
如果应用程序允许自动攻击,例如凭证填充(当攻击者可以访问真实用户和密码列表)或预定义的、较弱的和常见的密码(例如“Password1”或“admin/admin”),这些可能是身份验证缺陷的迹象
为避免此类缺陷,必须考虑以下预防措施:
- 必须在可行的情况下使用多因素身份验证,以避免自动凭证填充、暴力攻击和被盗凭证的重复使用。
- 通过对照包含 10,000 个最差密码的数据库检查新密码或修改密码,可以提高密码安全性。
- 对每个结果使用相同的消息有助于防止对密码恢复、注册和 API 路径的帐户枚举攻击。
- 不要安装任何默认凭据,尤其是对于管理用户。
8.软件和数据完整性故障
随着越来越多的敏感信息存储在数据库中,容易受到安全漏洞的影响,数据完整性问题对于软件来说变得至关重要。
这是一个新类别,它侧重于假设软件更新、重要数据和 CI/CD 程序的完整性,而无需对其进行验证。一个例子是当应用程序使用来自内容交付网络 (CDN) 或未经授权的来源的扩展、模块或存储库时。未受保护的持续集成/持续交付 ( CI/CD ) 流程可能会增加恶意代码、系统受损或未经授权访问的风险。
预防技术包括:
- 人们可能会使用诸如数字签名之类的措施来确认数据或软件来自预期的来源而没有任何篡改。
- 软件供应链的安全工具,如 OWASP CycloneDX 或 OWASP Dependency-Check,可用于保证组件不包含设计缺陷。
- 有必要确保 CI/CD 工作流具有所需的分段、访问控制和参数化,以在整个设置和部署操作过程中保护代码完整性。
- 未经签名或未加密的编译数据不应发送给不受信任的客户端,除非已进行完整性测试或数字签名以识别数据更改或重复。
9.安全日志记录和监控失败
在存在可疑行为和事件的情况下缺乏跟踪可能会扩大不受监控的时间间隔,从而使安全漏洞被忽视的时间比使用更好的日志记录的时间更长。此 OWASP Top 10 2021 部分旨在帮助识别、升级和解决最近的违规行为。如果没有记录和监控,就不可能检测到安全漏洞。
- 确认所有身份验证、访问安全系统和服务器端数据验证问题都记录有足够的用户信息,以检测可疑或欺诈帐户,并存储足够长的时间以进行延迟的全面调查。
- 确保以日志管理系统可使用的格式创建日志。
- 创建或应用用于事件恢复和响应工作的策略,例如 NIST 800-61r2 或更高版本。
- 确保对日志数据进行适当编码,以避免对监控系统的入侵或网络威胁。
10.服务器端请求伪造(SSRF)
该类别的结果显示了高于平均水平的测试覆盖率、合理的低发生率以及高于平均水平的影响和利用评级。SSRF 是在服务器端查询未验证用户提供的 URL 的情况下开发的。这允许攻击者诱使应用程序将伪造请求传输到不希望的位置,即使该位置受到虚拟专用网络 (VPN)、防火墙或网络访问控制列表 (ACL) 的保护。
随着新的在线应用程序为最终用户提供方便的功能,获取 URL 已成为一种典型情况。因此,SSRF 患病率正在增加。此外,由于云服务和设计复杂性,SSRF 的强度正在增加。考虑到这一点,可以通过采用以下预防技术来避免此类攻击:
- 为了限制 SSRF 的影响,应该将远程资源访问功能分离到不同的网络中。
- 安装“默认拒绝”防火墙设置或网络访问控制规则,以阻止除必需的内部流量外的所有 Web 流量。
- 在 (TOCTOU) 情况下,为了防止 DNS 重新映射和“检查时间、使用时间”等攻击,最好注意 URL 的准确性。
OWASP TOP 10 – 终极漏洞指南(2021)
OWASP Top 10 是由开放 Web 应用程序安全项目 (OWASP) 建立的,该项目是一个非营利组织,可免费提供有关 Web 应用程序安全的文章和其他信息。
目录
什么是OWASP?
在 开放Web应用基金会致力于创造一个更安全的网络应用环境。它免费提供文章、工具、技术和论坛,让每个开发人员都能创建安全的代码。其最著名的项目之一是 OWASP Top 10。
OWASP 前 10 名名单
什么是 OWASP 前 10 名?
OWASP Top 10 是根据开放 Web 应用程序安全项目公开共享的 10 个最关键的 Web 应用程序安全漏洞列表。根据 OWASP,漏洞是应用程序中的一个弱点,它允许恶意方对应用程序的利益相关者(所有者、用户等)造成伤害。
OWASP Top 10 列表由全球 Web 应用程序安全专家开发并定期更新。它旨在教育公司了解他们需要缓解以保护其 Web 应用程序的漏洞和关键安全风险。
此列表也正在为移动应用程序开发 。
在 Top 10 列表旁边,OWASP 还发布和维护以下资源:
- OWASP 测试指南:应用程序测试的“最佳实践”
- OWASP Juice Shop:用于安全培训的故意不安全的 Web 应用程序
OWASP 前 10 名名单
1.注入攻击
一个 注入攻击 是指恶意代码的输入攻击者到应用程序迫使其执行命令妥协数据或整个应用程序。最常见的注入攻击类型是 SQL 注入和跨站点脚本 (XSS) 攻击,但也有代码注入、命令注入、CCS 注入等。
SQL 注入 是指利用由于用户输入中缺少元字符屏蔽或验证而导致的 SQL 数据库漏洞。
攻击者试图通过有权访问数据库的应用程序注入他自己的数据库命令。但是,由于请求未正确验证,插入的代码更改了原始 SQL 命令,因此更改了有利于攻击者的结果。
攻击成功后,攻击者可以窥探、修改或完全删除数据,并控制服务器。为此,攻击者有不同的方法来破坏系统。例如,可以通过响应时间或错误消息找到进入系统的途径。
如何防止SQL注入攻击?
避免注入缺陷的主要方法是将数据库中的数据与命令和查询分开,即将其与 Web 应用程序逻辑分开。这可以通过几种不同的方式实现,包括:
- 使用无需使用解释器或使用参数化查询的安全 API
- 引入积极的服务器端输入验证(白名单)
- 如果应用程序中需要特殊字符,则应尽可能通过特定解释器的转义语法避免使用这些字符
- 在查询中使用数据库控件,例如 LIMIT SQL 子句,以最大限度地减少注入成功时暴露的数据量
2. 破解认证
与身份验证和会话管理相关的应用程序功能 经常被错误地实现,允许攻击者破坏密码、密钥或会话令牌或利用其他实现缺陷来临时或永久地假设用户的身份。
攻击者可以利用该漏洞劫持用户会话,访问或修改其无权访问的信息。
如何防止损坏的身份验证漏洞?
为避免利用损坏的身份验证进行攻击,OWASP 建议采取以下措施:
- 引入确定密码弱点或强度的密码检查
- 将密码长度、复杂性和轮换与强大且现代的基于证据的密码策略保持一致
- 引入多因素身份验证,阻止使用被盗凭据、暴力攻击、填充等
- 使用服务器端安全会话管理器生成时间有限的新的随机会话 ID
- 避免 URL 中的会话 ID,安全地存储它们,并确保它们在用户注销、会话超时和空闲后失效
- 使用默认凭据时不允许部署
- 在监控失败的登录尝试时限制或延迟它们。检测到攻击时向管理员发出警报
3. 敏感数据暴露
敏感数据泄露是最常见的攻击之一。它包括访问、修改或窃取未受保护的静止或传输中的数据(传输的数据)。此类数据通常包括个人身份信息 (PII),例如凭据、健康记录、信用卡号等。缺乏加密是数据最终暴露的原因之一。
获取敏感数据访问权限的方法各不相同,但可能包括攻击者窃取密钥、执行路径攻击(也称为中间人)、从服务器或用户窃取明文数据等。
模糊测试 是一种使用无效、随机或意外数据来产生意外状态或访问隐藏特征的技术。有多种类型的模糊测试:
- 基于观察数据的模糊测试
- 在没有先前知识的情况下进行模糊测试
如何防止敏感数据泄露?
您可以采取多种措施来保护任何敏感数据免遭泄露。这些包括:
- 实施传输层安全性 (TLS) 以保护传输中的数据
- 尽可能避免存储敏感数据,或存储时间超过所需时间
- 加密所有需要存储的静态数据
- 通过 HTTP 严格传输安全 ( HSTS ) 或类似指令强制加密
- 不要缓存包含敏感数据的用户响应
- 对数据进行分类(处理、存储或传输)并根据分类应用控制
- 实施强大的标准算法、协议和密钥
- 使用哈希函数,例如 brcrypt、scrypt、Argon2、PBKDF2,这些函数总是对密码进行加盐和哈希处理
4. XML 外部实体 (XXE)
默认情况下,许多旧的或配置不当的 XML 处理器会评估 XML 文档中的外部实体引用。这可以被设法上传 XML 文档(例如 DOCX 或 SVG 文件)或在 XML 文档中包含恶意内容的攻击者利用。
在这种情况下,外部实体可用于使用文件 URI 处理程序提取内部文件。它们还可以启用内部文件共享、内部端口扫描、远程请求执行和拒绝服务攻击 (DOS) 的性能。
如何防止 XML 外部实体攻击?
为了防止这种攻击,开发人员需要接受培训以测试、识别和缓解 XXE。此外,OWASP 建议采取以下措施:
- 避免对潜在敏感信息进行序列化,并使用不太复杂的数据格式,例如 JSON
- 白名单服务器端输入验证,以避免通过 XML 文档发送恶意数据
- 通过 XML 模式验证传入的 XML,即 XSD 验证
- 确保定期修补或升级 XML 库和处理器
- 在解析器中完全禁用文档类型定义 (DTD) 处理(这也可以保护解析器免受 DOS 攻击)
- 手动查看 XXE 实例的源代码
5. 破坏访问控制
损坏的访问控制 是指对经过身份验证的用户的行为实施限制时存在的漏洞。当限制没有得到正确执行时,攻击者可以利用这个弱点来获得对系统功能和敏感个人数据的未经授权的管理访问。他们还可以创建、修改或删除数据。
如何防止访问控制失效?
为了有效地阻止访问控制,它必须在受信任的服务器端代码或无服务器 API 中强制执行。这将防止攻击者修改访问控制检查或元数据。OWASP 列出了以下措施来防止此类攻击:
- 排除公共资源,默认拒绝
- 引入访问控制机制并在整个应用程序中重复使用它们
- 强制记录所有权
- 记录和监控访问控制失败,如果需要通知管理员(重复登录尝试)
- 注销后使 JSON Web 令牌 (JWT) 无效
- 通过域模型强制执行独特的应用程序业务限制要求
- 确保元数据和备份文件不存在于 Web 根目录中
- 禁用网络服务器目录列表
- 执行功能访问控制单元和集成测试
此外,您可能想要:
- 删除不活动或不必要的帐户
- 对所有接入点实施多因素身份验证
- 如果不需要一些接入点,则减少接入点的数量
- 实施最小权限原则 (PoLP)
- 关闭服务器上不需要的服务
6. 安全配置错误
安全配置错误 是打开攻击面的常见问题。这通常是由于:
- 不安全的默认配置
- 不完整或临时配置
- 未修补的缺陷
- 未使用的页面
- 未受保护的文件和目录
- 开放云存储
- 错误配置的 HTTP 标头或加密
- 包含敏感信息的详细错误消息
不仅必须安全地配置所有操作系统、框架、库和应用程序,而且必须及时修补/升级它们。
像 Crashtest Security 这样的自动化渗透测试工具可以帮助检测安全漏洞,这些漏洞可能通过安全配置错误而导致漏洞。注册免费试用并 在几分钟内开始您的第一次扫描。
如何防止安全配置错误攻击?
OWASP 建议实施安全安装过程。除此之外,你应该:
- 开发和自动化一个流程,该流程允许快速轻松地部署配置相同但可通过不同凭据访问的安全环境
- 部署最小平台并删除未使用的功能和框架或不安装
- 引入分离组件和租户的分段应用架构
- 查看和更新所有安全说明、更新和补丁的配置,尤其是云存储权限
- 在所有环境中自动监控和验证安全配置的有效性
- 借助自动化工作流程实时解决安全问题
7. 跨站脚本(XSS)
跨站点脚本是将客户端脚本注入到 Web 应用程序中,这是通过不对用户输入进行验证和正确编码来实现的。恶意脚本在最终用户的浏览器中执行并启用各种攻击——从窃取他们的会话到监控和更改受影响网站上的任何操作。
存在不同类型的跨站点脚本攻击,具体取决于恶意脚本是非持久性注入还是持久性注入。此外,还区分了由客户端或服务器端有缺陷的输入验证引起的漏洞。
如何防止跨站脚本(XSS)?
根据 OWASP 的说法,防止此类攻击的主要方法是将不受信任和未经验证的数据输入与活动浏览器内容分开。这可以通过以下方式完成:
- 使用 React JS、Ruby on Rails 和其他在很大程度上避免 XSS 设计的框架
- 避免 HTML 中不受信任的 HTTP 请求数据,除非在 OWASP 备忘单系列“XSS 预防”中定义的允许插槽中
- 在 HTML 元素中插入任何不受信任的数据之前使用 HTML 编码
- 对基于 DOM 的 XSS 应用上下文敏感编码
- 实施内容安全策略 (CSP),为客户端资源创建源允许列表。如果没有允许通过本地文件插入恶意代码的漏洞,这将很有帮助
8. 不安全的反序列化
不安全反序列化 是一种攻击,其中将被操纵的对象注入到 Web 应用程序的上下文中。如果存在应用程序漏洞,则对象被反序列化并执行,从而导致 SQL 注入、路径遍历、应用程序拒绝服务和远程代码执行。
如何防止不安全的反序列化?
为了防止不安全的反序列化,OWASP 建议执行以下步骤:
- 拒绝来自不受信任来源的序列化对象
- 仅使用允许原始数据类型的序列化介质
- 实施数字签名以检查序列化对象的完整性
- 在反序列化期间强制执行严格的类型约束以检测意外子句
- 在可能的情况下,在低权限环境中隔离和运行反序列化代码以防止未经授权的操作
- 记录反序列化异常和失败的实例
- 监视和/或限制来自反序列化的服务器或容器的任何传出或传入网络连接
9.使用已知漏洞的组件
库、框架和其他软件模块等组件的权限与应用程序的权限相同。如果利用易受攻击的组件,则可能会丢失数据和服务器接管。使用具有已知漏洞的组件的应用程序和 API 可能会破坏应用程序防御并引发各种攻击和影响。这是一个普遍存在的问题。
为了帮助您评估您使用的组件是否存在已知漏洞,指纹扫描仪会尝试检测任何Web 服务器 或 Web 应用程序 框架以及服务器上运行的相关版本。
如何避免使用已知漏洞的组件?
要修复此类组件的使用,您应该:
- 仅通过安全链接使用来自官方来源的组件。使用签名的包来最小化包中包含恶意组件的可能性
- 监控任何未维护且未为旧版本提供安全补丁的库和组件
- 部署虚拟补丁以监控、检测和防范未打补丁组件的问题
- 删除所有未使用的依赖项以及不需要的功能、组件、文件和文档
- 保持客户端和服务器端组件及其版本和依赖项的最新清单。监控组件漏洞的重要来源,并尽可能自动化流程
- 在应用程序的生命周期内创建并持续执行监视、分类、更新或更改配置
10. 日志记录和监控不足
日志记录和监控不足,再加上与事件响应的集成缺失或无效,使攻击者能够进一步攻击系统,保持持久性,转向更多系统,并篡改、提取或破坏数据。
大多数违规研究表明检测违规的时间超过 200 天,通常由外部方而不是内部流程或监控检测到。
如何避免因日志和监控不足而导致的攻击?
为了防止由于此问题而出现的常见漏洞,OWASP 建议您:
- 在登录、访问控制失败和服务器端输入验证失败期间记录足够的用户上下文,并且日志数据保留足够长的时间。这将帮助您发现可疑活动和帐户
- 使用日志管理解决方案易于处理的日志格式
- 对所有高价值交易实施具有完整性控制的审计跟踪,以避免删除或篡改企图
- 使用监控和警报及时发现可疑活动并采取措施
- 引入事件响应和恢复计划以有效应对攻击
以上是关于OWASP Top 10 2022介绍的主要内容,如果未能解决你的问题,请参考以下文章
Web应用安全威胁与防治——基于OWASP Top 10与ESAPI的目录