域信任关系是Active Directory中连接不同域或林的机制。它允许一个域的用户向另一个域的资源发起身份验证请求,不必为同一批用户重复创建账号。听起来只是在两个域之间开了一扇门,但现实中的信任拓扑往往比预期的复杂,攻击者进入内网后也会优先枚举信任关系,因为这通常意味着更短的横向移动路径。要评估一个域环境的安全性,不能只看本域控件的补丁和密码策略,还必须把信任拓扑、信任类型和信任过滤策略纳入审计范围。

一、信任类型和方向决定了风险边界
不是所有域信任关系都等价。父子域之间会自动建立双向可传递的信任,同一棵域树内部的树根信任也是如此。可传递这个词很关键,它表示如果域A信任域B,而域B信任域C,那么域A会通过传递逻辑信任域C。攻击者只要在一个小的子域中获得高权限,就有机会沿着可传递路径向父域或兄弟域扩展。相比之下,外部信任通常用于两个独立林之间,默认不可传递,攻击面相对小,但如果配置了多个外部信任,仍然可能形成一条手工构造的信任链。
信任方向也经常被误解。假设域A信任域B,那么域B属于被信任域,域A属于信任域,默认情况下域B中的用户可以访问域A中的资源。攻击者如果已经控制域B,就可以尝试拿着域B的凭据进入域A;如果只控制域A,则不能直接反向使用这次信任访问域B。但在实际环境中,为了双向资源共享,管理员常常创建两条单向信任或者一条双向信任,这会让方向判断变得不再重要。
还有一个容易被忽略的对象是信任账户。每个信任关系在对应的域中都会有一个专门的账户,名称通常以域名加美元符号结尾,例如corp$。这个账户不用于日常登录,但保存着Kerberos跨域认证依赖的信任密钥。信任账户密码很少被单独轮换,攻击者如果可以提取到它,就能在信任域和被信任域之间伪造身份验证材料。
二、跨域票据滥用与SID History注入
跨域认证并不会把用户的明文密码或NTLM哈希直接发送到目标域控。Kerberos的工作方式是由用户所在域的域控先验证用户身份,再向目标域签发一份引用票据,目标域控根据信任密钥验证这份引用票据后,返回可供用户访问本地服务的票据。问题在于,如果攻击者获得了某个域的krbtgt密钥或信任账户凭据,他就可以绕过正常的用户登录过程,自己构造这样的引用票据。
比较典型的做法是跨域黄金票据。攻击者从一个域中提取krbtgt哈希,同时了解目标域的域安全标识符,然后生成一张带有目标域管理员组SID的票据。因为目标域控信任这个引用票据的来源,它可能直接接受其中的权限声明。下面是一种攻击工具的用法,仅用于安全测试和授权评估:
mimikatz # kerberos::golden /user:attacker /domain:corp.ipipp.com /sid:S-1-5-21-1004336348-1177238915-682003330 /krbtgt:fc525c9683e8fe067095ba2ddc971889 /sids:S-1-5-21-2583456789-123456789-987654321-519 /ptt
这段命令中的/sids参数就是在指定另一个域的域管理员组SID。一旦攻击成功,当前进程就可以使用伪造的Kerberos票据向目标域的服务发起请求,而不用再获取目标域内的真实账号密码。
SID History是另一个经常被滥用的特性。它最初用于域迁移场景,让用户迁移到新域后仍然保留原来域中的SID,从而不丢失旧域资源的访问权限。攻击者如果能在本域域控上修改用户属性,把自己账号的SID History中注入目标域高权限组的SID,那么在向目标域请求认证时,目标域可能会把这个外来SID当作合法权限引用。Windows虽然默认对来自外部信任和林信任的认证启用SID过滤,但很多环境出于兼容性或者历史迁移需要关闭了过滤。一旦关闭,SID History注入就能跨信任边界扩大权限。
信任账户本身也是攻击目标。一些工具可以枚举信任账户的哈希或Kerberos密钥,并利用它们构造引用票据。与普通用户账户不同,信任账户通常不受常规密码策略约束,也不容易被审计人员注意到。尤其是在大型林中,一个子域的信任账户泄露,可能通过可传递信任影响整个林。
三、审计现有信任关系与加固策略
要降低风险,第一步是搞清楚当前环境里到底有哪些信任关系、类型是什么、方向如何。可以在任何一台安装了Active Directory模块的机器上执行下面的PowerShell命令,先列出现有信任的基本属性。
Get-ADTrust -Filter * | Select-Object Name, Direction, TrustType, ForestTransitive, SelectiveAuthentication, SIDFilteringQuarantined, TrustAttributes
输出结果中,Direction表示信任方向,TrustType表示父子、树根、外部或林信任,SIDFilteringQuarantined可以看出SID过滤是否处于隔离状态。审计时不要只看信任数量,还要画出信任拓扑,标记哪些域被其他域信任,哪些信任是可传递的。很多环境中风险最大的是从低安全等级的子域指向核心域的信任,因为攻击者可以先从防护较弱的子域切入。
对于不需要广泛访问的信任关系,应优先启用选择性身份验证。默认情况下,被信任域中的所有用户都能尝试访问信任域中的资源;开启选择性身份验证后,只有被显式授予允许在目标资源上进行身份验证的用户或计算机才能进入。可以使用Set-ADTrust调整该设置:
Set-ADTrust -Identity "ipipp.com" -SelectiveAuthentication $true
执行前需要确认这条信任确实不需要全部通过。对于外部信任,还应检查SID过滤是否被关闭,不要为了简便而禁用SID过滤。某些旧应用或迁移场景可能要求关闭,但应当把这类例外记录在案,并设置定期复核时间,而不是永久放开。
信任账户密码轮换也应纳入计划。虽然Active Directory默认会为信任关系维护密码,但攻击者一旦拿到信任账户凭据,短期轮换并不会自动阻止已经伪造的票据,只能限制后续持续利用。因此轮换信任密码需要和检测、隔离配合。同时,尽量减少不必要的信任关系,尤其是已经下线的旧域或测试域。遗留信任经常成为攻击者从已停用但未清理的域向生产域移动的桥梁。
四、用事件日志发现异常跨域访问
审计配置只是基础,持续监控才能发现真实的跨域攻击行为。应至少收集所有域控上的Kerberos认证事件,重点查看事件ID4768、4769和4771。跨域访问会在事件中包含域间引用信息,如果看到某个用户短时间内从同一客户端向多个域请求服务票据,或者服务名不是常见的krbtgt、cifs、ldap,就需要进一步核查。
检测SID History滥用可以从票据中的额外SID数量入手。正常用户通常只有一个或少数几个SID,如果某张服务票据请求里携带了大量不属于本域的SID,尤其是目标域管理员组SID结尾为512、519、520的组,就可能是注入行为。部分SIEM平台可以解析Kerberos事件并输出这些字段,没有SIEM时也可以用PowerShell定期导出事件XML进行筛选。
此外,要关注使用弱Kerberos加密类型的票据。攻击工具为了兼容或规避检测,有时会使用RC4或DES加密。虽然老系统可能仍然需要RC4,但高权限账户或信任账户突然使用弱加密类型请求跨域服务,应当视为高风险信号。将这些事件与信任拓扑结合,可以更快定位攻击是来自哪个被信任域、走到了哪一步。
域信任关系Active Directory横向渗透修改时间:2026-10-01 00:04:47