域信任
2023-3-30 09:3:36 Author: 谢公子学安全(查看原文) 阅读量:42 收藏

本文部分节选于《域渗透攻防指南》,购买请长按如下图片扫码
域信任(Domain Trust)是为了解决多域环境下的跨域资源共享问题而诞生的。两个域之间必须拥有信任关系(Trust Relationship),才可以互相访问到对方域内的资源。由于此信任工作是通过Kerberos协议来完成的,因为也被成为Kerberos Trust。
域信任作为一种机制,允许另一个域的用户在通过身份验证后访问本域内的资源。同时,域信任利用DNS服务器定位两个不同子域的域控制器,如果两个域中的域控制器都无法找到另一个域,那么也就不存在通过域信任关系进行跨域资源共享了。

单向信任、双向信任和快捷信任

域信任关系可以分为单向信任、双向信任和快捷信任。

1. 单向信任

单向信任是指在两个域之间创建单向的信任路径,即在一个方向上是信任流,在另一个方向上是访问流。在信任域和受信任域之间的单向信任中,受信任域内的用户或计算机可以访问信任域中的资源,但信任域内的用户或计算机却无法访问受信任域内的资源。
如图所示单向信任域架构,域A信任域B和域C,那么域B内和域C内受信任的主体可以访问域A内的资源,但域A内的主体却无法访问域B和域C内的资源。

2. 双向信任

双向信任是指两个单向信任的组合,信任域和受信任域彼此信任,在两个方向上都有信任流和访问流。这意味着,可以从两个方向在两个域之间传递身份验证请求。活动目录中的所有域信任关系都是双向可传递信任的。任何一个新的子域加入到域林之后,这个域会自动信任其上一层的父域,同时父域也会自动信任新子域,这种信任关系称为父子信任;由于这些信任关系具备双向传递性(Two-Way Transitive),因此林根域和其他树根域之间也会自动双向信任,这称为树信任。在早期的域中,域信任是单向的,从Windows Server2003开始,域信任关系变为双向的。
如图所示双向信任域架构:域A和域B、域C之间都是双向信任关系;域A信任域B,域B也信任域A;域A信任域C,域C也信任域A。所以当任何一个新域加入到域树后,默认它会自动的建立起双向信任的关系。因此只要拥有任何一个域内的权限,那么就可以访问其他域内的资源了。

3. 快捷信任

快捷信任其实属于双向信任,快捷信任是指两个子域之间的信任。
如图所示,域A信任域B,域B也信任域A;域A信任域C,域C也信任域A。此时域B和域C之间也有双向信任关系。由于域是树状结构,如果域B到域C双向信任,需要先经过林根域A,这中间肯定会多很多认证流程和步骤。因此,域B和域C之间默认建立起了一个快捷信任。

内部信任、外部信任和林信任

域信任根据作用范围还可以分为内部信任、外部信任和林信任;内部信任是相对于同一个林来说的,而外部信任和林信任则是相对于不同林来说的。

1. 内部信任

在默认情况下,使用活动目录安装向导将新域添加到林根域中时,会自动创建双向可传递信任。在现有林中创建域时,将建立新的林根信任。当前域林中的两个或多个域之间的信任关系称为内部信任。这种信任关系是可以传递的。
如图所示,是内部信任架构图:

2. 外部信任

外部信任是指两个不同林间的域信任关系,外部信任是单向或双向不可传递的。比如两个林之间需要跨域资源访问,因此有必要建立外部信任。创建外部信任需要在两个域的DNS中设置互相指向对方的条件转发器,确保能正确解析到目标的地址。
如图所示,是外部信任架构图:

3. 林信任

