携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情
断续器
什么是OWASP?
开放 Web 应用程序安全项目 (OWASP) 是一个非营利组织,成立于 2001 年,旨在帮助网站所有者和安全专家保护 Web 应用程序免受网络攻击。OWASP在世界各地拥有32,000名志愿者,他们进行安全评估和研究。
OWASP的主要出版物包括OWASP Top 10,下面将更详细地讨论;OWASP 软件保障成熟度模型 (SAMM)、OWASP 开发指南、OWASP 测试指南和 OWASP 代码审查指南。
为什么OWASP前10名很重要?
OWASP Top 10是一个研究项目,为十大最严重的Web应用程序安全危险提供排名和补救建议。该报告以全球安全专家之间的协议为基础。根据漏洞的严重性、隔离安全缺陷的频率及其可能的影响程度对风险进行分级。
该报告的目的是让 Web 应用程序安全专家和开发人员了解最常见的安全风险,以便他们可以将报告的结果用作其安全实践的一部分。这有助于限制其 Web 应用程序中存在此类已知风险。
OWASP管理着前10名名单,自2003年以来一直在这样做。他们每2-3年更新一次列表,以跟上AppSec市场的变化和发展。OWASP 提供可操作的信息,并充当世界上许多大型组织的重要清单和内部 Web 应用程序开发标准。
审计员倾向于将组织在解决OWASP Top 10方面的失职视为一个迹象,表明它在合规性标准方面可能没有达到标准。将前 10 名纳入其软件开发生命周期 (SDLC) 表明了对行业安全开发最佳实践的普遍重视。
OWASP Top 10 2021中有哪些新功能?
OWASP的下图解释了2017年至2021年OWASP前10名的变化。请记住,OWASP 前 10 名是按重要性排序的 — 根据 OWASP 的说法,A01 是最重要的漏洞,A02 是第二重要的漏洞,依此类推。
- 绿箭是重要性提升的漏洞
- 橙色箭头是重要性降低的漏洞
- 黄色虚线箭头是已删除并合并到其他类别中的漏洞。
资料来源:水道科学基金。](owasp.org/www-project…)
哪些漏洞保留在列表中,但位置发生了变化?
-
- 上一篇:访问控制中断从#5上升到#1,因为OWASP发现94%的应用程序都有访问控制弱点。
- UP:加密故障,从“敏感数据泄露”重命名,从#3移至#2。这反映了加密在现代应用程序中的重要性日益增加。
- 上一篇:安全配置错误从#6上升到#5。OWASP 测试的 90% 的应用程序存在与安全相关的错误配置。
- 下降: 根据OWASP行业调查的数据,安全日志记录和监控故障(以前称为“日志记录和监控不足”)从#10上升到#6。
- 下行:注入从#1下降到#3,即使94%的测试应用程序都有某种类型的注入漏洞。
- 下降:根据OWASP的社区调查,易受攻击和过时的组件,以前称为“使用具有已知漏洞的组件”,从#9上升到#6。
- 向下:标识和身份验证失败,从“损坏的身份验证”重命名,由于标准身份验证框架的使用越来越多,从#2下降到#7。
哪些漏洞是新的或已从列表中删除?
- 新:不安全设计是一个新的漏洞,在列表中排名第4。这反映了人们越来越关注“左移”,并将安全性集成到整个开发生命周期中。
- 新:软件和数据完整性故障排在第 8 位,重点关注软件更新和 CI/CD 管道的完整性。这是对供应链攻击巨大影响的回应。
- 新:服务器端请求伪造在列表中排名第10位。这是用户在OWASP社区调查中投票的#1结果。
- 已删除:删除跨站点脚本和 XML 外部实体 (XXE) 并将其合并到其他类别(分别为注入和安全配置)中。
A01:2021 —访问控制中断
访问控制中断意味着攻击者可以获得对用户帐户的访问权限并充当用户或管理员,并且普通用户可以获得意外的特权功能。强大的访问机制可确保每个角色都具有明确且隔离的特权。
缓解访问控制中断
- 默认情况下拒绝访问,公共资源除外
- 构建强大的访问控制机制,并在整个应用程序中重用它们
- 禁用服务器目录列表,不将敏感数据存储在 root 中
- 速率限制 API 和控制器访问
- 注销后验证 JWT 令牌
相关阅读:
- 访问控制列表
A02:2021 -加密故障
加密故障(以前称为敏感数据泄露)涵盖对传输中数据和静态数据的保护。这包括密码,信用卡号,健康记录,个人信息和其他敏感信息。
对于PCI数据安全标准(PCI DSS)等标准或欧盟通用数据保护条例(GDPR)等数据隐私法规所涵盖的组织而言,这一点尤其重要。
Mitigating Cryptographic Failures
- 识别敏感数据并应用适当的安全控制。
- 除非绝对需要,否则不要存储敏感数据━丢弃敏感数据,使用标记化或截断。
- 使用强大的加密算法、协议和密钥加密所有静态敏感数据。
- 使用 TLS 和 HTTP HSTS 等安全协议加密传输中的数据。
- 禁用敏感数据的缓存。
- 使用强大的盐渍哈希函数(如Argon2,scrypt和bcrypt)存储密码。
相关阅读:
- 数据加密
A03:2021—注射
Web 应用程序中的注入漏洞允许攻击者向解释器发送恶意数据,从而导致在服务器上编译和执行该数据。一种常见的注入形式是 SQL 注入。
防止注射攻击
- 使用安全的API,完全避免使用解释器
- 使用肯定或“白名单”服务器端输入验证
- 转义特殊字符
- 在查询中使用 LIMIT 和其他 SQL 控件,以防止在 SQL 注入的情况下大量泄露记录。
相关阅读:
- SQL 注入
- 命令注入
A04:2021—不安全设计
不安全设计是一类由缺失或无效的安全控制引起的弱点。某些应用程序在构建时没有考虑安全性。其他人确实有一个安全的设计,但有实现缺陷,可能导致可利用的漏洞。
根据定义,不安全的设计无法通过正确的实现或配置来修复。这是因为它缺乏可以有效抵御重要威胁的基本安全控制。
防止不安全的设计
- 建立安全的软件开发生命周期 (SSDLC)
- 从软件开发的早期阶段利用应用安全实践
- 创建安全设计模式库,并使用它来构建新的应用程序
- 利用威胁建模来设计关键功能,如身份验证和访问控制
- 将安全问题和控制集成到所有用户情景中
A05:2021 -安全配置错误
安全配置错误是指整个应用程序堆栈中缺乏安全强化。这可能包括云服务权限配置不当、启用或安装不需要的功能以及默认管理员帐户或密码。现在还包括 XML 外部实体 (XXE),以前是一个单独的 OWASP 类别。
防止安全配置错误
- 为应用程序建立一个快速且易于部署的强化过程
- 以相同的方式配置开发、QA 和生产(使用不同的凭据)
- 所有系统都应具有最小的设置,没有不必要的功能和组件
- 应定期更新配置,应用修补程序和安全建议
- 建立自动化流程以验证所有环境中的安全配置
A06:2021 — 易受攻击和过时的组件
易受攻击和过时的组件(以前称为“使用具有已知漏洞的组件”)包括由不受支持的或过时的软件导致的漏洞。任何在不知道应用程序内部组件、其版本以及它们是否已更新的情况下构建或使用应用程序的人都会遇到此类漏洞。
防止易受攻击和过时的组件
- 从应用程序中删除未使用的依赖项、功能、组件和文件。
- 使用软件组合分析 (SCA) 工具在客户端和服务器端维护组件及其版本的清单
- 持续扫描库及其依赖项以查找易受攻击的组件
- 仅使用来自官方来源的组件,并且更喜欢签名包
- 紧急修复漏洞、删除受影响的组件或应用虚拟补丁
A07:2021 -标识和身份验证失败
标识和身份验证失败(以前称为中断的身份验证),此类别现在还包括与用户标识相关的安全问题。确认和验证用户身份以及建立安全的会话管理对于防止多种类型的漏洞利用和攻击至关重要。
缓解身份验证中断
- 实施多重身份验证
- 不使用默认凭据部署系统
- 检查前 10,000 个最差密码的列表
- 使用 NIST 800-63 B 第 5.1.1 节中的准则来记录已记住的机密
- 强化所有与身份验证相关的过程,如注册和凭据恢复
- 限制或延迟失败的登录尝试
相关阅读:
- 凭据填充
- 基于密码的攻击
A08:2021 - 软件和数据完整性故障
软件和数据完整性故障涉及容易受到完整性违规的代码和基础结构。这包括软件更新、敏感数据修改以及未经验证即可执行的 CI/CD 管道更改。不安全的 CI/CD 管道可能导致未经授权的访问、恶意软件的引入和其他严重漏洞。
全球关注具有自动更新的应用程序。在某些情况下,攻击者闯入供应链并创建自己的恶意更新。数千个组织因下载更新并将这些恶意更新应用于以前受信任的应用程序而受到损害,而无需进行完整性验证。
防止软件和数据完整性故障
- 使用数字签名或类似机制来验证软件或数据是否来自预期源且未被更改。
- 确保库和依赖项(如 npm 或 maven)从受信任的存储库中提取
- 建立代码和配置更改的审核流程
- 确保 CI/CD 管道具有正确的配置和访问控制
A09:2021 - 安全日志记录和监视失败
安全日志记录和监视故障(以前称为“日志记录和监视不足”)涉及应用程序检测安全风险并对其进行响应的能力中的弱点。如果没有日志记录和监视,则无法检测到违规行为。此分类中的故障会影响可见性、警报和取证。
防止安全日志记录和监视故障
- 确保记录登录、访问控制和服务器端输入验证
- 确保日志包含足够的上下文来识别可疑行为并启用深入的取证分析。
- 确保日志的格式与日志管理解决方案兼容
- 采取措施防止攻击者篡改日志数据
A10:2021 - 服务器端请求伪造
当 Web 应用程序基于用户指定的 URL 从远程资源拉取数据而不验证 URL 时,会发生服务器端请求伪造 (SSRF) 漏洞。即使受防火墙、VPN 或网络访问控制列表 (ACL) 保护的服务器,如果接受未经验证的 URL 作为用户输入,也可能容易受到此攻击。
防止服务器端请求伪造
- 避免接受客户端输入中的 URL,并在绝对必要时清理输入
- 将任何远程资源访问功能隔离在单独的网络中,以减少影响
- 使用“默认拒绝”防火墙策略阻止不需要的互联网流量
- 使用具有 URL 架构、端口和目标的肯定允许列表
- 禁用 HTTP 重定向
- 从不向客户端返回原始响应