导语:Duo与Microsoft Windows客户端和服务器操作系统集成,可以为远程桌面和本地登录添加双因素身份验证。不过Duo的双因素身份验证早在2018年就已经被绕过了。
Duo与Microsoft Windows客户端和服务器操作系统集成,可以为远程桌面和本地登录添加双因素身份验证。不过Duo的双因素身份验证早在2018年就已经被绕过了。
最近研究人员在使用Duo的双重身份验证解决方案时就是这种情况。然而,他们能够发现相同双因素身份验证的两种变体。这依赖于将受害者的推送通知重定向到攻击者控制的设备,从而授权访问受害者的账户。目前研究人员已经把这个问题提交给了Duo,详情请点击这里。
在仔细查看Burp中生成的HTTP流量时,研究人员决定对Duo进行再次查看。研究人员有额外的应用程序帐户,可以用来进行安全测试,这很重要,你很快就会看到。在典型的身份验证流程中,用户最终会触发通过POST请求发送到Duo终端的双因素身份验证,例如:
请求Duo API
研究人员使用攻击者帐户登录到应用程序,并捕获了前面提到的双因素身份验证请求。研究人员复制了请求(从Cookie标头向下的所有内容)并删除了请求。接下来,研究人员登录了第二个受害者的账户。拦截该请求后,研究人员将其替换为攻击者帐户请求。接下来,向攻击的目标账号的设备发送双因素身份验证请求。但研究人员现在可以伪装成受害者进行账号登陆了。现在,双因素身份验证已经发送到攻击者的设备了。
令人惊奇的是,它竟然奏效了。研究人员想这可能是一种侥幸,所以研究人员用其他账户和设备进行了类似地测试。
为了成功绕过,攻击者需要在其控制的设备上启用Duo的有效应用程序帐户,以及仅访问受害者的凭据的权限。
第一次绕过尝试
下一步是确定哪个请求参数标识了请求推送通知的用户,研究人员首先尝试使用Cookie值。比较并复制多个请求的Cookie值,以识别可能用于识别用户的任何部分,但没有任何结果。
接下来检查请求正文中的sid参数,此时研究人员再次查看了几个请求,试图识别sid的任何部分是否为标识符。在没有明确指示研究人员需要sid的哪一部分的情况下,他们只是复制了整个值。这招奏效了!研究人员现在可以只使用sid值而不是完整的请求来绕过双因素身份验证。
下图显示了绕过请求的示例流程:
原始受害者推送通知请求
受害者sid替换为攻击者的sid
概括起来就是,攻击者登录到应用程序,并请求发送一个双因素身份验证推送通知发送到目标设备。复制请求中的sid并删除请求,以使其永远不会到达Duo且不会触发推送通知。接下来,攻击者使用受害者的凭据登录并请求双因素身份验证推送通知。截获该请求,并将请求中的sid替换为先前复制的攻击者sid。这会将推送通知发送到攻击者的设备,使他们可以接受双因素身份验证提示。
现在研究人员可以在客户端应用程序上复制一个绕过流程,有人建议研究人员在能够访问的另一个Duo实例上尝试它,以确认问题是来自Duo还是来自客户端实现。经过一些测试,研究人员发现绕过也适用于Duo的第二个实例,这意味着这不是一个实现错误。
发现攻击变体
第一种方法非常不稳定,通常会失败,因为sid会严重超时,这使它对时间非常敏感,并且如果你花费太长时间进行复制/粘贴,则会失败。此时研究人员开始寻找另一种方法来可靠地进行绕过。
当请求双因素身份验证时,将返回一个事务ID (txid)。这个令牌被连续轮询以确认用户是否接受了推送请求。
服务器响应中的事务ID
发送到用户设备的推送通知
用户接受的推送通知和登录已批准
上面的屏幕截图显示当用户请求推送通知时,txid是从服务器返回的。然后,在随后的请求中使用txid来查询状态。通过在一个设备上接受推送,删除请求,然后将txid复制到另一个用户的请求中,你可以欺骗Duo,使其认为第二个用户已经接受了该推送。
这种绕过方法被证明是比较稳定的,它还允许用户在使用txid之前接受推送。
漏洞报告
研究人员已经撰写了一份详细说明绕过的报告发给了Duo Security。他们迅速做出反应并修复了漏洞。为了确认Duo是否进行了修复,研究人员尝试使用sid和txid值,但现在两种绕过方法都不起作用。
受害者用户双因素身份验证请求
带有攻击者txid的受害者请求
每次尝试任何绕过时,服务器都会以“无效的txid”响应。
本文翻译自:https://sensepost.com/blog/2021/duo-two-factor-authentication-bypass/如若转载,请注明原文地址