OWASP Top10 2021
2021 年 OWASP 发布了全新的 OWASP Top 10。2021 年的 OWASP Top 10 发生了很多变化,新增三个类别,四个类别的命名和范围也发生了变化,同时对 Top 10 进行了一些合并。
值得一提的是,“失效的访问控制”这一漏洞从 2017 年的第五名,取代“注入”跃居榜首,成为最大的应用软件安全风险。原因在于 web 应用程序变得愈加复杂,而且它们经常是 API 的合集,当结合配置选项时,可引发配置不当、终端不受保护或交互无法预知的情况。
什么是 OWASP Top 10
OWASP 全称 开放式 Web 应用程序安全项目
。是一个非营利性的组织,2003 年该组织首次出版了 Top 10,也就是 10 项最严重的Web应用程序安全风险列表。
Top 10 总结了 Web 应用程序最可能、最常见、最危险的十大安全漏洞。
OWASP Top 10 中公布的漏洞,是最容易被黑客利用的,它也成为开发、测试及相关技术人员必须学会的知识。不少互联网公司的相关岗位面试中,OWASP Top 10 是最常被提及的。
了解 OWASP Top 10 可以有效避免自己的 Web 应用程序被黑客轻易攻破。
除了 OWASP Top 10,OWASP 创建了许多项目,例如容器安全十大风险、十大隐私风险、API 安全 Top 10、十大移动应用恶意行为等等,但风头均没有盖过 OWASP Top 10。
Top1 失效的访问控制(Broken Access Control)
https://owasp.org/Top10/zh_CN/A01_2021-Broken_Access_Control/
失效的访问控制,也叫越权,指的是在未对通过身份验证的用户,实施恰当的访问控制。攻击者可以利用这一漏洞,访问未经授权的功能或数据。
比如,访问其他用户的账户、查看敏感文件、修改其他用户的数据,更改访问权限等等,都属于失效的访问控制造成的后果。
常见的访问漏洞包括:
- 通过修改 URL、内部应用程序状态或 HTML 页面,或仅使用自定义 API 攻击工具来绕过访问控制检查。
- 允许将主键更改为其他用户的记录,允许查看或编辑其他人的帐户。
- 特权提升。在未登录的情况下充当用户或以用户身份登录时充当管理员。
- 元数据操作,例如重放或篡改 JSON Web 令牌 (JWT) 访问控制令牌,或用于提升权限或滥用 JWT 失效的 cookie 或隐藏字段。
- CORS 错误配置允许未经授权的 API 访问。
- 强制以未经身份验证的用户身份浏览经过身份验证的页面或以标准用户身份浏览特权页面。访问 API 时缺少对 POST、PUT 和 DELETE 的访问控制。
Top2 加密机制失效(Cryptographic Failures)
https://owasp.org/Top10/zh_CN/A02_2021-Cryptographic_Failures/
之前的 Top 10 中,“加密失败”以前叫做“敏感数据泄露”,敏感数据泄露的根本原因是对数据加密存在有机可乘的漏洞,因此 2021 版改称为“加密失败”更贴切一些。
首先确定靜态资料及资料传输的防护需求,举例來说,密码、信用卡卡号、健康记录、个资、以及需要额外保护的营业祕密…等等主要被隐私法所保护的资料,如欧盟 GDPR 或 PCIDSS 等等金融业相关的资料保护法或标准。
对于需要加密或加密传输的数据,常见的漏洞包括:
- 数据采用明文形式传输,例如使用 HTTP、SMTP 和 FTP 等协议。必须验证所有的內部流量,如在负载平衡器、网站服务器、或后端系统之间。
- 默认情况下或在老代码中使用弱加密算法或过时的加密算法。
- 使用默认的加密密钥、生成弱加密密钥并重复使用、没有适当的密钥管理或轮换策略、加密密钥被写入源代码中等。
- 未强制执行加密。
- 用户代理不验证服务器证书是否有效。
Top3 注入(Injection)
随着大量主流框架被使用,发生注入攻击的概率也随之下降,“注入”也从 2017 年的第一位下降到第三位。
SQL 注入是典型的注入攻击,攻击者可以在 web 应用程序中事先定义好的查询语句的结尾,添加额外的 SQL 语句,从而实现非法操作。
常见的漏洞包括:
- 不验证、过滤和清理用户提供的数据。
- 没有上下文感知转义的动态查询或非参数化调用直接在解释器中使用。
- 在对象关系映射 (ORM) 搜索参数中使用恶意数据来提取额外的敏感记录。
- 直接使用或连接恶意数据。SQL 或命令包含动态查询、命令或存储过程中的结构和恶意数据。
Top4 不安全的设计(Insecure Design)
“不安全设计”是 2021 年新增的一个类型,它重点关注的是设计缺陷的风险,“不安全设计”代表的是一类漏洞。
例如:
- 购物网站没有做防刷限制,导致一个人获得大量优惠商品。
- 领域逻辑是用来处理基于收入等级的疫情减税但是并未确认所有的输入都是有正确的签名,因此提供超过原本可以获得而且更显著的减税利益。
Top5 安全配置错误(Security Misconfiguration)
https://owasp.org/Top10/zh_CN/A05_2021-Security_Misconfiguration/
90% 的 web 应用程序都经历过错误配置测试,这些将导致安全风险。
常见的漏洞:
- 在应用程序堆栈的任何部分缺少适当的安全强化或对云服务的权限配置不正确。
- 启用或安装了不必要的功能(例如,不必要的端口、服务、页面、帐户或权限)。
- 默认帐户及其密码仍处于启用状态且未更改。
- 错误处理向用户显示堆栈跟踪或其他信息过多的错误消息。
- 对于升级的系统,最新的安全功能被禁用或未安全配置。
- 应用程序服务器、应用程序框架(例如,Struts、Spring、ASP.NET)、库、数据库等中的安全设置未设置为安全值。
- 服务器不发送安全标头或指令,或者它们未设置为安全值。
- 软件已过时或易受攻击(请参阅 A06:2021-易受攻击和过时的组件)。
Top6 易受攻击和过时的组件(Vulnerable and Outdated Components)
https://owasp.org/Top10/zh_CN/A06_2021-Vulnerable_and_Outdated_Components/
如果客户端和服务器使用了易受攻击的组件版本,就可能成为被攻击者攻击的目标。
常见的漏洞有:
- 不知道所使用的组件的版本。
- 不定期扫描漏洞,不关注所使用组件的官方公告。
- 没有以基于风险的方式及时修复或升级底层平台、框架和依赖项。这通常发生在修补是变更控制下的每月或每季度任务的环境中,使组织面临数天或数月不必要地暴露于固定漏洞的风险。
- 软件开发人员不测试、升级或修补库的兼容性。
- 不保护组件的配置。
Top7 认证和授权失败(Identification and Authentication Failure)
https://owasp.org/Top10/zh_CN/A07_2021-Identification_and_Authentication_Failures/
通俗地说,该漏洞会导致攻击者使用用户的用户名和密码进行填充,从而入侵系统。
常见的漏洞有:
- 允许自动攻击,例如撞库,其中攻击者拥有有效用户名和密码的列表。
- 允许蛮力或其他自动攻击。
- 允许使用默认密码、弱密码或众所周知的密码,例如“Password1”或“admin/admin”。
- 使用弱或无效的凭据恢复和忘记密码流程,例如无法确保安全的“基于知识的答案”。
- 使用纯文本、加密或弱散列密码(请参阅 A3:2017-敏感数据泄露)。
- 缺少或无效的多因素身份验证。
- 在 URL 中公开会话 ID(例如,URL 重写)。
- 成功登录后没有轮换会话 ID。
- 没有正确的注销会话(session)ID。用户会话或身份验证令牌(主要是单点登录 (SSO) 令牌)在注销或一段时间不活动期间未正确失效。
Top8 软件和数据完整性故障(Software and Data Integrity Failures)
https://owasp.org/Top10/zh_CN/A08_2021-Software_and_Data_Integrity_Failures/
同样,这也是一个新增的类型,指的是在不验证完整性的情况下做出与软件更新、关键数据和 CI/CD 管道相关的假设。
举例来说:
- 物件或资料经过编码或序列化到一个对攻击者可读写之结构中将导致不安全的反序列化。
- 程序的依赖来自于不受信任来源,库及内容递送网路之外挂,函式库或模组。
- 不安全的持续性整合/部署(CI/CD)流程则会造成潜在的未经授权存取,恶意程式码或系统破坏。
- 现在许多应用程式拥有自动更新功能,但自动更新功能在缺乏充足完整性验证功能时就下载并安装更新到处于安全状态下的应用程式。攻击者能上传自制更新档案,更新档案将传播到所有已安装之应用程式并在这些应用程式上执行。
Top9 安全日志记录和监控失败(Security Logging and Monitoring Failures)
https://owasp.org/Top10/zh_CN/A09_2021-Security_Logging_and_Monitoring_Failures/
2017年以前,“安全日志记录和监控失败”叫做“日志记录和监控不足”,此类型已经扩展包括很多类型的漏洞。它指的是在没有日志记录和监控,将无法检测到漏洞,此类故障会直接影响可见性、事件报警和取证。
常见的漏洞:
- 不记录可审计的事件,例如登录、失败登录和高价值交易。
- 警告和错误不会生成、不充分或不清楚的日志消息。
- 不会监控应用程序和 API 的日志是否存在可疑活动。
- 日志仅存储在本地。
- 适当的警报阈值和响应升级流程没有到位或有效。
- DAST 工具(例如 OWASP ZAP)的渗透测试和扫描不会触发警报。
- 应用程序无法实时或接近实时地检测、升级或警告主动攻击。
- 通过使用户或攻击者可以看到日志记录和警报事件,您很容易受到信息泄漏的影响(请参阅 A01:2021–损坏的访问控制)。
Top10 服务器端请求伪造(Server-Side Request Forgery (SSRF))
https://owasp.org/Top10/zh_CN/A10_2021-Server-Side_Request_Forgery_%28SSRF%29/
当网页应用程式正在取得远端资源,却未验证由使用者提供的网址,此时就会发生伪造服务端请求。即便有防火墙、VPN 或其他网路 ACL 保护的情况下,攻击者仍得以强迫网页应用程式发送一个经过捏造的请求给一个非预期的目的端。