OWASP Top 10漏洞解析(7)- Identification and Authentication Failures
Web应用程序安全一直是一个重要的话题,它不但关系到网络用户的隐私,财产,而且关系着用户对程序的新人。随着Web应用程序功能持续增加,复杂性不断提高,这些程序也面临着越来越多的安全威胁和挑战。
为了帮助这些应用程序的开发团队和安全人员了解和防范这些威胁,提高安全意识,编写更安全的代码,OWASP(Open Web Application Security Project,开放式Web应用程序安全项目)发布了一份标准指南,称为OWASP Top 10。
这是一份关于Web应用程序安全风险的标准指南,它基于全球范围内的安全专家和数据提供者的共识,列出了当前最严重、最关键的10种Web应用程序安全风险,并提供了相应的防范措施和建议。OWASP Top10 每隔几年会更新一次(目前已经发布了六个版本,分别是2004年、2007年、2010年、2013年、2017年和2021年),最新的版本是在2021年发布的OWASP Top10:2021。
已解析的OWASP漏洞
- OWASP Top 10漏洞解析(1)- A1:Broken Access Control 访问控制失效:https://bbs.huaweicloud.com/blogs/400993
- OWASP Top 10漏洞解析(2)- A2:Cryptographic Failures 加密机制失效:https://bbs.huaweicloud.com/blogs/405125
- OWASP Top 10漏洞解析(3)- A3:Injection 注入攻击:https://bbs.huaweicloud.com/blogs/407990
- OWASP Top 10漏洞解析(4)- A4:Insecure Design 不安全的设计:https://bbs.huaweicloud.com/blogs/414812
- OWASP Top 10漏洞解析(5)- A5:Security Misconfiguration 安全配置缺陷: https://bbs.huaweicloud.com/blogs/420057
- OWASP Top 10漏洞解析(6)- A6:Vulnerable and Outdated Components:https://bbs.huaweicloud.com/blogs/424642
“认证及验证机制失效”缺陷详情
该缺陷曾经被称为"Broken Authentication",现在被叫做“认证及验证机制失效”,包含了与识别失败相关的CWE,并且从之前的第二名跌落到现如今第七名。可以这么说,确认用户的身分、认证、会话(session)管理对于防止与认证相关的攻击来说是至关重要的。
常见的“认证及验证机制失效”缺陷类型
如果应用程序存在以下情况,则可能有认证的漏洞:
- 允许自动化的攻击(比如credential stuffing),当攻击者拥有有效的用户名和密码的列表
- 允许暴力或其他自动化的攻击
- 允许默认的,脆弱的、或则常见的密码,比如"Password1"或"admin/admin"
- 使用脆弱或无效的认证恢复和忘记密码的流程,比如不安全的“只是相关的答案”
- 使用明码、加密或脆弱哈希算法的形式来存储密码数据
- 缺失或使用无效的多因素认证(multi-factor authentication)
- 在URL中泄露了session 标识符(session identifier)
- 成功登录之后重复使用了session 标识符
- 没有正确地注销session ID。在登出或则一段时间不活跃的时候,用户的session或则认证token(一般是单次登录SSO token)没有被合适的注销。
如何防止该缺陷的发生
落实以下几种方法,可以防止该缺陷的发生:
- 在可能的情况下,实施多因素认证(multi-factor authentication)来防止自动化认证撞库攻击、暴力破解、以及被偷窃的认证信息被重复利用的攻击。
- 不要交付或或部署任何默认的认证,特别是给管理者用户使用的。
- 实现弱密码的检查,比如测试新建或更改的密码是否存在于TOP 10000最差密码名单。
- 将密码长度、复杂度、和轮换政策与NIST(国家标准和技术机构)的800-63b中“第 5.1.1 节-被记忆的秘密或其他现代化基于证据的密码政策”保持一致。
- 对所有结果使用相同的讯息回应,确保注册、认证资讯恢复、以及 API 路径能够抵御帐号列举攻击(account enumeration attacks)。
- 限制或增加失败登入尝试的延迟。记录所有失败并在检测到撞库、暴力破解或其他攻击时发出告警。
- 使用一个服务器端、安全、内置的session管理器,在登录后会生成一个新的随机的高混乱度(high entropy)的session ID。Session 识别符不应该出现在URL里,应该是被秘密存储,并且在登出、限制和超时后需要被失效处理。
举个栗子
场景1
使用已知密码列表的认证撞库攻击是一种常见的攻击方式。假设一个应用程序没有实施针对自动化威胁或撞库攻击的保护,那么在在这种情况下,应用程序会被利用为一个密码预报工具来判断认证信息是否有效。
场景2
大多数的认证攻击是因为持续使用密码作为唯一的认证因素。一旦我们考虑最佳实践、密码轮换、以及复杂度要求,就会鼓励用户使用和重复使用弱密码。建议组织可以按照 NIST 800-63 停止这些做法并使用多因素认证。
场景3
应用程序的会话超时没有被设定正确。一个用户使用了公用电脑来连接到应用程序时,用户没有选择"登出"而是简单的关闭浏览器分页之后就离开了;而一个攻击者在一小时后使用了同一个浏览器,而前一个用户的信息仍然处于通过认证的状态。
参考链接
- 点赞
- 收藏
- 关注作者
评论(0)