H

基于域信任关系的域攻击

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%

基于域信任关系的域攻击​

域信任​

建立了域之间的信任关系,以便一个域的用户可以轻松地访问其他域中的资源,并促进域网络的管理和维护。尽管该模型带来了便利,但也有许多地方可以被恶意攻击者利用。
域信任关系可以是单向\双向信任,可通过\非传递信任,内部\外部信任,交叉链接信任等。例如,两个域之间存在单向可转移的外部信任关系。同一森林内的域信任关系通常是在双向及时的内部信任关系中隐含的。
20200504095856.png-water_print

部署:
20200504095938.png-water_print

亲子信任关系是最常见的领域信任关系。当在同一森林中添加新域时,最常见的是儿童域模式(亲子)或树根模式(树根)。这两种模式将建立亲子信任\ Tree-root信任关系,这都是双向传递的内部信任关系。
20200504101001.png-water_print

跨域链接信任是指建立同一森林两个子地区之间的直接信任关系。因为在同一森林中,域的组织关系是一种类似树的结构。从一个子域到另一个子域,您需要从分支的子域中找到森林根,然后继续从根域中找到另一个子域。跨域链接相当于在两个子域之间建立快捷方式信任关系,以减少身份验证和授权的时间和步骤。
内部信任是指森林内部领域之间的信任关系。因此,外部领域信任是指域外的领域与域外的域之间的信任关系。
还有一种麻省理工学院信任(MIT提出了Kerberos协议和标准),这是Windows域和非Windows域之间的信任关系。由于少数应用程序,本文将不会讨论这种类型的域信任关系。

跨域认证和资源访问授权​

当两个域之间建立域信任关系时,建立了共享的域间密钥(inter-realm键,缩写为irkey),这相当于krbtgt。但是,IRKEY用于在两个值得信赖的域之间进行身份验证,而KRBTGT则用于同一域服务器的AC和KDC之间的身份验证。
信任域之间的身份验证和授权过程与同一域中的身份验证和授权大致相似,但仍然存在许多差异。
20200504102209.png-water_print

Jack启动了对DC1的身份验证请求,并且数据由Jack的密码NTLM值加密;
DC1使用Jack的密码NTLM值来验证已收到的身份验证请求,并将身份验证的TGT票返回到Jack;
Jack使用TGT票证向DC1发起授权请求,并启动TGS_REQ请求以访问DC2中的文件服务;
DC1检查文件服务是否在DC2中,并返回可重定向的TGT(转介TGT),表明它需要将其转移到DC2,并使用IRKEY来对可重定向TGT的身份验证信息进行加密;
杰克收到可以根据及时信息传输的TGT后,使用TGT启动请求访问DC2 TGS_REQ中的文件服务;
DC2收到请求后,它使用IRKEY验证TGT中的身份验证信息,并返回允许访问文件服务的TGS票。门票中的某些信息使用运行文件服务的服务帐户的密码NTLM值进行加密;
杰克使用收到的TGS门票访问DC2中的文件服务;
文件服务的服务帐户使用密码NTLM值验证TGS
当两个域之间建立信任关系时,另一方的SPN,DN和其他信息将在全球域数据库中存档,以方便访问。例如,在上图中,DC1将在DC2中存档所有Service SPN,DNS和其他信息。
如果Service Jack请求访问在DC1的全局数据库中,则将返回到TGT。如果不存在,则DC1具有父域,DC1将请求父域,直到森林的根域服务器为止。如果DC1本身是根服务器(在这种情况下,DC1是根域服务器),它将直接告诉Jack,不存在服务请求的访问。
森林只有一个全球数据库。

SIDHistory 版跨域黄金票据​

在一个域中,一旦我们获得了KRBTGT的NTLM值,我们就可以构造金音,将其伪造给域中的任意用户,包括管理员,以获得该域的完整访问控制权。但是在同一森林的不同领域中,金色的音符不再有效。
让我们回顾一下金音符的主要元素,即域名,域SID(安全标识符),KRBTGT用户密码的NTLM值和用户RID(相对标识符,没有特殊指示,Mimikatz工具,Mimikatz工具将将RID设置为rid rif to域管理员的RID)。不同的域具有不同的KRBTGT,导致金音符在不同域之间失败。
1
mimikatz.exe'kerberos:golden /user:anyusername /domain :lab.adsec.com /sid3:s-1-5-21-5-21-273227202720272027202720272727272709870987391-2638982533 /KRBTGT:16ED27EE7848756CFA96B33C25E3AD3DD /PTT'退出
20200504110910.png-water_print

