一篇文章搞懂跨森林攻击

科技   2024-07-17 17:06   江苏  

点击星标,即时接收最新推文

本文选自《内网安全攻防:红队之路》

扫描二维码五折购书


因为微软定义森林为安全边界,所以相比跨域攻击,攻击向量会少些,主要可以分为两类,一类是管理员无意引入的误配置,二是利用权限提升或者远程代码执行的漏洞。

跨森林信任介绍  

森林信任和域信任有相似之处,但也有不同之处。下图为ms08067.cn和ms08067.hk之间的信任:

森林信任

在上图的森林信任中,两个森林互相信任。这也是比较常见的森林信任形式。

和域信任一样,森林信任也可以是单向或者双向的。森林信任在域之间是可传递的,比如dev.ms08067.cn将信任dev.ms08067.hk,但是在多个森林之间不可传递,如果ms08067.hk信任另一个森林,如ms08067.us,ms08067.cn不会自动信任ms08067.us。

在森林内部,快捷信任(shortcut trust)可以加快认证过程。同样,外部信任(external trust)也可以创建快捷信任,如上图的uat.dev.ms08067.cn和lab.dev.ms08067.hk。

外部信任也是非传递的,即如果ms08067.cn和ms08067.hk之间没有建立信任,则除了有快捷信任的uat.dev.ms08067.cn和lab.dev.ms08067.hk域,其他域之间没有信任关系。

在跨森林信任中,比如上图,在子域如sales.ms08067.cn的用户可以查询和访问sales.ms08067.hk域的资源。我们也可以跨越森林边界枚举所有公开的信息,但能访问哪些服务取决于我们的组成员关系。   

但是,从枚举的角度,森林内信任和森林间信任存在一定区别。在森林间信任存在一个可选的配置,select authentication,该设置可以限制了跨森林信任的访问,我们可以只允许特定的用户访问特定的对象。

在上图的例子中,sales.ms08067.cn域中的任何用户都可以查询sales.ms08067.hk域中的所有对象。但如果配置了select authentication,则会创建一个映射,只允许sales.ms08067.cn中指定的用户对sales.ms08067.hk中指定的对象执行查询。

这种限制将大大降低了攻击者枚举外部信任的能力,增强了森林间信任的安全性。但是要实现这种配置需要大量的设计和管理的准备,成本比较高,所以很少被实施。

跨森林枚举  

在森林枚举时,第一步是枚举所有存在的森林信任。我们可以使用.NET的Forest.GetAllTrustRelatonships方法进行枚举。下面例子中,我们从dev.ms08067.cn域以dave用户权限进行枚举:

([System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()).GetAllTrustRelationships()

森林信任枚举

从输出可以看到源森林为ms08067.cn,对目的森林ms08067.hk存在信任关系,而且是双向信任。我们也可以使用PowerView的Get-ForestTrust方法进行枚举,输出结果和上图类似。

如果selective authentication没有启用,我们可以使用Get-DomainTrust指定根域的方式,枚举对ms08067.hk中子域的信任,然后对发现的子域继续进行枚举:

Get-DomainTrust -Domain ms08067.cn    

跨森林域信任枚举

输出显示了ms08067.cn的信任关系。我们也可以使用PowerView的Get-DomainTrustMapping方法自动枚举所有的域和森林信任:

Get-DomainTrustMapping 

PowerView自动枚举信任

从输出可以看到有森林内(WITHIN_FOREST)的信任,也有森林间(FOREST_TRANSITIVE)的信任。

在完成了对森林信任及对应子域信任的枚举后,我们可以开始枚举受信任森林(trusted forest)中的用户,组及其他信息。

PowerView的Get-DomainUser可以指定域进行搜索,下图为枚举ms08067.hk用户的部分输出:

Get-DomainUser -Domain ms08067.hk

 跨森林用户枚举

因为森林是安全边界,所以可能比较难快速地找到明确的攻击向量。一个简单方法是搜索两个森林中有相同用户名的用户,因为他们可能属于同一个员工。如果存在这样的账户,则很可能两个账户之间使用相同的密码。

另外,在ms08067.cn的用户,也可能是ms08067.hk域某个组的成员。这种类型的组成员关系还是比较常见的,因为它是一种授予资源访问权限的比较简单的方法。

我们可以使用PowerView的Get-DomainForeignGroupMember方法枚举受信任森林或者域中的组:

Get-DomainForeignGroupMember -Domain ms08067.hk


受信任森林组成员枚举

从上图输出可以看到,当前域的用户jeff,是ms08067.hk中myGroup组的成员。取决于myGroup组的访问权限,如果我们能入侵当前域的jeff用户,则可能获得ms08067.hk的访问权限。


—  实验室旗下直播培训课程  —



和20000+位同学加入MS08067一起学习


Ms08067安全实验室
“Ms08067安全实验室”致力于网络安全的普及和培训!
 最新文章