Pentesters 如何攻击 2FA(两因素身份验证)?

信息安全 验证 多因素
2021-08-29 00:35:12

我正在寻找攻击 2FA 的实用方法。您需要考虑什么以及如何测试 2FA 的有效性?我唯一的想法是你会攻击实现本身。

3个回答

作为渗透测试人员,您的目标是识别以前未知或未识别的威胁。

非常清楚,您在这里所做的任何事情都必须得到您的客户的明确授权。不这样做会给你带来严重的麻烦。如果您想了解有关法律堆栈交换中该问题的详细信息。

如果配置错误,攻击两个因素可能很容易。在许多情况下,存在退回到电子邮件的重置或绕过机制。如果配置正确,直接攻击就变得不切实际,您需要查看捕获令牌或直接破坏经过身份验证的应用程序的途径。

如果第二个因素是硬件令牌,您将需要 MitM 正在使用该令牌的应用程序。如果应用程序是 HTTP 或其他未加密的传输,这可以通过网络捕获来实现(不是真正的 MitM,但您需要一个 MitM 位置来进行捕获)。如果应用程序使用带有无效证书的 TLS,您可以通过 DNS 中毒来实现此目的(等待目标域的​​ DNS 请求并发送多个带有大 TTL 的 DNS 回复,将用户定向到您的 MitM 并使用其自己的自签名证书。如果应用程序正在使用带有有效证书的 HTTPS,您可以通过其他技术破坏端点并直接在用户代理上捕获令牌条目。可能值得破坏使用令牌的应用程序。如果他们使用 TOTP 令牌系统,您可以使用相同的令牌序列破坏最弱的服务,然后在到期窗口内重用令牌。如果他们使用像 Safenet Cryptocard 这样的托管一次性令牌系统,这将不起作用,因为令牌在使用时会被消耗而不管超时。诀窍是在第一次尝试时捕获令牌,将假值替换为真正的身份验证器,然后旁通道单独的会话进行身份验证。这样用户会认为他们打错了,然后重新尝试。当您处于该位置时,如果未采用设备/IP 锁定会话或反 CSRF 等补充防御措施,您可能能够直接劫持会话 cookie 或其他令牌。如果他们使用像 Safenet Cryptocard 这样的托管一次性令牌系统,这将不起作用,因为令牌在使用时会被消耗而不管超时。诀窍是在第一次尝试时捕获令牌,将假值替换为真正的身份验证器,然后旁通道单独的会话进行身份验证。这样用户会认为他们打错了,然后重新尝试。当您处于该位置时,如果未采用设备/IP 锁定会话或反 CSRF 等补充防御措施,您可能能够直接劫持会话 cookie 或其他令牌。如果他们使用像 Safenet Cryptocard 这样的托管一次性令牌系统,这将不起作用,因为令牌在使用时会被消耗而不管超时。诀窍是在第一次尝试时捕获令牌,将假值替换为真正的身份验证器,然后旁通道单独的会话进行身份验证。这样用户会认为他们打错了,然后重新尝试。当您处于该位置时,如果未采用设备/IP 锁定会话或反 CSRF 等补充防御措施,您可能能够直接劫持会话 cookie 或其他令牌。并旁通道一个单独的会话进行身份验证。这样用户会认为他们打错了,然后重新尝试。当您处于该位置时,如果未采用设备/IP 锁定会话或反 CSRF 等补充防御措施,您可能能够直接劫持会话 cookie 或其他令牌。并旁通道一个单独的会话进行身份验证。这样用户会认为他们打错了,然后重新尝试。当您处于该位置时,如果未采用设备/IP 锁定会话或反 CSRF 等补充防御措施,您可能能够直接劫持会话 cookie 或其他令牌。

如果第二个因素已经通过电子邮件完成,那么您的攻击向量是在 MX 上对入站 SMTP 的网络捕获。如果客户使用安全的外包提供商,这可能不切实际。如果他们运行自己的邮件服务器应该相对容易。

如果第二个因素是通过 SMS 完成的,则可能会发现您实际存在的令牌,因为许多手机都自动配置为即使在锁定时也能显示文本。有更复杂的攻击涉及破坏可以用于其他方式的手机。

社会工程是这里的终极黑客。如果你能以某种方式让用户通过冒充 IT 支持来给你打电话寻求帮助,否则他们可能会在你“帮助”他们解决问题时直接告诉你令牌。

让我想起了最近的这篇文章

(鼠标悬停有剧透)

一次网络钓鱼攻击使他使用了一个与谷歌类似的域名,并且具有有效的证书。

其他方法可能是:

  • 可预测的 OTP 令牌。
  • MITM 不存在加密或身份验证来保护传输中的数据,因此攻击者可以拦截和使用 OTP。
  • 也允许上述情况的弱加密或身份验证。
  • 实现中的逻辑缺陷 - 例如允许来自另一个用户帐户的 OTP,允许重复使用 OTP 等。
  • 可信设备令牌的弱点(可预测性、泄漏等)。这就是说在用于身份验证的设备上放置一个 cookie,以便将其标记为将来不需要第二个因素的受信任设备。
  • XSS 允许检索令牌。
  • CSRF 允许禁用两因素身份验证。
  • 2FA 重置(例如丢失的设备)使用安全性低得多的机制(例如,电子邮件帐户保持登录状态的物理攻击并禁用 2FA 只需单击一个链接)。

2FA 更安全,因此更难破解。但是,我记得过去听说过一种使用 SMS 验证作为第二个因素的服务方法。如果您有密码和电话号码,您可以尝试对移动提供商进行 SE 攻击,并尝试让代理将消息重定向到您的号码。因此,所有 SMS 验证码都会发送给攻击者。