Az - Arc vulnerable GPO Deploy Script
识别问题
Azure Arc允许使用组策略对象方法将新的内部服务器(加入域服务器)集成到Azure Arc中。为了方便这一过程,Microsoft提供了一个部署工具包,用于启动入职流程。在ArcEnableServerGroupPolicy.zip文件中,可以找到以下脚本:DeployGPO.ps1、EnableAzureArc.ps1和AzureArcDeployment.psm1。
执行DeployGPO.ps1脚本时,会执行以下操作:
在本地域内创建Azure Arc服务器入职GPO。
将EnableAzureArc.ps1入职脚本复制到为入职流程创建的指定网络共享中,该共享还包含Windows安装程序包。
运行此脚本时,系统管理员需要提供两个主要参数:ServicePrincipalId和ServicePrincipalClientSecret。此外,还需要提供其他参数,如域、托管共享的服务器的FQDN和共享名称。还必须向脚本提供租户ID、资源组和其他必要信息。
使用DPAPI-NG加密在指定共享的AzureArcDeploy目录中生成加密的秘密。加密的秘密存储在名为encryptedServicePrincipalSecret的文件中。可以在DeployGPO.ps1脚本中找到此操作的证据,加密是通过使用ProtectBase64和$descriptor以及$ServicePrincipalSecret作为输入来执行的。描述符由域计算机和域控制器组SID组成,确保ServicePrincipalSecret只能被域控制器和域计算机安全组解密,如脚本注释中所述。
攻击
我们有以下条件:
我们已成功渗透内部网络。
我们有能力创建或控制活动目录中的计算机帐户。
我们发现了一个包含 AzureArcDeploy 目录的网络共享。
在 AD 环境中获取计算机帐户有几种方法。其中最常见的方法之一是利用计算机帐户配额。另一种方法涉及通过易受攻击的 ACL 或其他各种配置错误来 compromise 计算机帐户。
一旦获得机器账户,就有可能使用该账户进行身份验证。我们可以使用带有netonly标志的runas.exe命令,或者使用Rubeus.exe进行票据传递。
通过在内存中存储我们计算机帐户的TGT,我们可以使用以下脚本来解密服务主体密码。
Alternatively, we can use SecretManagement.DpapiNG.
此时,我们可以从存储在与encryptedServicePrincipalSecret文件相同的网络共享上的ArcInfo.json文件中获取连接到Azure所需的剩余信息。该文件包含诸如:TenantId、servicePrincipalClientId、ResourceGroup等详细信息。有了这些信息,我们可以使用Azure CLI来作为受损的服务主体进行身份验证。
参考
Last updated