Appearance
Appearance
Kerberos 是一种在网络用户与服务之间提供相互认证的协议,常见于 Unix 环境和 Windows Active Directory 环境。在 Wireshark 中,本页主要用于识别 Kerberos 流量、理解 AS/TGS/AP 交换,以及在有 keytab 的情况下解密 Kerberos ticket 和部分使用 GSS-API/Kerberos 的上层协议。
什么时候用:
不要混淆:
| 概念 | 含义 | 排查时注意 |
|---|---|---|
| Principal | Kerberos 中的身份名称,可代表用户或服务 | 例如用户 principal 或 cifs/host.example.com@REALM 这类服务 principal。 |
| Ticket | KDC 发给客户端、用于向服务证明身份的票据 | Wireshark 解密 ticket 通常需要对应密钥或 keytab。 |
| KDC | Key Distribution Center,Kerberos 的密钥分发中心 | 通常包含 AS 与 TGS 角色;在 AD 中由域控制器承担。 |
| AS exchange | 客户端向认证服务申请初始凭据 | 常见消息为 AS-REQ / AS-REP。 |
| TGS exchange | 客户端用已有凭据申请访问某服务的票据 | 常见消息为 TGS-REQ / TGS-REP。 |
| AP exchange | 客户端向目标服务出示票据 | 常见消息为 AP-REQ / AP-REP。 |
| Keytab | 保存 principal 密钥的文件 | Wireshark 可用它解密可匹配的 Kerberos 数据;不要把 keytab 当普通配置文件公开。 |
Kerberos 最初作为 Athena 项目的一部分开发和部署,当时的协议版本是 Kerberos v4。Kerberos v4 没有官方规范,除 AFS 环境中仍有有限使用外,其他环境基本已被 Kerberos v5 取代。
Kerberos 5 已标准化,并存在多种实现。原页列出的常见实现包括 Heimdal Kerberos、MIT Kerberos,以及 Microsoft 在 Windows 2000 及更高版本中使用的实现。
Kerberos 最初是纯认证系统;如今也通过 PKINIT/X.509 和 Microsoft PAC 结构等扩展承载授权数据。
最初 Kerberos 使用 UDP 作为传输协议;现代实现也支持 TCP,以克服 UDP 中的 PDU 大小限制。所有现代客户端都支持 TCP,但较旧客户端可能不支持。
常见捕获过滤器:
udp port 88tcp port 88仅显示 Kerberos v5 流量:
kerberos仅显示 Kerberos v4 流量:
kerberos4| 交换 | 参与方 | 目的 | Wireshark 中常见线索 |
|---|---|---|---|
| AS exchange | Client 与 KDC/AS | 获取初始凭据,通常是 TGT | AS-REQ、AS-REP、预认证相关字段。 |
| TGS exchange | Client 与 KDC/TGS | 用 TGT 申请访问目标服务的 service ticket | TGS-REQ、TGS-REP、服务 principal。 |
| AP exchange | Client 与目标服务 | 向服务出示 ticket,完成服务访问认证 | AP-REQ、AP-REP,可能嵌在 LDAP、SMB、DCE/RPC 等上层协议中。 |
排查时可按时间顺序先看 AS,再看 TGS,最后看 AP。若只有 AP 交换,可能抓包开始时间晚于用户登录或票据申请。
Kerberos dissector 功能完整。如果 Wireshark 编译并链接了 Heimdal 或 MIT Kerberos 库,并且提供了包含共享密钥的 keytab 文件,就可以解密 Kerberos tickets。原页说明此功能可用于 Linux/Unix;Windows 支持在 0.99.3 中加入。
此支持还可用于若干使用 GSS-API 和 Kerberos 的协议解密,例如 LDAP 和 DCE/RPC。
可在 KRB5 preferences 中指定 keytab 文件:
Edit -> Preferences -> Protocols -> KRB5 -> Kerberos keytab file。-K option 指定要加载的 keytab file;可以多次使用以加载多个 keytab。旧版限制(原页历史记录):
MIT 和 Heimdal Kerberos 都提供 ktutil。如果已知 principal 的密码或 Kerberos key,可用它创建 keytab。
已知密码时的原页示例(Windows domain 用户,MIT ktutil):
ktutil
ktutil: addent -password -p username/domain.com@DOMAIN.COM -k <kvno> -e aes256-cts-hmac-sha1-96
ktutil: wkt ./keytab.file
ktutil: quit原页说明,现代 Windows 环境默认使用 AES256;较旧环境使用 rc4-hmac。实际算法应以抓包中的 etype 字段为准。
已知 key 时的原页示例,使用 rc4-hmac,因为该 key 实际上是 NT hash:
$ ktutil
ktutil: addent -p adm-drp@inscorp.com -k 1 -key -e rc4-hmac
Key for adm-drp@inscorp.com (hex): 5c4dbe6a8a44446f8d2899ff08ea14f2
ktutil: wkt ins.keytab
ktutil: qWindows 2003 support tools 中的 ktpass.exe 也可以创建 keytab。原页提醒:只有 Windows 2003 SP1 support tools 中的较新版本支持 RC4 keys。
用于导出 computer account principal 的原页示例:
C:\temp> ktpass /out quark.keytab /mapuser quark$@FOO.NET /princ cifs/quark.foo.net@FOO.NET /crypto RC4-HMAC-NT /rndpass /ptype KRB5_NT_PRINCIPAL
Targeting domain controller: dc1.foo.net
Using legacy password setting method
Successfully mapped cifs/quark.foo.net to quark$.
WARNING: Account quark$ is not a user account (uacflags=0x1021).
WARNING: Resetting quark$'s password may cause authentication problems if quark$ is being used as a server.
Reset quark$'s password [y/n]? y
WARNING: pType and account type do not match. This might cause problems.
Key created.
Output keytab to quark.keytab:
Keytab version: 0x502
keysize 64 cifs/quark.foo.net@FOO.NET ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x17 (RC4-HMAC) keylength 16 (0xd0fc81746c2bed1da5d505b491634ce5)原页特别提醒:在已加入 domain 的机器的 computer account 上重置密码可能造成问题;可考虑使用不会重置密码的替代方法。
原页还描述了从 Windows domain controller 导出 Kerberos keys 的方法:
| 方法 | 原页要点 | 风险提示 |
|---|---|---|
| ktexport.exe | 可将 domain controller 上的 RC4 keys 转储到 keytab;不会像 ktpass 那样重置密码。 | 需要在目标 domain controller 上运行;keytab 中除 RC4 keys 外的部分数据可能不准确,但原页称 Wireshark 不在意。 |
| NTDSXtract | 可从 SYSTEM 与 NTDS.DIT 中导出 Kerberos keys;不会修改 Domain Controller。 | 涉及域控数据库和密钥材料,敏感度极高;应只在合法授权和取证流程中使用。 |
原页给出了提取 SYSTEM 与 NTDS.DIT、使用 ntdsutil、Volume Shadow Copy、esedbexport、Python 2、PyCrypto、NTDSXtract dskeytab.py 等历史步骤。这些内容依赖旧工具和旧系统环境,本文不展开重写;实际操作应以当前工具文档、授权范围和取证要求为准。
原页提到:
SampleCaptures/krb-816.zip:包含 Kerberos traffic capture 和 keytab file。SampleCaptures/kerberos-Delegation.zip:Windows Active Directory 中 Kerberos Delegation 的示例,也包含 keytab file。SampleCaptures/constained-delegation.zip:Windows 2003 domain 中 Kerberos constrained delegation (s4U2Proxy) 的示例。已废弃:
Imported from https://wiki.wireshark.org/Kerberos on 2020-08-11 23:15:46 UTC