首页 > 技术文章 > Vulnerabilities in multi-factor authentication:多因素身份验证漏洞

Zeker62 2021-08-19 17:01 原文

许多网站完全依赖使用密码的单因素身份验证来验证用户。但是,有些要求用户使用多种身份验证因素来证明其身份。

对于大多数网站来说,验证生物识别因素是不切实际的。但是,基于您知道的和您拥有的内容,同时看到强制性和可选的双因素身份验证two-factor authentication (2FA) 变得越来越普遍。这通常需要用户输入传统密码和他们拥有的带外物理设备的临时验证码

虽然攻击者有时有可能获得一个单一的基于知识的因素,例如密码,但能够同时从带外来源获得另一个因素的可能性要小得多。因此,双因素身份验证显然比单因素身份验证更安全。但是,与任何安全措施一样,它的安全性取决于其实施。实施不佳的双因素身份验证可能会被击败,甚至可以完全绕过,就像单因素身份验证一样。

还值得注意的是,只有通过验证多个不同的因素才能实现多因素身份验证的全部好处。以两种不同的方式验证同一因素不是真正的双因素身份验证。基于电子邮件的 2FA 就是这样的一个例子。尽管用户必须提供密码和验证码,但访问验证码仅依赖于他们知道其电子邮件帐户的登录凭据。因此,知识认证因素只是被验证两次。

双因素身份验证令牌

验证码通常由用户从某种物理设备读取。许多高安全性网站现在为此目的为用户提供专用设备,例如您可能用于访问在线银行或工作笔记本电脑的 RSA 令牌或键盘设备。除了专门为安全而构建之外,这些专用设备还具有直接生成验证码的优势。出于同样的原因,网站使用专用移动应用程序(例如 Google 身份验证器)也很常见。

另一方面,一些网站将验证码作为短信发送到用户的手机。虽然这在技术上仍在验证“你拥有的东西”的因素,但它很容易被滥用。首先,代码是通过短信传输的,而不是由设备本身生成的。这创造了代码被拦截的可能性。还存在 SIM 交换的风险,攻击者借此欺诈性地获取带有受害者电话号码的 SIM 卡。然后,攻击者会收到发送给受害者的所有 SMS 消息,包括包含其验证码的消息。

绕过两步验证

有时,两因素身份验证的实施存在缺陷,可以完全绕过它。

如果首先提示用户输入密码,然后在单独的页面上提示输入验证码,则用户在输入验证码之前实际上处于“登录”状态。在这种情况下,值得测试一下,看看在完成第一个身份验证步骤后是否可以直接跳到“仅限登录”页面。有时,您会发现网站在加载页面之前实际上并没有检查您是否完成了第二步。

实战链接:

有缺陷的两因素验证逻辑

有时,双因素身份验证中存在缺陷的逻辑意味着,在用户完成初始登录步骤后,网站无法充分验证同一用户是否正在完成第二步
例如,用户在第一步中使用其普通凭据登录,如下所示:

POST /login-steps/first HTTP/1.1
Host: vulnerable-website.com
...
username=carlos&password=qwerty

然后,在进入登录过程的第二步之前,他们会被分配一个与其帐户相关的 cookie:

HTTP/1.1 200 OK
Set-Cookie: account=carlos

GET /login-steps/second HTTP/1.1
Cookie: account=carlos

提交验证码时,请求使用此 cookie 来确定用户尝试访问的帐户:

POST /login-steps/second HTTP/1.1
Host: vulnerable-website.com
Cookie: account=carlos
...
verification-code=123456

在这种情况下,攻击者可以使用自己的凭据登录,然后account在提交验证码时将 cookie的值更改为任意用户名。

POST /login-steps/second HTTP/1.1
Host: vulnerable-website.com
Cookie: account=victim-user
...
verification-code=123456

如果攻击者随后能够暴力破解验证码,这将是极其危险的,因为这将允许他们完全根据用户名登录任意用户的帐户。他们甚至永远不需要知道用户的密码。

实战链接:

暴力破解 2FA 验证码

与密码一样,网站需要采取措施防止 2FA 验证码的暴力破解。这一点尤其重要,因为代码通常是一个简单的 4 位或 6 位数字。如果没有足够的蛮力保护,破解这样的代码是微不足道的。

一些网站试图通过在用户输入一定数量的错误验证码时自动将用户注销来防止这种情况发生。这在实践中是无效的,因为高级攻击者甚至可以通过为 Burp Intruder 的creating macros 来自动化这个多步骤过程。该Turbo Intruder扩展也可用于这一目的。

实战链接:

推荐阅读