Windows跨域攻击实战:从信任关系到KRBTGT哈希的攻防博弈 1. 项目概述从单域渗透到跨域攻防的思维跃迁在实战攻防演练或者红队评估中我们常常会遇到这样的场景费了九牛二虎之力终于拿下了目标内网中一个部门的域控制器获得了该域的完全控制权。正当你准备收工以为大功告成时却发现真正想要的核心数据、关键业务系统并不在你当前控制的这个域里而是在隔壁另一个独立的域环境中。这时候摆在面前的只有两条路要么就此止步报告说“已攻陷某域但核心目标未达成”要么就必须思考如何从当前这个“桥头堡”出发去攻陷另一个看似独立、实则可能存在千丝万缕联系的“新大陆”。后者就是我们今天要深入探讨的“跨域攻击”。跨域攻击本质上是一种权限的横向与纵向扩展艺术。它考验的不仅是攻击者对单一Windows域环境的理解深度更是对整个企业内网架构、信任关系设计、以及安全策略薄弱点的全局洞察力。很多安全工程师对域内横向移动如数家珍但一提到跨域就感觉隔了一层纱概念模糊手法生疏。实际上随着企业规模的扩大多域、多林架构已成为常态跨域攻击也从一种“高阶技巧”变成了红队队员和渗透测试人员的“必修课”。理解攻击者的跨域手法对于防守方构建纵深、动态的防御体系具有至关重要的意义。这篇文章我将结合多年的实战经验为你拆解跨域攻击的核心原理、经典手法并分享从防御视角该如何布防。2. 跨域攻击的核心原理与信任关系剖析要理解跨域攻击首先必须吃透Windows域之间的“信任关系”。你可以把它想象成国家之间的外交关系。A国和B国建交建立信任两国的公民用户在通过本国使馆域控制器验证身份后就可以凭护照安全票据前往对方国家域旅行或工作访问资源。Windows域信任就是为解决这种多域环境下的资源共享和身份认证而设计的机制。2.1 域信任关系的类型与特性默认情况下一个域只信任自己域内的用户。信任关系就是打破这种壁垒的钥匙。从方向上看信任分为单向信任和双向信任。单向信任好比A国单方面允许B国公民入境但B国不一定允许A国公民入境。双向信任则是互相开放。从传递性上看分为可传递信任和不可传递信任。可传递信任是理解跨域攻击的关键如果域A信任域B且域B信任域C那么在可传递信任下域A也会间接信任域C。这就像通过一个共同的朋友介绍你也能认识朋友的朋友。在Windows Active Directory林中同一个林内的域之间默认建立的就是双向、可传递的信任关系这是攻击者可以利用的“高速公路”。从Windows Server 2003开始这种林内的默认信任就变成了双向可传递的它极大地便利了管理但也无形中扩大了攻击面。管理这些信任关系的权限很高通常只有Domain Admins组内的成员才有权操作。而在一个林的根域中还存在一个更高级的组——Enterprise Admins。这个组的成员拥有对整个林中所有域的完全控制权是攻击者梦寐以求的“皇冠上的明珠”。2.2 攻击者视角下的信任关系价值对于攻击者而言成功渗透一个域后会立刻着手绘制“信任地图”。他们会使用诸如nltest /domain_trusts或ldp.exe这样的工具来枚举当前域与其他域之间存在的所有信任关系。这张地图会告诉他们信任了谁又被谁信任找到可能通往更高权限域或核心业务域的路径。信任的类型是父子域信任同林还是外部信任不同林或是森林信任不同类型的信任攻击方法和难度截然不同。SID过滤与筛选器这是微软引入的安全机制用于在跨域访问时过滤掉来自受信域的不安全SID安全标识符。但历史证明这些机制并非无懈可击。理解这些攻击者就能判断是直接利用现有的信任关系“搭便车”还是需要先去破坏或伪造信任关系来“搭桥”。3. 主流跨域攻击手法实战拆解掌握了原理我们来看攻击者具体是怎么做的。跨域攻击手法多样但核心思路不外乎利用凭证、滥用信任、伪造身份。3.1 利用常规渗透方法进行跨域这是最直接但往往也最容易被忽视的方法。攻击者并不一定需要高深的域知识。例如Web应用漏洞跨域假设公司内网有两个域corp.com办公域和research.corp.com研发域。研发域中有一台面向全公司提供文档查询的Web服务器。攻击者通过鱼叉邮件等手段在办公域获得了一个初始立足点然后通过浏览器访问了那台研发域的Web服务器。如果该Web应用存在SQL注入或文件上传漏洞攻击者就可能通过它直接获得研发域某台服务器的权限从而实现从corp.com域到research.corp.com域的跨越。这种攻击完全发生在应用层绕过了底层的域信任机制。凭证复用与弱口令这是内网安全的老大难问题。很多企业的不同域虽然逻辑上隔离但系统管理员可能是同一批人。这就导致一种可怕的情况域A的域管理员账户密码与域B的域管理员账户密码完全相同。攻击者在拿下域A的域控后会立即尝试用获取到的哈希或明文密码去访问域B的域控。这种“撞库”在内网的成功率高得惊人。实操心得在红队行动中拿到一个域的权限后第一件事就是用抓到的所有密码哈希和明文去尝试横向连接内网其他网段的重要IP如其他域的域控IP。我习惯用crackmapexec工具一条命令就能批量测试SMB、WinRM等服务的凭证复用情况效率极高。3.2 利用域信任密钥发起票据传递攻击这是更具“域特色”的攻击方式技术含量更高。其核心在于利用域之间建立信任时交换的“信任密钥”。信任密钥是什么当两个域建立信任关系时它们会共享一个长期密钥用于在后续跨域认证时生成和验证安全票据。这个密钥的哈希值NTLM Hash被称为域间信任密钥或信任账户密码哈希。攻击流程信息收集攻击者首先需要确认当前域与目标域之间存在信任关系并获取目标域的域名和域控信息。导出信任密钥如果攻击者已经控制了当前域的域控制器DC他可以使用 Mimikatz 命令lsadump::trust /patch来导出与其他域之间的信任密钥哈希。伪造跨域票据拿到这个信任密钥哈希后攻击者就可以伪造来自受信域的“黄金票据”。但这里有个关键点普通的黄金票据是针对本域KRBTGT账户的而跨域需要的是针对信任关系的票据。攻击者可以利用工具如asktgs.exeKekeo工具套件的一部分配合信任密钥哈希向当前域DC请求一张访问目标域服务的票证TGS。注入与访问获取到伪造的TGS后使用kirbikator.exe或 Mimikatz 的kerberos::ptt命令将票据注入到当前会话的内存中。之后攻击者就可以使用标准的Kerberos网络工具如dir \\targetdc.mydomain.com\c$来访问目标域的资源系统会使用内存中的这张“假护照”完成认证。这种攻击的可怕之处在于它不需要知道目标域任何用户的密码仅仅利用域间固有的信任机制就能实现权限跨越。3.3 利用KRBTGT哈希与SID History进行林内提权这是针对同一个Active Directory林内不同域的最强大攻击手段之一堪称“核武器”。其前提是攻击者已经获取了林中某个域的KRBTGT账户的NTLM哈希。KRBTGT与SID History每个域都有一个KRBTGT账户它是生成Kerberos票据的“密钥发行中心”账户。SID History是一个用户属性用于记录用户以前所属组的SID。在域迁移时为了保证用户访问权限不丢失会将旧域的SID添加到新账户的SID History中。攻击原理在同一个林内所有域的KRBTGT账户的密码是同步的吗不是。但是林根域的KRBTGT哈希具有特殊意义。更关键的是攻击者可以在伪造黄金票据时手动在票据的SID History字段中添加目标域的域管理员组或其他高权限组的SID。攻击步骤攻击者控制了林中的子域child.corp.com并设法 dump 出了该子域的 KRBTGT 哈希注意不是林根域的。他想攻击同林中的另一个子域finance.corp.com。他首先需要获取finance.corp.com域的域管理员组SID例如S-1-5-21-...-512。然后他使用 Mimikatz利用child.corp.com域的 KRBTGT 哈希伪造一张黄金票据。在伪造时他指定票据的用户名可以是任意用户甚至是不存在的但关键在于他使用/sids参数将finance.corp.com的域管理员组SID添加到票据的SID History中。将这张伪造的票据注入内存后当攻击者尝试访问finance.corp.com域的资源时票据中的SID History会被目标域控制器评估。由于同林内的域信任是可传递的且SID History在默认配置下会被接受目标域DC就会认为该用户拥有finance.corp.com的域管理员权限从而授权访问。这种方法几乎可以授予攻击者在整个林内的任意权限危害性极大。攻击手法前提条件利用核心攻击范围隐蔽性常规渗透/凭证复用获取到一套域凭据目标服务存在漏洞或弱口令密码哈希/明文密码的复用取决于凭证权限和网络可达性较低会在目标系统产生登录日志信任密钥票据传递控制信任关系一端的域控能导出信任密钥哈希域间的信任密钥NTLM Hash具有直接信任关系的域之间高属于Kerberos协议内的正常票据请求KRBTGT哈希SID History控制林中任意一个域的域控获取其KRBTGT哈希本域KRBTGT哈希 目标域高权限组SID同一林内的所有域极高但SID History滥用可能被高级审计发现4. 防御体系构建从静态边界到动态感知了解了攻击者的利刃我们来看看如何铸盾。防御跨域攻击绝非配置一两个开关那么简单它需要一套从架构设计、策略配置到持续监控的完整体系。4.1 架构与策略层面的根本性防御最小权限与职责分离域管理员隔离绝对禁止同一批管理员、使用相同的账户密码管理不同的域。为每个域设立独立的Domain Admins组和成员。禁用Enterprise Admins组在非必要情况下林根域的Enterprise Admins组应保持为空。日常管理使用子域的域管理员账户仅在执行林级操作时才使用该账户。严格限制信任关系非必要不建立域信任。如果必须建立例如与合作伙伴的外部信任应遵循最小化原则创建单向、不可传递的信任并精确配置选择性身份验证只允许受信域的特定用户或组访问本域特定资源。强化认证与票据安全启用Kerberos Armoring部署Windows Server 2012 R2及以上版本并启用“始终提供声明”和“故障时提供声明”策略配合支持Kerberos Armoring的客户端可以强化Kerberos协议抵御部分票据伪造攻击。实施受保护的用户组将关键管理员账户如域管理员、企业管理员添加到“受保护的用户”安全组。此组中的成员只能使用Kerberos进行网络身份验证并且其凭据默认不支持较弱的加密类型或可重放的协议能有效防范哈希传递攻击。定期重置KRBTGT账户密码这是一个至关重要的维护任务。微软官方建议在已知或疑似KRBTGT哈希泄露后必须连续重置两次该密码因为Kerberos协议有票据缓存机制。即使没有泄露也应每半年或一年定期重置以缩短攻击窗口。可以使用微软提供的Specops Gpupdate或第三方脚本自动化此过程。监控与发现SID History滥用启用并集中收集域控制器上的高级审计策略特别是“帐户管理”下的“审核安全组管理”和“审核用户帐户管理”事件监控对SID History属性的修改。使用安全信息与事件管理SIEM系统或专用工具建立检测规则寻找Kerberos票据中SID History字段包含非本域SID的异常登录事件。这是一个非常关键的入侵指标。4.2 针对特定攻击手法的检测与缓解防御信任密钥攻击监控信任账户活动信任账户如DOMAIN_A$平时极少被使用。任何使用信任账户发起的登录或票据请求都应被视为极高风险事件触发告警。使用林功能级别将林功能级别提升至Windows Server 2012 R2或更高。更高的功能级别提供了更强的安全特性如基于声明的身份验证可以更精细地控制跨域访问。防御凭证复用与横向移动部署LAPS本地管理员密码解决方案确保每一台成员服务器和工作站的本地管理员密码都是随机、唯一且定期更改的。这能彻底杜绝通过本地管理员密码哈希进行的横向移动。实施网络分段与微隔离即使在同一内网也要通过防火墙或SDN技术严格控制不同域、不同业务区域之间的网络流量。例如办公域的子网不能直接访问研发域的所有服务器只能访问特定的发布服务器或跳板机。启用NTLM审计与限制在域组策略中启用“审核NTLM身份验证”和“限制NTLM”策略。虽然完全禁用NTLM在老旧环境可能不现实但通过审计可以发现哪些应用还在使用NTLM并逐步迁移到Kerberos。同时可以限制NTLM的出站流量防止其用于跨域攻击。4.3 构建动态防御与响应能力静态配置总有被绕过的一天因此动态的检测与响应能力至关重要。建立用户与实体行为分析UEBA系统可以学习每个用户、每台机器的正常行为模式。当发生跨域访问时系统会评估这个用户以前访问过那个域吗他访问的时间、资源是否符合其角色一个财务部的普通员工突然在凌晨三点试图访问研发域的核心代码服务器即使他使用了合法的Kerberos票据UEBA也应能识别出异常并告警。部署终端检测与响应在所有的服务器尤其是域控制器上部署EDR。EDR可以深度监控进程创建、网络连接、注册表修改等行为。当攻击者使用Mimikatz等工具尝试dump内存中的票据或哈希时EDR应能基于行为特征而非简单的哈希比对进行检测和阻断。开展常态化攻防演练与狩猎防守不能只靠设备。安全团队应定期进行内部的红蓝对抗模拟跨域攻击的全流程检验现有防御措施的有效性。同时应主动开展威胁狩猎基于前面提到的攻击指标如异常的SID History、信任账户登录、跨域的Kerberos票据请求模式等在日志中主动搜索可能已经潜伏的威胁。5. 实战场景下的问题排查与应急响应理论再完美也需要面对混乱的实战。当监控告警响起怀疑发生跨域攻击时你应该怎么做5.1 排查流程与关键日志确认告警首先分析告警的原始数据。是一个异常的Kerberos票据请求还是一次来自陌生IP的域管理员登录关联分析时间线以告警时间为中点向前后扩展数小时查看相关用户、计算机的所有登录、票据请求、账户管理事件。横向移动迹象检查告警源主机之前是否发生过可疑事件如可疑进程执行、大量端口扫描。它可能本身就是被攻陷的跳板。跨域关联如果事件涉及两个域立即协调两个域的安全管理员同时检查双方域控制器的安全日志和Kerberos事件日志。关键日志事件ID4768Kerberos身份验证-票据请求重点关注Ticket Encryption Type加密类型是否过弱、Service Name请求的服务是否是域控的krbtgt或关键服务。4769Kerberos服务票据操作重点关注Ticket Options和Status。失败的票据请求Status非0x0可能代表攻击者在枚举或暴力破解。4624登录成功和4625登录失败特别关注Logon Type例如Type 3是网络登录常用于横向移动、Source Network Address来源IP是否异常、Process Name是什么进程发起的登录。4672分配给新登录的特殊权限任何用户被授予了管理员权限如SeDebugPrivilege都值得深究。4728用户被添加到启用安全性的全局组中/4732用户被添加到启用安全性的本地组中监控任何将用户添加到高权限组如Domain Admins的操作。5.2 应急遏制与根除步骤一旦确认入侵必须快速、有序地响应立即隔离通过网络ACL或主机防火墙立即隔离被确认已沦陷的系统和疑似被用作跳板的系统。优先隔离域控制器。重置凭据立即重置所有已确认泄露的高权限账户密码域管理员、企业管理员等。执行KRBTGT账户密码重置流程连续重置两次。重置受信关系账户密码如果怀疑信任密钥泄露。清除持久化在被入侵主机上全面检查计划任务、服务、WMI订阅、启动项、注册表Run键等常见的持久化位置清除攻击者留下的后门。证据保全与深度分析对内存和磁盘进行镜像供后续深度取证分析攻击路径和工具完善防御策略。恢复与加固从干净备份恢复系统或在彻底清理后按照前文所述的防御最佳实践对系统进行安全加固并更新所有账户的密码。跨域攻防是一场在复杂企业网络纵深中的猫鼠游戏。攻击者在不断寻找信任链条中最薄弱的一环而防御者则需要构建一个层层设防、动态感知、快速响应的立体化安全体系。这场博弈没有终点唯有持续学习、不断实践、保持警惕才能在这场无声的较量中占据主动。我的经验是防守方最大的优势在于对自身环境的熟悉将这种熟悉转化为精细化的策略和敏锐的监控就能让攻击者举步维艰。