不同的域具有不同的KRBTGT,导致金音符在不同域之间失败。
可以看出,在为Lab.Adsec.com域构造金笔记时,它们在此域中有效,并且在父域中,这些笔记是无效的。
如果将用户的Sidhistory属性设置为高私有的组或用户的ID,则用户还具有等于高私有组或用户的权限。如果我们将目标域的域管理员组的SID添加到伪金说明中,我们可以获得目标域的域管理员权利。黄金音符和横向史的结合可以实现跨域金音。
由于每个域的SID都不同,因此叠加在侧面历史上的黄金音符不是通用的。根据Microsoft的描述,在同一领域森林中,企业管理集团EA(企业管理员)将被森林内的所有域中自动添加到该域的域管理员组中,而EA仅存在于根域中,因此EACER中存在于根域中,因此Enterprise Management Group EA的SID固定在根域EA的SID上,将其固定到固定的Rid Rid Ride以及一个IS519。
因此,如果使用Enterprise Management Group EA的SID设置了Sidhistory属性,并与金音符结合在一起,则可以在所有域的跨域金音符中实现,即只能获得任何域KRBTGT帐户的NTLM值,则该法案可以称为金笔记的奇异版本。
当然,您还可以将森林中指定域的管理员组SID添加到Sidhistory中,但是此类黄金账单仅对指定的域有效,并且对于其他域而言无效。它不像使用企业管理SID的账单那样通用。
1
mimikatz.exe'Kerberos:Golden /user:yusername sids: [ea group for ea group] /sid: [for lab.adsec.com domain for lab.adsec.com域] /KRBTGT:16ED27EE7848756CFA96B33C25E3AD3DD /PTT'退出
20200504111832.png-water_print

金音符仍在Lab.Adsec.com域中构造,但是使用根域的企业管理员SID作为参数值,即Gold Notes的Sidhistory版本,添加了SIDS参数,这对Lab.Adsec.com和AdSec.com域都有效。
应该在这里指出的是,实施金笔记的横向历史版本的基础是森林内的信任关系,因为如果不是森林内的信任关系,那么Microsoft的SID过滤器规则将筛选出侧面历史,因此无效,但森林中不会有SID过滤器规则。这就是为什么据说森林而不是领域是安全边界的原因。

IRKey 版跨域黄金票据​

当两个域之间建立域信任关系时,需要建立共享的域间密钥(inter-realm键,缩写为irkey)。它的功能等效于KRBTGT,但在两个相互信任的域之间使用了它,而KRBTGT则在同一域服务器的AC和KDC之间使用。
只要您在森林内的任何域中获得KRBTGT帐户的NTLM值,您就可以通过金音的刻板版本获得对森林中所有域的控制。因此,为了捍卫,必须修改2次森林中所有域中的KRBTGT帐户的NTLM值。
在多域环境中,IRKEY与主机帐户相似。默认情况下,系统每30天自动修改NTLM。因此,即使在森林中所有域中的Krbtgt帐户的NTLM进行了两次修改,IRKEY的NTLM也可能不会改变(较低的概率是,Krbtgt的NTLM修改恰好符合IRKEY修改周期)。
与银笔记类似,您可以使用irkey来伪造域间的及时账单(REALM INTERM转介TGT)来获得目标域的域管理员权利,然后在上一节中将金音的SiSthistory版本结合在一起,以再次控制整个森林。您需要注意的是SID是目标域的SID。
在域中,大多数带有“ $”符号的帐户是计算机帐户,但是用户组中具有“ $”符号的帐户是信任帐户。您可以通过powershell命令Get-Aduser获得所有用户帐户,该符号随附域服务器。在下图中,ADSEC $帐户是一个信托帐户,属于用户组。
20200504112640.png-water_print

有两种方法可以获取受信任帐户的NTLM值。

Dcsync 获取信任账号的 NTLM 值​

以下图使用DCSYNC方法在Lab.adsec.com域中获取受信任帐户的NTLM值。结果表明该帐户的类型为trust_account
20200504112712.png-water_print

lsadum 获取信任账号的 NTLM 值​

