OWASP Top 10 漏洞详解

_

OWASP Top 10 漏洞

OWASP top 10 是一个列出十种最常见Web应用程序安全风险的清单。通过在编写代码和执行测试时考虑这些风险,开发人员可以创建更安全的应用程序,保护用户机密数据免受攻击者的侵害。

什么是OWASP?

OWASP,即开放式全球应用程序安全项目,是一个专注于软件安全的非营利性基金会。他们的项目包括多个开源软件开发程序和工具包、本地分会和会议等。其中一个项目是维护OWASP Top 10,即Web应用程序面临的十大安全风险列表。

遵守OWASP确保代码安全

OWASP Top 10 是开发安全代码的重要基础资源。在我们2023年软件安全现状报告中,对759,445个应用程序的扫描发现,近70%的应用程序存在术语OWASP Top 10的安全漏洞。

OWASP Top 10 不仅仅是一个简单的列表。它使用OWASP风险评级方法论 对每个漏洞类别进行评估,并提供预防攻击的指南、示例、最佳实践以及每个风险的参考资料。通过学习,OWASP Top 10 图表上的漏洞及其解决方法,应用程序开发人员可以采取具体措施构建更安全的应用程序,帮助保护用户免受恶意攻击。

OWASP 测试指南

针对OWASP漏洞进行测试时安全应用程序开发的关键部分。大量的风险和潜在修复措施可能看起来令人望而生畏,但只要遵行几个简单的步骤,就很容易管理:

  • 将安全加入到你的开发过程中,而不是事后补救。

  • 在整个开发过程中反复测试你的代码是否符合安全标准。

  • 使用IDE和CI管道集成来自动化测试。

  • 识别第三方代码中的已知漏洞,确保你的程序不依赖于不安全的依赖项。

OWASP Top 10 漏洞

OWASP Top 10提供了对十大最关键的Web应用程序安全风险的排名和修复指南。该报告基于来自全球安全专家的共识,利用了OWASP开放社区贡献者的广泛知识和经验。风险根据发现的安全缺陷的频率、发现漏洞的严重性以及其潜在影响的程度进行排名。

该报告的目的是为开发人员和Web应用程序安全专业人员提供最普遍的安全风险的洞察,以便他们将报告的发现和建议纳入自己的安全实践,从而更大限度地减少应用程序中已知风险的存在。

A01:访问控制失效

当访问控制和授权执行不力导致攻击者访问未经授权的功能或数据时,就会出现此漏洞。当应用程序仅在初始身份验证或授权阶段验证访问控制,但未在整个应用程序的功能或操作中始终如一地执行这些访问控制时发生,也可能是由于缺少功能级访问控制发生。

访问控制失效意味着攻击者可以访问用户账户并充当用户或管理员,而普通用户可以获得非预期的特权功能。强大的访问机制可确保每个角色都具有明确且独立的权限。

示例: 一个应用程序允许更改主键,当这个主键被更改为另一个用户的记录时,该用户的账户可以被查看或修改。

解决方案:

  • 默认拒绝访问,公共资源除外。

  • 构建强大的访问控制机制并在整个应用程序中重复使用它们。

  • 禁用服务器目录列表并且不要在根目录中存储敏感数据。

  • 速率限制API和控制器访问。

  • 注销后验证JWT令牌。

  • Web应用程序防火墙(WAF)可以通过监控和执行访问控制来防止未经授权访问敏感对象或资源。

A02:加密故障

加密故障,以前称为敏感数据泄露,涵盖传输中和静止数据的保护。这包括密码、信用卡号、健康记录、个人信息和其他敏感信息。

示例: 一家金融机构未能充分保护其敏感数据,成为信用卡欺诈和身份盗窃的目标。

解决方案:

  • 识别敏感数据并应用适当的安全控制。

  • 除非绝对需要,否则不要存储敏感数据——丢弃敏感数据,使用标记化或截断。

  • 使用强加密算法、协议和密钥加密所有静态敏感数据。

  • 使用TLS和HTTP、HTTPS等安全协议加密传输中的数据。

  • 禁用敏感数据缓存。

  • 使用强加盐哈希函数(如Argon2、scrypt和bcrypt)存储密码。

A03:注入攻击

Web应用程序中的注入漏洞允许攻击者向解释器发送恶意数据,从而导致该数据在服务器上被编译和执行。常见的类型包括SQL注入和操作系统命令注入、现在还包括跨站脚本(XSS)。通过在输入字段中插入恶意代码,攻击者可以执行未经授权的命令、访问敏感数据库并可能控制系统。

示例: 应用程序在构建易受攻击的SQL调用时使用不可信数据。

解决方案:

  • 使用安全的API,完全避免使用解释器。

  • 使用正面或”白名单“服务器端输入验证。

  • 转义特殊字符。

  • 在查询中使用LIMIT和其他SQL控制,以防止在SQL注入的情况下大量泄露记录。

A04:不安全设计

不安全设计时2021年OWASP top 10中的新类别,它关注的是基本设计缺陷和无效控制,而不是弱实现或有缺陷的实现。

示例: 一家电影院连锁店允许团体预定折扣,需要为15人以上的团体支付押金。攻击者对这个流程进行威胁建模,一查看他们是否可以预定连锁店中各个影院的数百个座位,从而造成数千美元的收入损失。

解决方案:

  • 建立安全的软件开发生命周期。

  • 从软件开发的早期阶段开始利用应用程序安全实践。

  • 创建安全设计模式库,并使用它来构建新的应用程序。

  • 利用威胁模型来设计身份验证和访问控制等关键功能。

  • 将安全问题和控制整合到所有用户中。

A05:安全配置错误

