说一下可以设置acl权限的命令和参数是(acl访问权限)

文章前言

在内网渗透测试中我们经常会在几个小时内获得域管理权限,而造成这种情况的原因是系统加固不足和使用不安全的Active Directory默认值,在这种情况下公开的利用工具有助于发现和利用这些问题,并经常导致获得域管理权限,本篇博文描述了一个场景,在这个场景中我们的标准攻击方法不起作用,我们必须更深入地挖掘才能获得域中的高权限,我们描述了使用访问控制列表的更高级的权限提升攻击,并介绍了一个名为Invoke-Aclpwn的新工具和一个对ntlmrelayx的扩展,它可以自动执行这种高级攻击的步骤

基本介绍

随着企业机构在网络安全方面变得越来越成熟和有意识,我们必须更深入地挖掘以便提升我们在活动目录(AD)域中的特权,在这种情况下,枚举是关键,AD中的访问控制列表(ACL)经常被忽略,ACL定义了哪些实体对特定AD对象拥有哪些权限,这些对象可以是用户帐户、组、计算机帐户、域本身等等,ACL可以在单个对象上配置,也可以在组织单位(OU)上配置,组织单位类似于AD中的目录,在OU上配置ACL的主要优点是如果配置正确,所有后代对象都将继承ACL,对象所在的组织单位(OU)的ACL包含一个访问控制条目(ACE ),它定义了应用于OU和/或下行对象的身份和相应权限,ACE中指定的身份不一定是用户帐户本身,将权限应用于AD安全组是一种常见的做法,通过将用户帐户添加为该安全组的成员,该用户帐户被授予在ACE中配置的权限,因为该用户是该安全组的成员