使用LSADUMP:TRUST/补丁方法。从下图,您可以看到两个不同的ntlm值:[in] lab.adsec.com -adsec.com和[out] adsec.com -lab.adsec.com,这是从其他域访问从其他域以及从内部到该域中使用的值。由于双向信任关系实际上是2个单向信任关系的叠加,因此将有2个密钥。在这里,我们想构建来自该域的金音的Irkey版本,以访问森林内的其他域,因此请使用NTLM值。
20200504113851.png-water_print

由于Irkey存在于森林内部以及森林外森林之间的信任领域之间,因此可以用于转让给认证。在Sidhistory版本的Gold Notes中,由于SID过滤器规则,无法在森林之间使用它,但是IRKEY版本不涉及此安全过滤规则,并且仍然有效。 irkey版本的金色音符可以分为森林内部和森林外两种类型。操作方法相似。在这里,我们专注于在森林中引入irkey版本的金色音符。
20200504114210.png-water_print

域间经过投票账单的身份验证依赖于IRKEY加密。在我们知道irkey的前提下,任何持有IRKEY信托域的用户都可以伪造。在测试中,我们构建了一张票,并告诉ADSEC.com域,切换到身份验证的用户是管理员,而Sidhistory是根域的企业管理员。
施工成功后,您拥有ADSEC.com的管理员权限,但是您无法获得很高的许可,因为构造的机票是ADSEC.com域的管理员票。在获得ADSEC.com域的高权限后,您可以获得该域的KRBTGT帐户的NTLM值。在此基础上,您可以继续构建金色音符的SiDhistory版本,以便您可以控制整个森林。

域信任关系的获取​

在大型域网络中,由于各种原因,例如公司合并和收购,企业重组以及业务扩展,域网络的组织模型和信任关系不同。这些不同的信任关系存储在森林根域数据库(全局目录)中,并且有很多方法可以获取此数据
PowerView和Bloodhound工具提供了多种获得域信任关系并可以可视化信任关系的方法。以下将介绍从森林中一个子域的宿主那里获得整个森林信任关系的方法和过程。
PowerView:
20200505091724.png-water_print

首先使用Get-Netforesttrust命令获得森林级信任关系。有2个森林,分别是ADSEC.com,Testlab.com和两个森林,以建立双向信任关系。
使用get-netdomaintrust命令获得adsec.com域的域级信任关系,即森林内部关系,有两个森林内部关系:与lab.adsec.com和treeroot to res.com domain to res com。
在测试中,get-netDomaintrust的参数adsec.com表示指定域中的信任关系的查询。通常,只要指定的域信任当前查询主机所在的域,就可以获得另一方的信任关系数据。
查询时,您可以使用conter -notypeinformation使用导出-NotyPeinformation将输出结果转换为CSV格式,并使用命令get -domaintrustmapping -api | export-csv -notypeinformation trusts-mapping.csv。然后使用Trustvisualizer工具进行视觉输出。最后,使用YED工具将其转换为视觉图形。
20200505092621.png-water_print

利用域信任实现跨域攻击​

