4.4.9-测试弱密码更改或重置功能

本文详细探讨了在IT应用中测试和确保密码更改或重置功能的安全性,包括验证流程、常见漏洞、保护措施及适用场景,强调了遵循OWASP指南的重要性。
摘要由CSDN通过智能技术生成

测试弱密码更改或重置功能

ID
WSTG-ATHN-09

总结

对于任何要求用户使用密码进行身份验证的应用程序,必须有一种机制,用户在忘记密码时可以重新获得对其帐户的访问权限。虽然这有时可能是一个涉及联系网站所有者或支持团队的手动过程,但通常允许用户执行自助密码重置,并通过提供其他一些身份证明来重新获得对其帐户的访问权限。

由于此功能提供了破坏用户帐户的直接途径,因此安全实施至关重要。

测试目标

  • 确定密码更改和重置功能是否允许帐户被盗用。

如何测试

信息收集

第一步是收集有关哪些机制可用于允许用户在应用程序上重置其密码的信息。如果同一站点上有多个界面(例如 Web 界面、移动应用程序和 API),则应检查这些界面,以防它们提供不同的功能。

建立密码后,确定用户启动密码重置所需的信息。这可以是用户名或电子邮件地址(两者都可以从公共信息中获得),但也可以是内部生成的用户 ID。

一般关注点

无论使用何种特定方法重置密码,都需要考虑许多常见方面:

  • 密码重置过程是否比身份验证过程弱?

密码重置过程提供了访问用户帐户的替代机制,因此至少应与通常的身份验证过程一样安全。但是,它可以提供一种更简单的方法来破坏帐户,尤其是在它使用较弱的身份验证因素(如安全问题)时。

此外,密码重置过程可能会绕过使用多重身份验证 (MFA) 的要求,这可能会大大降低应用程序的安全性。

  • 是否有针对自动攻击的速率限制或其他保护措施?

与任何身份验证机制一样,密码重置过程应具有针对自动或暴力攻击的保护。有多种不同的方法可用于实现此目的,例如速率限制或使用 CAPTCHA。这些对于触发外部操作(如发送电子邮件或短信)或用户输入密码重置令牌的功能尤为重要。

还可以通过在连续尝试一定次数后将帐户从密码重置过程中锁定来防止暴力攻击。但是,这也可能阻止合法用户重置其密码并重新获得对其帐户的访问权限。

  • 它是否容易受到常见攻击?

除了本指南中讨论的特定领域外,检查其他常见漏洞(如 SQL 注入或跨站点脚本)也很重要。

  • 重置过程是否允许用户枚举?

有关详细信息,请参阅帐户枚举测试指南

电子邮件 - 已发送新密码

在此模型中,一旦用户证明了自己的身份,就会通过电子邮件向他们发送一个新密码。这被认为不太安全,主要有两个原因:

  • 密码以未加密的形式发送给用户。
  • 在提出请求时,帐户的密码会更改,从而有效地将用户锁定在其帐户之外,直到他们收到电子邮件。通过重复请求,可以阻止用户访问其帐户。

在使用这种方法时,应审查以下方面:

  • 用户是否被迫在初次登录时更改密码?

新密码通过未加密的电子邮件发送,如果用户不删除电子邮件,则可能会无限期地保留在用户的收件箱中。因此,应要求用户在首次登录后立即更改密码。

  • 密码是否安全生成?

密码应使用加密安全伪随机数生成器 (CSPRNG) 生成,并且应足够长,以防止密码猜测或暴力攻击。为了获得安全的用户友好体验,应使用安全的密码短语样式方法(即组合多个单词)而不是随机字符字符串生成它。

  • 是否将用户的现有密码发送给他们?

某些应用程序不会为用户生成新密码,而是向用户发送其现有密码。这是一种非常不安全的方法,因为它会在未加密的电子邮件中暴露其当前密码。此外,如果站点能够恢复现有密码,这意味着密码要么使用可逆加密存储,要么(更有可能)以未加密的纯文本存储,这两者都代表了严重的安全漏洞。

  • 从具有反欺骗保护的域发送的电子邮件是否?

该域应实现 SPF、DKIM 和 DMARC,以防止攻击者欺骗来自它的电子邮件,这可能被用作社会工程攻击的一部分。

  • 电子邮件是否被认为足够安全?

电子邮件通常是未加密发送的,在许多情况下,用户的电子邮件帐户不会受到 MFA 的保护。它也可以在多个人之间共享,尤其是在公司环境中。

根据正在测试的应用程序的上下文,考虑基于电子邮件的密码重置功能是否合适。

电子邮件 - 链接已发送

在此模型中,用户将通过电子邮件收到一个包含令牌的链接。然后,他们可以单击此链接,并提示他们在网站上输入新密码。这是用于密码重置的最常见方法,但实现起来比前面讨论的方法更复杂。要测试的关键领域是:

  • 链接是否使用 HTTPS?

如果令牌是通过未加密的 HTTP 发送的,则攻击者可能会拦截它。

  • 该链接可以多次使用吗?

链接在使用后应过期,否则它们会为帐户提供持久的后门。

  • 如果链接未使用,链接是否会过期?

链接应有时间限制。确切的时间合适将取决于网站,但很少超过一个小时。

  • 令牌是否足够长且随机?

该过程的安全性完全依赖于攻击者无法猜测或暴力破解令牌。令牌应使用加密安全伪随机数生成器 (CSPRNG) 生成,并且应足够长,以至于攻击者无法猜测或暴力破解。至少 128 位(或 32 个十六进制字符)足以使这种在线攻击变得不切实际。

