原文:https://www.n00py.io/2018/08/bypassing-duo-two-factor-authentication-fail-open/
在进行渗透测试时,如果能够通过远程桌面协议(RDP)连接到目标系统的话,通常是非常有利的。就我而言,一旦获得了执行各种操作所需的凭证,就会使用rdesktop或xfreerdp连接到相应的主机。可是,如果客户端使用Duo为Windows上的RDP访问提供了相应的保护的话,这种方法就会遇到问题。实际上,这还是一个非常棘手的问题,特别是当端口3389是跳板机器上开放的唯一端口的时候,则需要绕道其他网络。上次遇到这种情况时,偶然发现Alex Lomas在Pen Test Partners上发表了一篇文章,详细介绍了绕过这种双因子认证的具体方法。
当然,这种攻击方法能给奏效的前提是,目标机器已将其Duo配置为“失效开放(fail open)”模式。不过,这种设置实际上是非常普遍的,毕竟这是其默认设置。如果系统将Duo 2FA配置为失效关闭(fail closed),并且互联网无法正常连接或DNS存在问题,那么这种攻击将会失效。当然,对于所有组织而言,这种做法是无法接受的(当然,极少数组织除外),所以,失效开放(fail open)是最为常见的配置。
在本文中,我们将通过两种方式来演示如何绕过这种认证方法:
本地绕过方式
首先,设法获得shell。对于我来说,通常使用CrackMapExec + Metasploit或wmiexec.py,当然,除此之外,还有许多其他方法可用。利用不需要2FA认证的方法进入目标系统后,运行下列命令:
ipconfig /displaydns
通常情况下,我会将命令输出传递给一个文件,以防其内容过多,同时也便于解析。我们需要检查文件的内容,以找到相应的Duo API DNS条目。当然,每个独立的Duo安装都会有一个不同的API端点与之对应。
如果由于某种原因,DNS缓存中没有任何内容的话,则需要触发身份验证请求。如果必须这样做的话,请避免使用已注册过Duo的帐户,因为这样的话,系统很可能会向其手机发送推送消息、短信或电子邮件。
下一步是编辑系统上的hosts文件。这一步需要具有管理员权限。
然后,需要备份原始hosts文件。备份后,请修改当前hosts文件。这一步非常简单,只需在hosts文件后面追加一个条目,将Duo API端点映射到localhost即可。
此时,如果Duo设置为失效开放(fail open)的话,只需通过用户名和密码就可以进入系统了。完成后这些操作后,请恢复hosts文件。
网络绕过方式
如果您没有管理员凭据,或SMB/WMI/etc不可用的话,则可以通过中间人攻击(MITM)拒绝访问Duo API。
要执行该操作,我们可以借助于Bettercap。人们通常Bettercap描述为“用于802.11、BLE和以太网网络侦察和攻击的瑞士军刀”。对于本文来说,我们将使用它执行ARP欺骗攻击和DNS欺骗攻击。
第一步是执行ARP欺骗。在这里,目标需要设置为我们尝试访问的IP。Bettercap会欺骗主机,让它相信我们就是默认网关。要完成该攻击,攻击者必须与受害者位于同一广播域中。否则的话,攻击者必须借助ARP欺骗之外的其他方法来完成MITM攻击。
安装运行Bettercap后,输入下列命令:
>set arp.spoof.targets [VICTIM IP]
>arp.spoof on
Bettercap将自动启用转发功能。
注意:您必须以root身份运行Bettercap才能启用转发功能。
成功执行ARP欺骗攻击之后,还将需要执行DNS欺骗攻击。为此,可以在Bettercap中键入下列命令:
>set dns.spoof.domains *.duosecurity.com
>dns.spoof on
这将改变针对Duo安全子域的所有DNS查询,从而响应攻击者的IP地址——这就很好了,因为我们只是想破坏API的正常工作。
之后,攻击者就可以通过RDP登录系统,而无需进行2FA身份认证了。登录后,请退出Bettercap。Bettercap将重新发送针对目标的ARP查询,不过,DNS条目的过期需要一段时间,一般等待几分钟即可。
控制台绕过方式
对于这种方法来说,除了要求系统采用默认设置以外,还有其他的要求,但是,我确实发现一些客户端选中了第三个框,“仅在通过RDP登录时提示进行Duo身份验证”。很多时候,管理员会通过身份验证将远程攻击者拒之门外,但对具有物理访问权限的用户来说,通常会给予更多的信任。然而,问题在于,在某些情况下,攻击者也可以远程执行“本地”登录。
如果客户端是通过VMware或Hyper-V来实现某些基础架构的虚拟化的话,那么,我们就可以将其用作访问受Duo保护的系统的一种攻击路径。通常情况下,在获得凭据后,会有一个VMware web界面可供连接使用。此外,用户还可以连接Hyper-V或VSphere软件的客户端。完成连接后,攻击者就可以通过虚拟控制台连接所有虚拟化的系统了。当我们连接到控制台时,系统会像对待本地登录一样对待我们的登陆过程。因此,Duo是不会提示MFA的。
当然,在许多情况下,攻击者无需获得RDP访问权限就能实现自己的目的,但是,有时候获取该权限也是非常有用的。RDP很酷的一点是,如果我们使用能够生成有效会话的凭据进行连接的话,就能接管该用户的桌面会话。如果用户已经打开了KeePass、Lastpass或1Password之类的密码管理软件,或者他们主动登录到Web上的内部资源或通过其系统上的软件完成了相应的登录,则RDP访问权限就会变得非常有用。在登陆了内部Web资源的情况下,攻击者可以从磁盘上的浏览器中提取cookie,但是,对于某些东西来说,例如HTTP基本身份验证头部等,根本就不会驻留到硬盘驱动器上,所以,只能通过转储内存来恢复这些数据。虽然像KeeThief这样的工具有时可以在获得shell访问权限的情况下从内存中提取密码,但RDP通常可以让这个过程更加容易,并且还可以应付其他类型的密码管理软件或不太了解的、已经通过身份验证的各种软件。