如果域中的用户(假设用户是Eviluser)希望访问其他域中的资源访问,请首先确保目标域信任当前用户所在的域。这是基本前提,然后必须满足以下3个条件之一。
目标域将Eviluser添加到一个组中,该目标域在目标域中具有资源访问权限;
目标域中的某些主机或服务器将Eviluser作为本地组添加,例如,服务器作为本地管理员组。
当前用户被添加为目标域中的某些域对象的访问控制ACL的安全主体。例如,您可以修改域用户对象的密码。
根据先前的介绍,有些人可能想知道,因为您可以获得KRBTGT帐户的NTLM值或当前域的IRKEY帐户,因此您可以控制整个森林,因此无需在森林内引入跨域攻击。
这是因为在实际情况下,没有必要成功获得某个领域的KRBTGT帐户或IRKEY帐户的NTLM值,例如很少的域资源,严格的配置,及时的系统更新等。此时,您需要绕行您需要更大的域名以获得更大的机会来获得更大的oprke crominity crominity或irkey corpartiely oferkey或irkey corpartibily offreke或irkey corpart的范围。
要实现当前用户eviluser对域A的跨域攻击,您必须首先确保当前用户有权访问跨域的资源,因此攻击过程应包括多个步骤
从当前域的数据库中枚举,该域信任当前域(OUT)。由于它正在攻击其他域,因此无需注意外部域信任(IN)当前域被信任。这可以从上一节中引入的方法轻松获得。
使用信任关系,列举目标域中的哪些组包含外国域的用户。在这里应该解释的是,域中通常有3种类型的组。第一个是域本地组,可以增加跨域和跨索组成员,这也是最常见的组。第二个是全球团体,不允许任何跨域小组成员,甚至是同一森林,并且具有更高的权威,例如企业管理集团;第三个是通用群体,可以在森林中增加任何成员,但跨森林不能。在森林内的跨域攻击中,我们仅关注第一类类型的内域组。用户的成员属性由组的成员属性计算,前提是该组的成员属性已更新为全局目录数据库(全局目录)。如果森林中的另一个域将用户添加为通用组的成员,则通用组将将成员属性更新到森林的全局目录数据库,并且将通过计算来更新用户的属性;
当森林中的另一个域将用户添加为域本地组成员时,由于域本地组未更新成员属性到全局目录数据库,因此将不会计算用户的成员属性。因此,即使我们有权查询森林的全局目录数据库,我们只能将成员属性添加到其他域的共同组中。为了获得添加到其他域的本地组中的成员属性,我们需要一个一个一个一个一个一个又一次的域
列举目标域中的主机\服务器的本地组,并查看将哪些外国用户添加到主机\服务器的本地组中。您可以通过GPO组策略列举它们,也可以通过PowerView一个一个一个一个检测它们。当然,所有检测血统自动化都是全部。
列举目标域中对象的ACL,并检查是否有包含外国域用户的域对象ACL。一般而言,任何用户都可以查看所有域对象的ACL,并且所有域对象的ACL都存储在全局数据库中,可以很容易地枚举。 PowerView提供get-domainobjectAcl命令,以便于枚举
20200505102041.png-water_print

第二个过滤器是对在步骤2、3和4中过滤的用户执行的,并且属于当前域的用户被选为当前域中的攻击对象,例如获取目标用户的NTLM值或TGT Ticket(该域的攻击方法)。
使用步骤3攻击用户NTLM值或TGT票证以跨域访问,输入目标域,然后攻击以获取目标域的KRBTGT帐户或IRKEY帐户的NTLM值。如果条件不成熟,请继续上述步骤,然后逐渐进入更多的域以找到机会。 When a user is joined to a group by the forest external domain, it will appear in the CN=ForeignSecurityPrincipals,DC=domain,DC=com group of the external target domain, which is equivalent to the user's representative or alias in the external domain, and all foreign users in the domain have the same SID, which is the effect of the cross-forest SID filtering security mechanism.
因此,只需列举外国安全性小组,您就可以知道哪些用户可以访问此外部森林,假设用户结果收集是外部使用者。接下来,检查我们当前域中的用户是否包括包括在内。如果是这样,直接攻击这些用户以获取NTLM值或TGT票证,从而获得了对森林外部域的资源访问权。
如果不是,请检查外部使用者是否包含我们当前森林的用户,假设结果收集是内部使用者。查询内部使用者位于当前森林的域。针对这些域,使用森林内的跨域攻击方法,攻击这些域,获得进入这些域的权限,然后从这些域中攻击内部使用者中的用户,从而获得对外部域的资源访问权利。这是一次旁路攻击

SID 过滤机制​

Microsoft声称森林是Active Directory的安全边界,但横向攻击已在2005年出现。首先说明Sidhistory和SID过滤机制是什么

SIDHistory​

sidhistory(PAC结构中的额外字段)是为了促进用户在域之间的迁移。当用户迁移到新域时,可以将原始的SID和组的某些SID添加到新域中新用户的Sidhistory属性中。当此新用户访问资源时,可以确定基于资源ACL中SID或Sidhistory的匹配而拒绝或允许访问。因此,Sidhistory等同于具有一个或多个组属性,并且权限扩大
在同一森林内的跨域信任关系中,SID滤波器保护机制不会过滤Sidhistory属性。如果子域的侧面属性添加了企业管理员的SID(企业管理员必须是森林管理员),则子域具有森林管理员管理局并扩大了权限,因此随后将侧面历史修改为受保护的属性。
在跨森林的信任关系中,Sidhistory属性通过SID过滤机制过滤,并且不再具有上述特权属性。这也是森林是Active Directory的安全边界的原因之一。

SID 过滤机制​

当用户的TGT通过域信任关系转发到新域时,TGT中的PAC(特权属性证书)包含用户的SID和Sidhistory。新领域对PAC进行了严格的审查,并根据信件进行
 
后退
顶部