一、什么是失效的身份认证?
大多数身份和访问管理系统的设计和实现,普遍存身份认证失效问题。会话管理是身份验证和访问控制的基础,并且存在于所有有状态应用程序中。攻击者可以使用指南手册来检测失效的身份验证,但通常会关注密码转储、字典攻击,或者在类似于钓鱼或社会工程攻击之后,发现失效的身份认证。
攻击者只需要访问几个帐户,或者只需要一个管理员帐户就可以破坏我们的系统。根据应用程序领域的不同,可能会导致放任洗钱、社会安全欺诈以及用户身份盗窃、泄露法律高度保护的敏感信息。
二、漏洞产生的原因
● 允许凭证填充,这使得攻击者获得有效用户名和密码的列表
● 允许暴力破解或其他自动攻击
● 允许默认的、弱的或众所周知的密码,例如 “123456”或“admin"
● 使用弱的或失效的验证凭证,忘记密码程序,例如“基于知识的答案
● 这是不安全的。
● 使用明文或弱散列密码(参见: A3:2017-敏感数据泄露)
● 缺少多因素身份验证或拥有失效的多因素身份验证
● URL中的会话ID暴露(例如URL重写)
● 在成功登录后不会更新会话ID
● 没有正确地使会话ID失效。当用户不活跃的时候,用户会话或认证令牌
● (特别是单点登录(SSO) 令牌) 没有正确注销或失效
三、如何防御
● 多因素身份验证以防止自动凭据填充、暴力破解和凭据盗用重放攻击。
● 不要使用任何默认凭据进行发布或部署,特别是对于管理员用户。
● 执行弱密码检查,例如根据前10000个最差密码的列表测试新设置或新更改的密码
● 确保密码长度、复杂性和轮换策略与NIST 800-63 B第5.1.1节中关于记忆秘密或其他现代的基于证据的密码策略的指南相一致。
● 通过对所有结果使用相同的message,确保注册功能、凭据恢复和API路径能够抵御帐户枚举攻击。
● 限制或延迟失败的登录尝试。记录所有登录失败的记录,并在检测到凭据填充、暴力破解或其他攻击时通知管理员。
● 使用服务器端的、安全的、内置的会话管理器,在登录后生成一个新的具有高熵的随机会话ID。会话ID不应在URL中,应安全存储,并在注销、空闲和绝对超时后失效。