测试弱锁定机制
ID |
---|
WSTG-ATHN-03 |
总结
帐户锁定机制用于缓解暴力攻击。使用锁定机制可以击败的一些攻击:
- 登录密码或用户名猜测攻击。
- 对任何 2FA 功能或安全问题进行代码猜测。
帐户锁定机制需要在保护帐户免受未经授权的访问和保护用户不被拒绝授权访问之间取得平衡。帐户通常在 3 到 5 次尝试失败后被锁定,并且只能在预定的时间段后通过自助解锁机制或管理员干预解锁。
尽管进行暴力攻击很容易,但成功攻击的结果是危险的,因为攻击者将拥有对用户帐户的完全访问权限,以及他们可以访问的所有功能和服务。
测试目标
- 评估帐户锁定机制缓解暴力密码猜测的能力。
- 评估解锁机制对未经授权的帐户解锁的抵抗力。
如何测试
锁定机制
要测试锁定机制的强度,您需要访问您愿意或负担得起锁定的帐户。如果只有一个帐户可用于登录 Web 应用程序,请在测试计划结束时执行此测试,以避免因被锁定而浪费测试时间。
若要评估帐户锁定机制缓解暴力密码猜测的能力,请尝试多次使用不正确的密码进行无效登录,然后使用正确的密码验证帐户是否已被锁定。示例测试可能如下所示:
- 尝试使用错误的密码登录 3 次。
- 使用正确的密码成功登录,从而表明锁定机制在 3 次不正确的身份验证尝试后不会触发。
- 尝试使用错误的密码登录 4 次。
- 使用正确的密码成功登录,从而表明在 4 次不正确的身份验证尝试后不会触发锁定机制。
- 尝试使用错误的密码登录 5 次。
- 尝试使用正确的密码登录。应用程序返回“您的帐户已锁定”,从而确认该帐户在 5 次不正确的身份验证尝试后被锁定。
- 5 分钟后尝试使用正确的密码登录。应用程序返回“您的帐户已锁定”,从而显示锁定机制不会在 5 分钟后自动解锁。
- 10 分钟后尝试使用正确的密码登录。应用程序返回“您的帐户已锁定”,从而显示锁定机制不会在 10 分钟后自动解锁。
- 15 分钟后使用正确的密码成功登录,从而表明锁定机制在 10 到 15 分钟后自动解锁。
CAPTCHA 可能会阻碍暴力攻击,但它们可能有其自身的一系列弱点,不应取代锁定机制。如果实施不当,可能会绕过 CAPTCHA 机制。CAPTCHA 缺陷包括:
容易击败的挑战,例如算术或有限的问题集。
- CAPTCHA 检查 HTTP 响应代码,而不是响应成功。
- CAPTCHA 服务器端逻辑默认为成功求解。
- CAPTCHA 质询结果永远不会在服务器端进行验证。
- CAPTCHA 输入字段或参数被手动处理,并且未正确验证或转义。
要评估 CAPTCHA 的有效性,请执行以下操作:
- 评估 CAPTCHA 挑战,并尝试根据难度自动提供解决方案。
- 尝试在不通过正常 UI 机制解决 CAPTCHA 的情况下提交请求。
- 尝试提交请求时故意验证码质询失败。
- 在使用测试代理(请求直接在服务器端提交)时,尝试在不解决 CAPTCHA 的情况下提交请求(假设某些默认值可能由客户端代码等传递)。
- 尝试使用常见的注入有效负载或特殊字符序列对 CAPTCHA 数据入口点(如果存在)进行模糊处理。
- 检查 CAPTCHA 的解决方案是否可能是图像的替代文本、文件名或关联隐藏字段中的值。
- 尝试重新提交先前确定的已知良好响应。
- 检查清除 Cookie 是否会导致 CAPTCHA 被绕过(例如,如果 CAPTCHA 仅在多次失败后显示)。
- 如果验证码是多步骤过程的一部分,请尝试直接访问或完成验证码之外的步骤(例如,如果验证码是登录过程的第一步,请尝试简单地提交第二步 [用户名和密码])。
- 检查可能未强制执行 CAPTCHA 的替代方法,例如旨在促进移动应用访问的 API 端点。
对可能需要锁定机制的每个可能的功能重复此过程。
解锁机制
要评估解锁机制对未经授权的帐户解锁的抵抗力,请启动解锁机制并查找弱点。典型的解锁机制可能涉及秘密问题或通过电子邮件发送的解锁链接。解锁链接应是唯一的一次性链接,以阻止攻击者猜测或重放链接并批量执行暴力攻击。
请注意,解锁机制只能用于解锁帐户。它与密码恢复机制不同,但可以遵循相同的安全实践。
修复
根据风险级别应用帐户解锁机制。从最低到最高保证的顺序:
- 基于时间的锁定和解锁。
- 自助解锁(向注册的电子邮件地址发送解锁电子邮件)。
- 手动管理员解锁。
- 使用正确的用户标识手动解锁管理员。
实施帐户锁定机制时要考虑的因素:
- 对应用程序进行暴力破解密码猜测的风险是什么?
- 验证码是否足以降低这种风险?
- 是否使用了客户端锁定机制(例如 JavaScript)?(如果是这样,请禁用要测试的客户端代码。
- 锁定前登录尝试失败的次数。如果锁定阈值太低,则有效用户可能经常被锁定。如果锁定阈值过高,则攻击者在锁定帐户之前可以尝试暴力破解帐户的次数就越多。根据应用程序的用途,5 到 10 次不成功的尝试范围是典型的锁定阈值。
- 如何解锁帐户?
- 由管理员手动操作:这是最安全的锁定方法,但可能会给用户带来不便,占用管理员的“宝贵”时间。
- 请注意,管理员还应该有一个恢复方法,以防他的帐户被锁定。
- 如果攻击者的目标是锁定 Web 应用程序所有用户的帐户,则此解锁机制可能会导致拒绝服务攻击。
- 一段时间后:锁定持续时间是多久?这足以保护应用程序吗?例如,5 到 30 分钟的锁定持续时间可能是缓解暴力攻击和给有效用户带来不便之间的一个很好的折衷方案。
- 通过自助服务机制:如前所述,这种自助服务机制必须足够安全,以避免攻击者自己解锁帐户。
- 由管理员手动操作:这是最安全的锁定方法,但可能会给用户带来不便,占用管理员的“宝贵”时间。
引用
-
请参阅有关暴力攻击的 OWASP 文章。