导语:大多数组织使用组策略将Active Directory组添加到计算机上的本地组中(通常为管理员组)。使用PowerView,我们可以轻松发现在工作站和服务器上具有管理权限的AD组(这是非常典型的用例)。
大多数组织使用组策略将Active Directory组添加到计算机上的本地组中(通常为管理员组)。使用PowerView,我们可以轻松发现在工作站和服务器上具有管理权限的AD组(这是非常典型的用例)。
在下面的截图中,我们看到企业组织已经配置了以下GPO:
GPO:“将服务器管理员添加到本地管理员组”
本地组:管理员组
AD组:服务器管理员(示例中显示了SID)
GPO:“将工作站管理员添加到本地管理员组”
本地组:管理员组
AD组:工作站管理员(示例中显示了SID)
我们还可以使用PowerView来确定哪些AD组对OU具有对计算机的管理权限。
Active Directory对象权限(ACL)
与文件系统权限类似,Active Directory对象也具有权限。
这些权限称为访问控制列表(ACL)。设置对象的权限使用了一种名为安全描述符定义语言 (SDDL)的隐晦格式,如下所示:
D:PAI(D; OICI; FA ;;; BG)(A; OICI; FA ;;; BA)(A; OICIIO; FA ;;; CO)(A; OICI; FA ;;; SY)(A; OICI; FA ;;; BU)
上述格式是由GUI翻译,以提供更方便友好的使用格式(见下面的屏幕截图)。
每个Active Directory对象都具有在其上配置的权限,显式定义或从其父对象继承(通常为OU或域),并且可以将权限定义为允许或拒绝对象及其属性的权限。
执行Active Directory安全性评估时,我们扫描Active Directory的AD ACL,并根据AD对象(如域,OU,安全组等)上的委派来识别具有特权权限的帐户或用户组。
Active Directory中的每个对象都具有应用于其本身的默认权限,以及继承和任何显式权限。默认情况下,Authenticated Users对AD中的对象具有读权限,因此可以轻松地收集其大多数属性和对象,AD对象及其属性和定义的权限。
关于AD ACL的一个简要说明。系统容器中有一个名为“ AdminSDHolder ” 的对象,它只有一个目的:成为域中具有高级权限的对象(及其成员)的权限模板对象。
·SDProp Protected Objects (Windows Server 2008 & Windows Server 2008 R2):
Account Operators Administrator Administrators Backup Operators Domain Admins Domain Controllers Enterprise Admins Krbtgt Print Operators Read-only Domain Controllers Replicator Schema Admins Server Operators
大约每60分钟,PDC模拟器会运行一个进程来枚举所有这些受保护的对象及其成员,然后标记AdminSDHolder对象上配置的权限(并将admin属性设置为1)。这确保了特权组和帐户能够受到保护,免受不当的AD权限委派。
在AD对象的自定义权限的检查是非常困难的。例如,下图显示了OU上的权限。
这个OU的委派有一个严重的问题,下图中高亮显示的部分。
从下图可以看到具有完全控制权限的域控制器授权给了此OU的所有对象及其中包含的所有对象。
攻击者对提供特权操作的权限最感兴趣。这些ACL包括如下几个:
· Replicating Directory Changes All:扩展权限,提供复制对象的所有数据的能力,包括密码数据(我称之为域控制器模拟权限),可为AD用户和计算机“ DCSync ”密码数据提供“ DCSync ”功能。示例:FIM,Riverbed,SharePoint和其他应用程序通常在根域上授予权限给这些服务的服务账户。如果攻击者可以猜测到该密码(或者可能通过 Kerberoasting破解),那么他们现在就拥有该域的控制权限,因为它们可以为所有AD用户和计算机(包括域管理员和域控制器)提供DCSync密码散列。
· GenericAll:GenericAll =完全控制
权限创建或删除子项,删除子树,读取和写入属性,检查子对象和对象本身,从目录中添加和删除对象,并使用扩展权限进行读取或写入。
它提供对象和所有属性的完整权限,包括LAPS本地管理员密码和BitLocker恢复密钥等机密属性。在许多情况下,不需要完全控制权,但是比确定所需的实际权利更容易进行委派和工作。
示例:服务器组可以被委派给具有计算机对象与服务器关联的OU中的所有计算机对象上的完全控制。
· GenericWrite:提供对所有属性的写访问权限。
有权读取此对象的权限,写入此对象上的所有属性,并对该对象执行所有验证的写入。
· WriteDACL:提供修改对象上的安全性的能力,可以导致对象的完全控制。
在对象安全描述符中修改DACL的权限。
示例:可以授予服务帐户在AD中执行授权的权利。如果攻击者可以猜测到这个密码(或者可能通过Kerberoasting来破解它),那么他们现在就可以对关联的对象设置自己的权限,这些权限可以导致完全控制一个可能涉及LAPS受控本地管理员密码的对象。
· Self: 提供执行验证写入的能力。
执行受验证的写入权限控制的操作的权利。
验证的写入包括以下属性:
Self-Membership(bf9679c0-0de6-11d0-a285-00aa003049e2 / member attribute) Validated-DNS-Host-Name (72e39547-7b18-11d1-adef-00c04fd8d5cd / dNSHostName attribute) Validated-MS-DS-Additional-DNS-Host-Name (80863791-dbe9-4eb8-837e-7f0ab55d9ac7 / msDS-AdditionalDnsHostName attribute) Validated-MS-DS-Behavior-Version (d31a8757-2447-4545-8081-3bb610cacbf2 / msDS-Behavior-Version attribute) Validated-SPN (f3a64788-5306-11d1-a9c5-0000f80367c1 / servicePrincipalName attribute)
· WriteOwner::提供获取对象所有权的功能。对象的所有者可以获得对象的完全控制权限。
承担对象所有权的权利。用户必须是对象受托人。用户无法将所有权转让给其他用户。
· WriteProperty:通常与特定属性/属性信息配对。示例:委托帮助台用户组修改特定AD对象属性(如成员(修改组成员身份)),“显示名称”,“描述”,“电话号码”等)的功能。
· CreateChild:提供创建指定类型(或“全部”)对象的功能。
· DeleteChild:提供删除指定类型(或“全部”)对象的功能。
· 扩展权限:这是一个有趣的权限,因为它如果提供了明显超出范围的附加权限。示例:对计算机对象的所有扩展权限都可以提供对LAPS本地管理员密码属性的读访问权限。
Andy Robbin的(@ _Wald0)博文描述了这些权限可以被滥用的一些方式。
创建和链接域中的GPO的能力应被视为有效的域管理员权限,因为它提供了修改安全设置,安装软件,配置用户和计算机登录(以及启动/关闭)脚本以及运行命令的能力。
· 管理组策略链接(LinkGPO):提供将Active Directory中的现有组策略对象链接到定义权限的域,OU或站点的功能。默认情况下,GPO创建者的所有者拥有此权限。
· 创建GPO:默认情况下,AD组的组策略创建者的所有者拥有此权限。可以通过组策略管理控制台(GPMC)进行委派。
PowerView提供了搜索AD权限以获取更多有趣权限的功能。
SID History
SID历史记录是支持迁移方案的属性。每个用户帐户都有一个关联的安全标识符(SID),用于跟踪安全主体和连接到资源时帐户的访问权限。SID历史记录允许另一个帐户的访问权限被有效的克隆到另一个帐户。这是非常有用的一种做法,以确保用户在从一个域移动(迁移)到另一个域时能够保留原有的访问权限。由于在创建新帐户时用户的SID发生了更改,所以旧的SID需要映射到新的帐户。当域A中的用户迁移到域B时,将在DomainB中创建新的用户帐户,并将DomainA用户的SID添加到DomainB的用户帐户的SID历史记录属性中。这样就可以确保DomainB用户仍可以访问DomainA中的资源。
这意味着如果帐户在其SID History属性中包含了具有特权的帐户或用户组,则该帐户将分配到这些帐户或组的所有权限,不管它们是直接还是间接分配。如果攻击者获得对该帐户的控制权,则它们具有所有相关的访问权限。在SIDHistory中通过SID提供的权限可能不够明显,因此很容易发生遗漏。
组策略权限
此权限用于在Active Directory中创建,配置和链接组策略对象(GPO)。将GPO链接到OU时,GPO中的设置将应用于该OU中的相应对象(用户/计算机)。
可以配置GPO的权限,将GPO修改权限委派给任何安全主体。
如果在链接到该域的组策略上配置了自定义权限,并且攻击者获得对具有修改访问权限的帐户的访问权限,则该域可能会被入侵。攻击者修改GPO设置以运行代码或安装恶意软件。这种访问级别的影响取决于GPO链接的位置。如果GPO链接到域或域控制器容器,则它们拥有该域的完整权限。如果GPO链接到工作站或服务器OU,则影响可能不太一样; 然而,在所有工作站或服务器上运行代码的能力,可能仍然会导致域被入侵。
扫描GPO权限可以识别出哪些GPO被不正确地配置,并扫描GPO链接在哪里影响了域的安全性。
一个有趣的事实:组策略的创建者保留了对GPO的修改权限。可能的结果是域管理员需要为域设置审核策略,但是发现OU管理员已经创建了具有所需设置的GPO。因此,域管理员将此GPO链接到将该设置应用于域中所有计算机的根域中。问题是如果该OU管理员帐户遭到入侵,那么OU管理员仍然可以修改现在链接到根域提供升级路径的GPO上。下图显示了具有GPO编辑权限的OU管理员“Han Solo”。
PowerView 提供了一种快速扫描所有域的GPO权限的方法:
Get – NetGPO | %{ Get – ObjectAcl – ResolveGUIDs – Name $ _ 。名称}
参考: 滥用GPO权限
用户权限分配
用户权限分配经常在计算机GPO中进行配置,并定义了计算机的几个权限。
域控制器通常配置为在应用了域控制器容器的默认域控制器策略中进行用户权限分配。 分析与域控制器链接的GPO,可以提供DC和域被提升权限的安全主体的有关的有用信息。
·SeTrustedCredManAccessPrivilege:访问凭据管理器作为受信任的呼叫者 ·SeNetworkLogonRight:从网络访问此计算机 ·SeTcbPrivilege:作为操作系统的一部分 ·SeMachineAccountPrivilege:将工作站添加到域 ·SeIncreaseQuotaPrivilege:调整进程的内存配额 ·SeInteractiveLogonRight:允许本地登录 ·SeRemoteInteractiveLogonRight:允许通过远程桌面服务登录 ·SeBackupPrivilege:备份文件和目录 ·SeChangeNotifyPrivilege:绕过遍历检查 ·SeSystemtimePrivilege:更改系统时间 ·SeTimeZonePrivilege:更改时区 ·SeCreatePagefilePrivilege:创建页面文件 ·SeCreateTokenPrivilege:创建一个令牌对象 ·SeCreateGlobalPrivilege:创建全局对象 ·SeCreatePermanentPrivilege:创建永久共享对象 ·SeCreateSymbolicLinkPrivilege:创建符号链接 ·SeDebugPrivilege:调试程序 ·SeDenyNetworkLogonRight:拒绝从网络访问此计算机 ·SeDenyBatchLogonRight:拒绝作为批处理作业登录 ·SeDenyServiceLogonRight:拒绝作为服务登录 ·SeDenyInteractiveLogonRight:拒绝本地登录 ·SeDenyRemoteInteractiveLogonRight:拒绝通过远程桌面服务登录 ·SeEnableDelegationPrivilege:启用计算机和用户帐户以进行授权 ·SeRemoteShutdownPrivilege:从远程系统强制关闭 ·SeAuditPrivilege:生成安全审核 ·SeImpersonatePrivilege:认证后模拟客户端 ·SeIncreaseWorkingSetPrivilege:增加一个进程工作集 ·SeIncreaseBasePriorityPrivilege:增加调度优先级 ·SeLoadDriverPrivilege:加载和卸载设备驱动程序 ·SeLockMemoryPrivilege:在内存中锁定页面 ·SeBatchLogonRight:作为批处理作业登录 ·SeServiceLogonRight:作为服务登录 ·SeSecurityPrivilege:管理审核和安全日志 ·SeRelabelPrivilege:修改对象标签 ·SeSystemEnvironmentPrivilege:修改固件环境值 ·SeManageVolumePrivilege:执行卷维护任务 ·SeProfileSingleProcessPrivilege:配置文件单进程 ·SeSystemProfilePrivilege:配置文件系统性能 ·SeUndockPrivilege:从工作站中移除电脑 ·SeAssignPrimaryTokenPrivilege:替换进程级令牌 ·SeRestorePrivilege:恢复文件和目录 ·SeShutdownPrivilege:关闭系统 ·SeSyncAgentPrivilege:同步目录服务数据 ·SeTakeOwnershipPrivilege:获取文件或其他对象的所有权
这个列表中有一些有趣的策略(特别是适用于域控制器的GPO):
· 允许本地登录并允许登录远程桌面服务:提供登录权限。
· 管理审核和安全日志:提供查看事件日志中的所有事件(包括安全事件)并清除事件日志的功能。
有趣的事实:Exchange Server需要这样的权限,这意味着如果攻击者在Exchange服务器上获得系统权限,则可以清除域控制器上的安全日志。
· 同步目录服务数据:“此策略设置确定了哪些用户和组具有同步所有目录服务数据的权限,而不管对象和属性的保护。使用LDAP目录同步(dirsync)服务需要此权限。域控制器本身就具有此用户权限,因为同步过程是在域控制器上的系统帐户的上下文中运行。“
这意味着在域控制器上对此用户的访问权限可能能够运行DCSync。
· 允许计算机和用户帐户被委托进行授权:提供在域中的计算机和用户上配置委派的功能。
有趣的事实:这提供了在计算机或用户帐户上设置Kerberos委派的功能。
· 验证后模仿一个客户端:这个看起来是一些很有趣的东西,它可以…
把它们放在一起
为了有效地识别具有特权访问权限的所有帐户,重要的是要确保所有渠道都被探索以有效地识别权限。这意味着防御者需要检查AD对象的许可细节,从组织单位(OU)开始,然后分支到安全组。
要检查的事情如下:
·枚举默认组(包括子组)的组成员。确定需要什么权限并删除其他没用的权限。 ·扫描Active Directory(特别是OU和安全组)进行自定义委派。 ·扫描具有SIDHistory的帐户(仅在从一个域到另一个域的主动迁移期间才需要)。 ·查看适用于域控制器,服务器和工作站的GPO中的用户权限分配。 ·查看将AD组添加到本地组的GPO,并确保仍然需要这些组,并且权限级别是适当的。
用于检查Active Directory权限的工具:
· PowerView ( Bloodhound中的一个模块 )
参考
· BloodHound 1.3 – ACL攻击路径更新
https://wald0.com/?p=112
· 使用PowerView滥用Active Directory权限
http://www.harmj0y.net/blog/redteaming/abusing-active-directory-permissions-with-powerview/
· 滥用GPO权限
http://www.harmj0y.net/blog/redteaming/abusing-gpo-permissions/
· AD DS所有者权限
https://technet.microsoft.com/en-us/library/dd125370(v=ws.10).aspx
· 安全描述符定义语言
https://msdn.microsoft.com/en-us/library/windows/desktop/dd981030(v=vs.85).aspx
· Active Directory权限持久#15:利用AdminSDHolder和SDProp(Re)获得域管理员权限
https://adsecurity.org/?p=1906
· 安全描述符定义语言(第1部分)
https://blogs.technet.microsoft.com/askds/2008/04/18/the-security-descriptor-definition-language-of-love-part-1/
· ActiveDirectoryRights枚举
https://msdn.microsoft.com/en-us/library/system.directoryservices.activedirectoryrights(v=vs.110).aspx