林信任也是指两个不同林间的域信任关系,林信任给两个林中的域之间提供双向的可传递信任关系。比如两个林中有很多域,要进行跨域资源访问的话就需要设置很多次,为了简化操作,可以设置林信任,林信任是自Windows Server 2003起拥有的信任关系。创建林信任需要在两个域的DNS中设置互相指向对方的条件转发器,确保能正确解析到目标的地址。林信任只能在两个林之间创建,不能隐式扩展到第三个林。比如在林1和林2之间创建了一个林信任,在林2和林3之间也创建了一个林信任,则林1和林3之间没有隐式信任关系。
如图所示,是林信任架构图:

跨域资源访问

跨域是如何进行资源访问的呢?
对于同域内的资源访问,可以参考1.1章讲的Kerberos协议篇。
如图所示,域内访问资源简要概括为6步:
那么,可能我们会猜想,跨域进行资源访问是不是也是类似呢?
我们猜想跨域资源访问如图所示,但是仔细思考一下就知道应该不是这样。首先A域域控没有B域资源服务器的hash,因此无法生成B域资源的ST服务票据。其次,B域域控没有A域的krbtgt哈希,因此无法验证PAC。所以以下访问流程是行不通的。
事实上,为了进行跨域间的身份验证,微软提出了inter-realm key(跨域间密钥)的概念。不同域间的域控制器必须共享一个inter-realm key。然后,这些域可以相互信任。inter-realm key默认每隔30天重置一次。这个inter-realm key是Windows 2000和Windows Server 2003中传递信任的基础。
真实的跨域资源访问流程如图所示:

信任帐户

在每个域内,都有一个信任帐户,该帐户以$结尾,该帐户的哈希就是inter-realm key值。
如图所示域树,域A内的信任帐户为域B和域C的前缀,也就是SHANGHAI$和BEIJING$。在域B内和域C内的信任帐户均为XIE$,只不过前缀不同(shangxie\XIE$、beijing\XIE$)。
使用如下powershell命令即可查询当前域内的信任帐户:
Get-ADUser -filter * -Properties DistinguishedName,samAccountType | ?{$_.name -like "*$"}
如图所示,可以看到在域xie.com内的信任帐户是SHANGHAI$和BEIJING$。
如图所示,可以看到在域shanghai.xie.com内的信任帐户是XIE$。
如图所示,可以看到在域beijing.xie.com内的信任帐户是XIE$。
也可以使用ADExplorer进行查看信任帐户。
如图所示,在域xie.com中可以看到信任帐户SHANGHAI$和BEIJING$。
如图所示,在域shanghai.xie.com中可以看到信任帐户XIE$。
如图所示,在域beijing.xie.com中可以看到信任帐户XIE$。
注意:在Active Directory用户和计算机处是看不到信任帐户的。
并且信任帐户的哈希值具有如下关系:
  • xie\SHANGHAI$ = shangxie\XIE$
  • xie\BEIJING$ = beijing\XIE$
如图所示,导出域xie.com内的信任帐户xie\SHANGHAI$ 和 xie\BEIJING$的哈希值。
如图所示,分别导出域shanghai.xie.com内的信任帐户shanghai\XIE$ 和 域beijing.xie.com内的信任帐户beijing\XIE$的哈希值。
从上图可以看到xie\SHANGHAI$的哈希值等于shanghai\XIE$的哈希值,而xie\BEIJING$的哈希值等于beijing\XIE$的哈希值。

相关文章:https://adsecurity.org/?p=1588

END

非常感谢您读到现在,由于作者的水平有限,编写时间仓促,文章中难免会出现一些错误或者描述不准确的地方,恳请各位师傅们批评指正。如果你想一起学习AD域安全攻防的话,可以加入下面的知识星球一起学习交流。

文章来源: http://mp.weixin.qq.com/s?__biz=MzI2NDQyNzg1OA==&mid=2247492497&idx=1&sn=363a80f695caddb6f3eba785702d7ebc&chksm=eaae63acddd9eaba1110e998fe16fb2ef677eee6d5ce9df990bb47f30c0e34cde376fc236d48#rd
如有侵权请联系:admin#unsafe.sh