OWASP TOP 10 – 终极漏洞指南(2021)

Posted 琦彦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OWASP TOP 10 – 终极漏洞指南(2021)相关的知识,希望对你有一定的参考价值。

OWASP Top 10 是由开放 Web 应用程序安全项目 (OWASP) 建立的,该项目是一个非营利组织,可免费提供有关 Web 应用程序安全的文章和其他信息。

目录

什么是OWASP?

什么是 OWASP 前 10 名?

OWASP 前 10 名名单

1.注入攻击

2. 破解认证

3. 敏感数据暴露

4. XML 外部实体 (XXE)

5. 破坏访问控制

6. 安全配置错误

7. 跨站脚本(XSS)

8. 不安全的反序列化

9.使用已知漏洞的组件

10. 日志记录和监控不足


什么是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 前 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 – 终极漏洞指南(2021)的主要内容,如果未能解决你的问题,请参考以下文章

web漏洞类型概述(owasp top10笔记)

“OWASP Top 10 2017”之外常见漏洞的代码审计

网络安全入门之owasp top10漏洞详解

OWASP TOP 10(OWASP十大应用安全风险)

SQL注入详解|OWASP Top 10安全风险实践

OWASP TOP 10