应用程序服务器、框架和云基础设施时是可配置的,安全配置错误,例如过于宽泛的权限、未更改的不安全默认值或过于暴露的错误消息,例如保留默认账户、开放云存储等,可以为攻击者提供轻松入侵应用程序的途径。

2023年Veracode 软件安全状况报告显示,在去年引入新漏洞的应用程序中,有70%或更多报告了配置错误。

示例:默认账户及其原始密码仍然启用,使系统容易受到攻击。

解决方案:

  • 建立应用程序强化流程,快速且易于部署。

  • 对开发、QA和生产经i选哪个相同的配置。

  • 所有系统都应具有最小设置,不包含不必要的功能和组件。

  • 应定期更新配置,应用补丁和安全建议。

  • 建立自动化流程来验证所有环境中的安全配置。

A06:易受攻击和过时的组件

易受攻击和过时的组件,以前称为”使用具有已知漏洞的组件“,包括由不受支持或过时的软件导致的漏洞。任何人在不了解应用程序内部组件、版本以及是否更新的情况下构建或使用应用程序,都可能面临此类漏洞。

示例: 由于开发中使用的组件数量庞大,开发团队可能不知道或不了解应用程序中使用的所有组件,其中一些组件可能过时,因此容易受到攻击。

解决方案:

  • 从应用程序中删除未使用的依赖项、功能、组件和文件。

  • 使用软件组合分析(SCA)工具维护客户端和服务器端的组件及其版本的清单。

  • 持续扫描库及其依赖项以查找易受攻击的组件。

  • 仅使用来自官方来源的组件,并且优先使用签名的软件包。

  • 紧急修复漏洞、删除受影响的组件或应用虚拟补丁。

A07:身份识别和认证失效

身份验证、身份和会话管理中的弱点可能允许攻击者破坏用户账户、密码、会话令牌或利用不安全的会话处理。这些领域的故障可能导致自动攻击,例如凭证填充。

与密码相关的漏洞是这些风险的最常见的来源,因为许多人重复使用密码或者使用默认、弱或常见的密码。

会话管理问题也可能导致与身份验证相关的攻击,特别是如果用户会话或者身份验证令牌在注销或不活动期间未正确失效。

确认和验证用户身份以建立安全会话管理对于防范多种类型的漏洞和攻击至关重要。

示例: 一个Web应用程序允许使用弱密码或易于猜测的密码(例如:”password1“)

解决方案:

  • 实施多因素身份验证

  • 不要使用默认凭据部署系统。

  • 查看10,000个最弱密码列表。

  • 使用NIST 800-63 B地5.1.1节中有关记忆秘密的指导规则。

  • 强化所有与身份验证相关的流程,如注册和凭证回复。

  • 限制或延迟失败的登录尝试。

A08:软件和数据完整性失效

这是2021年的新类别,当应用程序依赖来自不受信任的来源、存储库和CDN的插件、库或模块时,就会出现这种情况。未经完整性验证的软件更新、关键数据和IC/CD管道,也可能会发生这种情况。

全球都对自动化更新应用程序感到担忧。在一些案例中,攻击者闯入供应链并创建了自己的恶意更新。数千家组织因下载更新并将这些恶意应用于之前受信任的应用程序而受到攻击,且没有进行完整性验证。

此外,不安全反序列化现在也包含在此条目中,这是一种反序列化缺陷,允许攻击者在系统中远程执行代码和提权等攻击。

示例: 应用程序反序列化攻击提供的恶意对象,使其容易受到攻击。

解决方案:

  • 使用数字签名或类似机制来验证软件或数据是否来自预期来源且未被更改。

  • 确保库和依赖项(例如npm或maven)从受信任的存储库中提取。

  • 建立代码和配置更改的审查流程。

  • 确保你的CI/CD管道具有正确的配置和访问控制。

A09:安全日志记录和监控失效

日志记录和监控是应该频繁在网站上执行的活动——未能这样做会妨碍及时发现和应对安全事件,从而难以识别和缓解攻击或未经授权的活动。这可能意味着可审计事件(例如登录、登录失败和高价值交易)无法识别或记录,并且应用程序无法实时检测到主动攻击。

示例: 可以审计的时间,如登录、登录失败和其他重要活动,未被记录,导致应用程序易受攻击。

解决方案:

  • 确保记录登录、访问控制和服务器端输入验证。

  • 确保日志包含足够的内容来识别可疑行为并进行深入的取证分析。

  • 确保日志的格式与日志管理解决方案兼容。

  • 采取措施防止攻击者篡改日志数据。

A10:服务器端请求伪造(SSRF)

当应用程序在从远程资源提取数据之前未验证或清理用户输入的URL时,就会发生这些漏洞。即使受到防火墙或其他防御措施的保护,攻击者也可以利用这些漏洞强制应用程序访问恶意Web目标。如果目标资源与其他系统具有信任关系(例如云元数据服务或后端API),也会导致这些攻击,从而允许攻击者向这些信任的服务发出请求并提取敏感信息或执行未经授权的操作。

示例: 如果网络架构未分段,攻击者可以使用连接结果或经过时间来连接或拒绝SSRF负载连接,以映射内部网络并确定内部服务器上的端口是打开还是关闭。

解决方案:

  • 避免在客户端输入中接收URL,如果绝对必要,请清理输入。

  • 将任何远程资源访问功能隔离在单独的网络中,以减少影响。

  • 使用”默认拒绝“防火墙策略来组织不需要的互联网流量。

  • 使用包含URL架构、端口和目标的正面允许列表。

  • 禁用HTTP重定向。

  • 永远不要向客户返回原始响应。

Nuclei:使用Nuclei查找漏洞的终极指南 2026-05-18
文件上传漏洞 2026-05-18

评论区