Owasp Testing Guide v4

测试弱账户锁定机制 (OTG-AUTHN-003)

综述

账户锁定机制被用于减轻暴力猜解密码攻击。账户通常在3到5次失败登录尝试后被锁定,只能够经过预设一段时间后解锁,通过自助的解锁机制或让管理员介入。账户锁定机制需要在保护未认证访问和保护用户被拒绝合法访问两者直接取得平衡。

注意测试者应该覆盖所有需要锁定机制参与的认证方面,如在密码遗忘机制中的安全问题区域。(参见测试安全问答脆弱性 (OTG-AUTHN-008)

如果没有一个强大的锁定机制,应用程序可能受到暴力破解攻击影响。在被成功暴力破解之后,恶意用户就能够获得如下信息访问权限:

  • 秘密的信息或数据:web应用的私人区域可能暴露秘密文档、用户档案数据、金融信息、银行账户详情、用户的人际关系等等。
  • 管理版面:这部分可能被web管理员用来管理(添加、修改、删除)web应用内容,管理用户账户情况、向用户分配不同权限等等。
  • 进一步攻击的机会:认证区域可能包含公共区域未呈现的漏洞,也可能存在不对公共用户开放的高级功能。

测试目标

  1. 评估账户锁定机制减轻暴力破解攻击的能力。
  2. 评估解锁机制对非授权账户解锁能力的抵抗程度。

如何测试

通常为了测试锁定机制的强度,我们需要访问一个愿意被锁定也能够承担锁定结果的账户。如果你只拥有一个能够登录web应用的账户,那么将这个测试放在测试计划的最后部分来避免无法通过被锁定的账户进行其他测试工作。

为了评价账户锁定机制减轻暴力密码猜测的能力,尝试多次使用不正确的密码进行非法登录,接着使用正确的密码来验证被锁定的账户。一个测试例子可能是如下情形:

  1. 尝试错误密码登录3次。
  2. 使用正确密码登录,因此表明3次错误认证尝试不会触发锁定机制。
  3. 尝试错误密码登录4次。
  4. 使用正确密码登录,因此表明4次错误认证尝试不会触发锁定机制。
  5. 尝试错误密码登录5次。
  6. 尝试使用正确密码登录。应用程序返回“你的账户已经被锁定”信息,因此确认5次错误认证尝试将锁定账户。
  7. 尝试在5分钟后使用正确密码登录。应用程序返回账户被锁定信息,因此表明锁定机制没有在5分钟内自动解锁。
  8. 尝试在10分钟后使用正确密码登录。应用程序返回账户被锁定信息,因此表明锁定机制没有在10分钟内自动解锁。
  9. 尝试在15分钟后使用正确密码登录。成功登录,因此表明锁定机制的解锁时间在10-15分钟之间。

使用验证码也可能阻碍暴力破解攻击,但是他们有自己的脆弱性(参见 Testing for CAPTCHA),不应该替代锁定机制。

为了评估解锁机制对未授权账户解锁的抵抗能力,触发解锁机制,并找寻脆弱点。通常解锁机制需要秘密问题或邮件解锁链接。解锁链接应该是一次性的,来阻止攻击者猜测或重放链接来实行批量的暴力破解攻击。秘密问答应该足够健壮(参见测试安全问答的脆弱性)。

注意,解锁机制应该只适用在解锁账户上。不应该与密码回复机制相同。

在实现一个账户锁定机制时,应该考虑到以下因素:

  1. 针对应用程序的暴力破解攻击会带来什么风险?
  2. 验证码机制足够减轻这个风险了么?
  3. 在锁定前失败登录的次数。如果一个锁定阀值设定太低可能使得合法用户被多次锁定。太高又会导致攻击者能在锁定前获得更多的暴力尝试机会。根据应用程序的用途,5-10次失败登录尝试是一个通常的锁定阀值。
  4. 账户如何解锁?
    1. 管理员手动解锁:这是最安全的锁定方法,但是这可能导致用户的不便,并占用管理员“宝贵”的时间。
      1. 注意,如果管理员自身账户被锁定,他应该拥有一个恢复办法。
      2. 如果攻击者的目标仅仅是锁定应用程序所有的用户账户的话,这种解锁机制可能导致拒绝服务攻击。
    2. 一段时间之后解锁:锁定的时长是多久?是否能够有效保护应用程序?比如,5-30分钟的锁定时长可能是对于减轻暴力破解攻击和给合法用户带来不便之间的良好妥协。
    3. 通过自助服务机制:如同上文所述,这种自助服务机制必须足够安全来避免攻击者自己解锁账户。

参考资料

参见OWASP关于暴力破解攻击的文章: Brute Force

整改措施

根据风险等级来应用账户解锁机制,按照最低到最高的情形:

  1. 基于时间的锁定和解锁。
  2. 自助解锁服务(向注册邮箱发送解锁邮件)。
  3. 管理员手动解锁。
  4. 管理员根据用户提供的身份信息手动解锁。