AD中的组成员身份以递归方式应用,假设我们有三个组:

    Group_A  Group_B    Group_C

    Group_C是Group_B的成员,而Group_B本身又是Group_A的成员,当我们将Bob添加为Group_C的成员时,Bob不仅是Group_C的成员,而且还是Group _ B和Group_A的间接成员,这意味着当向Group_A授予对某个对象或资源的访问权限时,Bob也可以访问该特定资源,该资源可以是NTFS文件共享、打印机或AD对象,例如:用户、计算机、组甚至域本身

    为AD安全组提供许可和访问权限是维护和管理(访问)IT基础设施的一种很好的方式,但是当组嵌套太频繁时,也可能导致潜在的安全风险,如前所述用户帐户将继承用户所属(直接或间接)组中设置的所有资源权限,如果Group_A被授予在AD中修改域对象的权限,那么发现Bob继承了这些权限就很容易了,但是如果用户只是一个组的直接成员,而该组是50个其他组的间接成员,则需要花费更多的精力来发现这些继承的权限

    Exchange

    在最近的渗透测试中,我们设法获得了一个用户帐户,它是Organization Management安全组的成员,该组是在安装Exchange时创建的,并提供对Exchange相关访问权限,除了访问这些Exchange设置之外,它还允许其成员修改其他Exchange安全组的组成员身份,例如:Exchange Trusted Subsystem安全组,该组是Exchange Windows Permission安全组的成员

    默认情况下,Exchange Windows Permission安全组对安装了Exchange的域的域对象具有writeDACL权限

    说一下可以设置acl权限的命令和参数是(acl访问权限)

    writeDACL权限允许身份修改指定对象的权限(换句话说就是修改ACL),这意味着通过成为组织管理组的成员,我们能够将权限提升到域管理员的权限,而为了利用这一点,我们将之前获得的用户帐户添加到Exchange Trusted Subsystem组中,我们再次登录(因为安全组成员身份仅在登录期间加载),现在我们是Exchange Trusted Subsystem组和Exchange Windows Permission组的成员,这允许我们修改域的ACL

    如果您有权修改AD对象的ACL,则可以为身份分配权限,允许他们写入特定属性,例如:包含电话号码的属性,除了为这些类型的属性分配读/写权限之外,还可以为扩展权限分配权限,这些权限是预定义的任务,例如:更改密码、向邮箱发送电子邮件等权限,还可以通过应用下列扩展权限,将任何给定帐户添加为域的复制伙伴:

    Replicating Directory ChangesReplicating Directory Changes All

    当我们为用户帐户设置这些权限时我们能够请求域中任何用户的密码散列,包括域中krbtgt帐户的密码散列,关于权限提升技术的更多信息可以在下面的GitHub页面上找到:https://github.com/gdedrouas/Exchange-AD-Privesc

    说一下可以设置acl权限的命令和参数是(acl访问权限)

    获得作为组织管理组成员的用户帐户并不经常发生,尽管如此,这种技术可以在更广泛的基础上使用,组织管理组可能由另一个组管理,该组可能由另一组管理,等等,这意味着整个域中可能存在一个难以发现的链,但如果正确关联,可能会导致域的完全受损

    为了帮助利用这个安全风险链,Fox-IT开发了两个工具,第一个工具用PowerShell编写,可以在AD环境内部或外部运行,第二个工具是ntlmrelayx工具的扩展,此扩展允许攻击者将身份(用户帐户和计算机帐户)转发到Active Directory,并修改域对象的ACL

    Invoke-ACLPwn

    Invoke-ACLPwn是一个Powershell脚本,设计用于使用集成凭据和指定凭据运行,该工具通过创建域中所有ACL的SharpHound导出以及运行该工具的用户帐户的组成员身份来工作,如果用户还没有域对象的writeDACL权限,该工具将枚举该域的ACL的所有ACE,ACE中的每个身份都有自己的ACL,它被添加到枚举队列中,如果身份是一个组并且该组有成员,则每个组成员也被添加到枚举队列中,正如您可以想象的那样,这需要一些时间来枚举,但最终可能会产生一个链来获取domain对象上的writeDACL权限

    说一下可以设置acl权限的命令和参数是(acl访问权限)

    计算完链后,脚本将开始利用链中的每一步:

    • 用户被添加到必要的组中

    • 两个ACE被添加到域对象的ACL中

      • Replicating Directory Changes 

      • Replicating Directory Changes All

    • 调用Mimkatz的DCSync特性,并请求给定用户帐户的散列,默认情况下,将使用krbtgt帐户(可选)

    攻击完成后该脚本将删除攻击期间添加的组成员以及域对象的ACL中的ACE

    为了测试这个脚本,我们创建了26个安全组,每个组都是另一个组的成员(testgroup_a是testgroup_b的成员,test group _ b本身是testgroup_c的成员,依此类推,直到testgroup_z),安全组testgroup_z拥有修改组织管理安全组的成员资格的权限,如前所述,该组拥有修改Exchange Trusted Subsystem安全组的组成员资格的权限,成为该组的成员将授予您在Active Directory中修改域对象的ACL的权限

    我们现在有31个环节:

    • 26个安全组的间接成员

    • 修改Organization Management security组成员资格的权限

    • Organization Management的成员

    • 修改Exchange Trusted Subsystem security组成员身份的权限

    • Exchange Windows Permission security和Exchange Trusted Subsystem的成员身份

    该工具的结果可以在下面的屏幕截图中看到

    说一下可以设置acl权限的命令和参数是(acl访问权限)

    在此示例中我们使用了在安装Exchange期间配置的ACL配置,但是该工具不依赖于Exchange或任何其他产品来查找和利用链,目前只有域对象上的writeDACL权限被枚举和利用,还有其他类型的访问权限,例如:owner、writeOwner、genericAll等,也可以在其他对象上使用

    BloodHound团队在其本白皮书中深入解释了这些访问权限,将来会开发并发布利用这些权限的工具更新,Invoke-ACLPwn工具可以从我们的GitHub这里下载:

    https://github.com/fox-it/Invoke-ACLPwn

    说一下可以设置acl权限的命令和参数是(acl访问权限)

    NTLMRelayx

    去年我们写了ntlmrelayx的新增内容,允许转发到LDAP,这允许通过向Directory添加新用户来枚举域和升级到域管理员,以前ntlmrelayx中的LDAP攻击会检查中继帐户是否是域管理员或企业管理员组的成员,如果是则提升权限,这是通过向域中添加一个新用户并将该用户添加到域管理员组来实现的

    虽然这种方法可行但它没有考虑中继用户可能拥有的任何特殊权限,通过这篇文章中的研究,我们在ntlmrelayx中引入了一种新的攻击方法,这种攻击首先请求重要域对象的ACL,然后将其从二进制格式解析为工具可以理解的结构,之后枚举中继帐户的权限

    这将考虑中继帐户所属的所有组(包括递归组成员),一旦列举了权限,ntlmrelayx将检查用户是否有足够高的权限来允许新用户或现有用户的权限提升,对于这种权限提升有两种不同的攻击,第一种攻击称为ACL攻击,在这种攻击中域对象上的ACL被修改,攻击者控制下的用户被授予域上的Replication-Get-Changes-All权限,这允许使用前面几节中描述的DCSync,如果无法修改域ACL则将成员添加到域中几个高权限组的访问权限:

    • Enterprise Admins 

    • Domain Admins

    • Backup Operators(可以备份域控制器上的关键文件)

    • Account Operators(几乎可以控制域中的所有组)

    如果使用-upgrade-user标志指定了现有用户,则在可以执行ACL攻击的情况下,该用户将被授予复制权限,如果使用组攻击则该用户将被添加到高权限组,如果没有指定现有用户,则考虑创建新用户的选项,这可以在用户容器(用户帐户的默认位置)中,也可以在OrganizationalUnit中,例如:it部门成员

    有人可能已经注意到我们在这里提到了中继帐户,而不是中继用户,这是因为攻击也针对具有高特权的计算机帐户,这种帐户的一个例子是Exchange服务器的计算机帐户,在默认配置中它是Exchange Windows Permissions组的成员,如果攻击者能够说服Exchange服务器对攻击者的机器进行身份验证,例如:使用mitm6进行网络级攻击,权限可以立即提升到域管理员

    说一下可以设置acl权限的命令和参数是(acl访问权限)

    现在可以使用impacket的secretsdump.py或Mimikatz来转储NTDS.dit哈希

    说一下可以设置acl权限的命令和参数是(acl访问权限)

    如果攻击者拥有Exchange服务器的管理权限,就有可能提升域中的权限,而无需从系统中转储任何密码或机器帐户哈希,从NT Authority\\\\SYSTEM的角度连接到攻击者并使用NTLM进行身份验证,这足以对LDAP进行身份验证,下面的屏幕截图显示了用psexec.py调用的PowerShell函数Invoke-Webrequest,它将从系统角度运行,标志-UseDefaultCredentials将启用NTLM的自动身份验证

    说一下可以设置acl权限的命令和参数是(acl访问权限)

    应该注意的是,在Active Directory的默认配置中针对LDAP的中继攻击是可能的,因为LDAP签名在一定程度上缓解了这种攻击,但在默认情况下是禁用的,即使启用了LDAP签名,仍有可能中继到LDAPS(SSL/TLS上的LDAP),因为LDAPS被视为已签名的通道,唯一的缓解方法是在注册表中为LDAP启用通道绑定,如果要获得ntlmrelayx中的新特性,只需从GitHub更新到impacket的最新版本

    https://github.com/CoreSecurity/impacket

    缓解建议

    1、删除危险的ACLs

    使用Bloodhound等工具检查危险ACL,Bloodhound可以导出域中的所有ACL,这有助于识别危险的ACL

    2、删除Exchange Windows权限组的writeacl权限

    下面的GitHub页面包含一个PowerShell脚本,该脚本可以对此有所帮助:https://github.com/gdedrouas/Exchange-AD-Privesc

    3、监控安全组

    监控对域有很大影响的安全组(的成员),例如:Exchange可信子系统和Exchange Windows权限

    4、审计和监控对ACL的更改

    审核对域ACL的更改,如果尚未完成,可能有必要修改域控制器策略,有关这方面的更多信息,请参见以下TechNet文章:

    https://blogs.TechNet.Microsoft.com/canitpro/2017/03/29/step-by-step-enabling-advanced-security-audit-policy-via-ds-access/

    修改域对象的ACL时将创建一个事件,事件ID为5136,可以使用PowerShell查询Windows事件日志,因此这里有一个从ID为5136的安全事件日志中获取所有事件的一行程序

      [code lang=powershell]Get-WinEvent -FilterHashtable @{logname=\\\'security\\\'; id=5136}[/code]

      此事件包含安全描述符定义语言(SDDL)格式的帐户名和ACL

      由于这对人类来说是不可读的,所以Windows 10中有一个PowerShell cmdlet,ConvertFrom-SDDL4,它可以将SDDL字符串转换为可读性更好的ACL对象

      如果服务器运行Windows Server 2016作为操作系统,也有可能看到原始和修改后的描述符,有关更多信息,请访问:

      https://docs.Microsoft.com/en-us/windows/security/threat-protection/auditing/event-4715

      参考链接

      https://github.com/BloodHoundAD/SharpHound

      https://technet.microsoft.com/en-us/library/ee681663.aspx

      https://technet.microsoft.com/en-us/library/ff405676.aspx

      https://www.specterops.io/assets/resources/an_ace_up_the_sleeve.pdf

      https://docs.microsoft.com/en-us/powershell/module/Microsoft.powershell.utility/convertfrom-sddlstring

      原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34178.html

      (0)
      七芒星实验室's avatar七芒星实验室
      上一篇 2024年4月16日 下午4:20
      下一篇 2024年4月16日 下午4:22

      相关推荐

      发表回复

      您的邮箱地址不会被公开。 必填项已用 * 标注