导语:结合去年PowerView的一些变化,我相信我会发布一个关于枚举和攻击域信任的最新指南。这可能是我发表了有一段时间的关于域信任的最后一篇文章 。

我撰写关于Active Directory 域信任的一篇文章,已经有一段时间(近2年)。在 深入研究“组范围”之后,我意识到了一些微妙的东西,这让我发现我曾经有过关于信任和用户组成员的一些误解。结合去年PowerView的一些变化,我相信我会发布一个关于枚举和攻击域信任的最新指南。这可能是我发表了有一段时间的关于域信任的最后一篇文章 。总的来说,我不只是在我的博客中写写我的操作说明,我会试着写一些能够作为我的团队成员的完整指南的文章,希望这些信息可能对其他人也有用(无论是从攻击角度还是从防御角度来看)。

我希望本文描述的内容尽可能完整,所以本文将涵盖我们目前所了解的关于“信任”的各个方面。就像我以前的文章一样,我想在这个时候尽我所能地把我对这个话题的知识包装起来。之所以强调“这个时候”是因为我们的知识和行业技术总是在不断发展,“域信任”也不例外。当我开始写关于域信任的文章的时候,我有一些模糊的误解。我从来不是一个系统管理员或AD架构师 – 我已经逐渐学会了我的知识,希望能够解释我在过去发表的文章中所存在的差距,而且我相信这些差距将会继续出现。

所以我会开始尝试做一些新鲜的事情,如果你不熟悉我以前发表的关于“域信任”的文章,那么在这篇文章中的部分内容将会重复以前的研究工作中的某些内容,并将更新后的知识和PowerView语法结合起来。因为这是一篇新的文章,所以我肯定会有错误的地方和我遗漏的一些东西,所以当你找到它们时,情让我知道,我会做适当的更新!

PowerView的最新版本将始终位于PowerSploit的开发分支上。

什么是域信任?

在一个较高的层次上来说,域信任建立了一个域中的用户对资源进行认证或充当另一个域中的安全主体的能力。微软官网中有大量关于域信任信息,以及“域信任的安全注意事项”,这些说明有时看起来有点混乱。正如微软所描述的那样,“大多数拥有多个域的企业或组织都有合法的需求来访问位于不同域中的共享资源 ”,而域信任则允许具有多个域的企业或组织能够让 不同域的用户访问共享资源。域林是相互信任的域容器的集合。林之间也可以有信任关系。微软官方网站有关于 域和林的信任的工作原理 的优秀文章。如果你不熟悉这方面的内容,我建议你先查看一下这些文章。

从本质上讲,“信任”所做的就是链接两个域的认证系统,并允许认证流量通过一个引用系统在这两个域之间传输。如果用户请求访问当前所在域之外的资源的服务主体名称(SPN),则其域控制器将返回一个特殊的引用票证,该票证指向外部域的密钥分发中心(KDC,在Windows环境中的域控制器)。

用户的票证授予票证(TGT)包含在该TGS-REP(票证授予服务回复)转介票证中,并且该票证用域先前交换的域间信任密钥加密或签名,而不是第一个域的krbtgt帐户。这个票证通常被称为“域间票证授予票证或TGT”。然后,外部域通过使用先前协商的域间信任密钥来解密它,然后验证或解密包含在转介票证中的TGT,并且完成正常的Kerberos处理过程的其余部分。

Sean Metcalf在“关于域信任的一切”这篇文章中对这个过程进行了详细的描述,他将这个过程描述为:“ 一旦两个域之间存在信任关系,则每个域的票证授予服务(Kerberos中的”realm“说)会被注册为其他域的Kerberos服务(KDC)的安全主体。这使得每个域中的票证授予服务会将另一个域中的票证授予服务看作另一个域中的资源,同时提供跨域服务访问的服务。”

因此,基本上,当外部域使用协商的信任密钥解密转介票证时,它看到用户的TGT会说:“OK,另一个域已经认证了这个用户,并且说这个用户是谁(注意这里是用户自己说他们是谁)或者是这些用户是哪个用户组的,所以我会相信这个信息是准确的,因为我相信转介的域。”

下面是一个可视化跨信任边界的Kerberos处理过程的图片:

image.png

建立信任的目的是允许来自一个域的用户访问资源(比如服务器上的本地管理员组),以组的形式嵌套,或者用作另一个域的安全主体(例如,用于AD对象的ACL )。林内信任(存在于同一个Active Directory林中的域信任)的一个例外是 – 林中创建的任何域与林中的每个其他域保持着隐式的双向可传递信任关系。这有很多的影响,这块的内容我们将在本文的后面进行介绍。

但在此之前,我们不得不描述更多的信任特征。

有几种类型的信任,其中一些有不同的攻击性含义,包括:

· 父子信任关系——同一个林的一部分 —— 子域保留了与父域的隐式双向传递信任。这可能是你遇到的最常见的信任类型。

· 交叉链接信任关系——又名子域之间的“快捷方式信任”,目的是提升转介时间。通常情况下,复杂的林中的引用必须过滤到林根,然后再回到目标域,因此对于地理上分散的那种场景,交叉链接关系可以减少认证的时间。

· 外部信任关系——在不同域之间创建的隐式非传递式信任关系。“外部信任提供了对尚未加入林信任的林之外的域中资源的访问能力。”外部信任强制执行SID过滤,本文后面将介绍这块的安全保护。

· 树根信任关系——林根域和你添加的新树根之间的隐式双向可传递信任关系。我没有经常遇到树根信任关系,但是从微软官方的文档中可以发现,当你在林中创建新的域树时就会创建这种关系。这些是林内的信任关系,它们 保留了双向传递性,同时允许树有一个单独的域名称(而不是child.parent.com)。

· 林信任关系——一个林根域和另一个林根域之间的传递信任关系。林信任也强制SID过滤。

· MIT信任关系——与非Windows RFC4120兼容的 Kerberos域的信任。我希望将来能够更多地投入到MIT的信任关系研究中。

传递性?域信任的另一方面是它们是具有传递性的或是不具有传递性的。引用MSDN文档中关于传递性的描述:“传递性信任将信任关系扩展到其他域; 不可信的信任不会将信任关系扩展到其他域。”这意味着传递的信任可以被链接,因此用户可以访问多个域中的资源。也就是说,如果域A信任B且B信任C,则A绝对信任C。更深层次的说,如果特定的信任关系是可传递的,则信任域可以重新将用户的TGT包装到附加的转介票证中,并将它们转发到当前域所信任的域中。

image.png

而且,信任传递可以是单向或双向的。双向信任实际上只是两个单向的信任关系。单向信任意味着受信任域中的用户和计算机可能会访问另一个信任域中的资源。单向信任只在一个方向上,因此才有“单向”这个名称。信任域中的用户和计算机无法访问受信任域中的资源。微软的官方网站中有一个很好的可视化图表:

image.png

图片来源:https://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx

当我开始研究的时候,这是一个让我的头脑变得很混乱的东西 —— 从攻击的角度来看,我们关心的是访问的方向,而不是信任的方向。对于信任方向为A –>B(A信任B)的单向信任,如果从A中列举信任关系,则信任被标记为出站,而如果从B枚举相同的信任,则信任被标记为入站,而潜在的访问关系是B->A。这将在“域环境中的外部关系枚举”这一章节变得更有意义。

源链接

Hacking more

...