原文:https://adsecurity.org/?p=4056

在近期举行的DerbyCon 8(2018年)会议上,Will Schroeder (@Harmj0y)、Lee Christensen (@Tifkin_)和Matt Nelson (@enigma0x3)探讨了信任AD所带来的意外风险。其中,他们提到了许多非常有趣的获取持久性和提权方法,不过,有一项内容引起了我的特别关注。

概述


Lee想出了一个场景,其中有一个帐户配置了无约束委派授权(这是相当常见的),并且在计算机上运行了Print Spooler服务,这样的话,我们就能够以用户的身份获取到发送给具有无约束委派授权的系统的身份验证信息。

我们发现,在审查和工作的环境中,约有90%都配置了某种Kerberos委派授权,大约75%的环境配置了无约束委派授权。无论是在2015年Black Hat的演讲(以及随后的演讲)中,以及这里的文章中,我都指出并强调了无约束委派授权所引发的安全问题。

我们可以利用下面的PowerShell命令,查找具有Kerberos委派授权的帐户(需要用到AD PowerShell模块):

Get-ADObject -filter { (UserAccountControl -BAND 0x0080000) -OR (UserAccountControl -BAND 0x1000000) -OR (msDS-AllowedToDelegateTo -like '*') } -prop Name,ObjectClass,PrimaryGroupID,UserAccountControl,ServicePrincipalName,msDS-AllowedToDelegateTo

攻击情形


攻击者找到了一个具有Kerberos无约束委派授权的系统,并攻陷了该系统。然后,攻击者向域控制器发送“RpcRemoteFindFirstPrinterChangeNotification”请求,这时,该域控制器就会对请求者的测试通信进行响应。如果域控制器正在运行Print Spooler(Spooler)服务,那就有好戏看了(实际上,通过测试就可以轻松找到1个运行此服务的DC,这绝非难事)。

Lee解释说,问题是任何经过身份验证的用户都可以远程连接到域控制器的打印服务器(假脱机程序服务),并请求对一个新的打印作业进行更新,并令其将该通知发送给具有无约束委派授权的系统。之后,它会将立即测试该连接,从而暴露计算机帐户凭证(因为打印假脱机程序的属主为SYSTEM)。Lee指出,微软表示系统就是这样设计的,“无需修复”。

Lee在Github上公布了名为SpoolSample的PoC示例代码

从概念层次来讲,攻击流程为:

  1. 攻击者发现并攻陷了一个具有Kerberos无约束委派授权的系统。
  2. 攻击者通过测试找到了一台运行Print Spooler(Spooler)服务的域控制器。
  3. 攻击者将MS-RPRN请求RpcRemoteFindFirstPrinterChangeNotification(Kerberos auth)发送到控制服务器的打印服务器。
  4. DC立即向请求者发送响应。该响应包含DC创建Kerberos服务票证(TGS),包括域控制器的计算机帐户Kerberos身份验证票证(TGT),这是因为这里涉及到Kerberos,并且请求帐户被配置了无约束委派授权。
  5. 由于攻击者已经拥有了域控制器计算机帐户Kerberos TGT,因此,可将其用于冒充DC。
  6. DCSync所有帐户身份验证信息(或根据需要,利用DA身份验证信息发动其他攻击)。

概念验证流程如图所示:

正如他们在谈话中提到的,要想攻击得手,需要满足的“要素”为:

  1. 具有Kerberos无约束委派授权的帐户。
  2. 能够攻陷该帐户。
  3. 域控制器作为打印服务器运行(Print Spooler服务正在运行)。

缓解措施


请注意,虽然本文关注的重点是域控制器,但所有服务器都可能面临遭受这种攻击的风险。

通过在所有不需要运行打印假脱机服务的服务器上禁用该服务来缓解问题,并确保没有为任何账户配置无约束委派授权。

在此,我们要特别感谢Will、Lee和Matt的精彩演讲!

相关的幻灯片

https://www.slideshare.net/harmj0y/derbycon-the-unintended-risks-of-trusting-active-directory

相关视频

https://youtu.be/-bcWZQCLk_4?t=2194

源链接

Hacking more

...