绝不应基于已知值生成令牌,例如,通过使用md5($email)获取用户电子邮件的 MD5 哈希值,或使用可能使用不安全的 PRNG 函数的 GUID,或者甚至可能不是随机的,具体取决于类型。

随机令牌的另一种方法是使用加密签名的令牌,例如 JWT。在这种情况下,应该进行通常的JWT检查(签名是否经过验证,是否可以使用“nONe”算法,HMAC密钥是否可以被暴力破解等)。有关详细信息,请参阅测试 JSON Web 令牌指南

  • 链接是否包含用户 ID?

有时,密码重置链接可能包括用户 ID 和令牌,例如 reset.php?userid=1&token=123456.在这种情况下,可以修改 userid 参数以重置其他用户的密码。

  • 您可以注入不同的主机标头吗?

如果应用程序信任 Host 标头的值并使用它来生成密码重置链接,则可以通过将修改后的 Host 标头注入请求来窃取令牌。有关详细信息,请参阅主机标头注入测试指南

  • 链接是否暴露给第三方?

如果用户进入的页面包含来自其他方的内容(例如从其他域加载脚本),则 URL 中的重置令牌可能会在这些请求中发送的 HTTP Referer 标头中公开。HTTP Referrer-Policy 标头可用于防止这种情况,因此请检查是否为页面定义了一个标头。RefererReferrer-Policy

此外,如果页面包含任何跟踪、分析或广告脚本,令牌也将向它们公开。

  • 从具有反欺骗保护的域发送的电子邮件是否?

该域应实现 SPF、DKIM 和 DMARC,以防止攻击者欺骗来自它的电子邮件,这可能被用作社会工程攻击的一部分。

  • 电子邮件是否被认为足够安全?

电子邮件通常是未加密发送的,在许多情况下,用户的电子邮件帐户不会受到 MFA 的保护。它也可以在多个人之间共享,尤其是在公司环境中。

根据正在测试的应用程序的上下文,考虑基于电子邮件的密码重置功能是否合适。

通过短信或电话发送的令牌

另一种方法是通过短信或自动电话发送令牌,而不是在电子邮件中发送令牌,然后用户将在应用程序上输入令牌。要测试的关键领域是:

  • 令牌是否足够长且随机?

以这种方式发送的令牌通常较短,因为它们旨在由用户手动键入,而不是嵌入到链接中。应用程序使用六位数字是相当普遍的,它只提供 ~20 位的安全性(对于在线暴力攻击是可行的),而不是通常更长的电子邮件令牌。

这使得保护密码重置功能免受暴力攻击变得更加重要。

  • 代币可以多次使用吗?

令牌在使用后应失效,否则它们会为帐户提供持久的后门。

  • 如果令牌未使用,它会过期吗?

由于较短的令牌更容易受到暴力攻击,因此应实现较短的过期时间,以限制攻击者执行攻击的可用窗口。

  • 是否有适当的速率限制和限制?

向用户发送短信或触发自动电话呼叫比发送电子邮件更具破坏性,并且可能被用来骚扰用户,甚至对他们的手机进行拒绝服务攻击。应用程序应实现速率限制以防止这种情况发生。

此外,短信和电话通常会给发送方带来财务成本。如果攻击者能够导致发送大量消息,这可能会给网站运营商带来巨大的成本。如果它们被发送到国际或溢价号码,则尤其如此。但是,允许国际号码可能是申请的一项要求。

  • 短信或电话是否被认为足够安全?

已经证明了各种攻击可以允许攻击者有效地劫持 SMS 消息,关于 SMS 是否足够安全以用作身份验证因素存在相互矛盾的观点。

通常可以通过物理访问设备来接听自动电话,而无需任何类型的 PIN 或指纹来解锁手机。在某些情况下(例如共享办公环境),这可能允许内部攻击者在另一个用户外出时走到他们的办公桌前,从而轻松重置他们的密码。

根据正在测试的应用程序的上下文,考虑短信或自动电话呼叫是否合适。

安全问题

安全问题可以用作验证用户身份的机制,而不是向他们发送链接或新密码。这被认为是一种较弱的方法,如果有更好的选择,则不应使用。

有关详细信息,请参阅弱安全问题测试指南。

经过身份验证的密码更改

一旦用户证明了他们的身份(通过密码重置链接、恢复代码或登录应用程序),他们应该能够更改他们的密码。要测试的关键领域是:

  • 设置密码时,可以指定用户ID吗?

如果用户 ID 包含在密码重置请求中且未经过验证,则可以对其进行修改并更改其他用户的密码。

  • 用户是否需要重新进行身份验证?

如果登录用户尝试更改其密码,则应要求他们使用当前密码重新进行身份验证,以防止攻击者临时访问无人参与的会话。如果用户启用了 MFA,则他们通常会使用该 MFA 而不是密码重新进行身份验证。

  • 密码更改表单是否容易受到 CSRF 的攻击?

如果不需要用户重新进行身份验证,则可能会对密码重置表单执行 CSRF 攻击,从而允许其帐户遭到入侵。有关详细信息,请参阅跨站点请求伪造测试指南。

  • 是否应用了强大而有效的密码策略?

密码策略应在注册、密码更改和密码重置功能之间保持一致。有关详细信息,请参阅测试弱密码策略指南。

引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值