目录
- 1. 什么是Kerberos认证
- 2. Kerberos认证流程
- 3. 票据伪造
- 4. 金票和银票的原理
- 5. 金票和银票的区别
- 6. 针对Kerberos的攻击
1. 什么是Kerberos认证
Kerberos是一种网络身份认证的协议,协议设计目的是通过使用秘钥加密技术为客户端/服务器应用程序提供强身份验证,保护服务器防止错误的用户使用,同时保护它的用户使用正确的服务器,即支持双向验证。
Kerberos协议的整个认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意的读取、修改和插入数据。简而言之,Kerberos作为一种可信任的第三方认证服务,通过传统的密码技术(共享密钥)执行认证服务。
2. Kerberos认证流程
- DC:Domain Controller,域控
- KDC:Key Distribution Center,秘钥分发中心。是一个网络服务,提供ticket和临时会话密钥
- AD:Account Database,账户数据库
- AS:Authentication Server,身份验证服务
- TGS:Ticket Granting Server,票据授予服务
- TGT:Ticket Granting Ticket,票据中心授予的票据先去AS身份验证服务,返回身份验证,带着身份验证去TGS拿票据,带着拿回来的票据去服务器
- Ticket:一个记录,客户用它来向服务器证明自己的身份,包括服务的主体名称、用户的主体名称、用户主机的ip地址、时间标记、会话密钥、定义票证生命周期的时间戳。
3. 票据伪造
票据分为黄金票据和白银票据。
黄金票据是伪造TGT。伪造黄金票据必须拿到域控管理员的权限才可以。
伪造黄金票据的要求:
- 域名城
- 域SID值
- 域的KRBTGT账户NTLM哈希密码
- 伪造用户名
4. 金票和银票的原理
金票(黄金票据,Golden ticket):在 Kerberos 认证中,Client 通过 AS(身份认证服务)认证后,AS 会给 Client一个Logon Session Key 和 TGT,而 Logon Session Key 并不会保存在 KDC 中,krbtgt 的NTLM Hash 又是固定的,所以只要得到 krbtgt 的 NTLM Hash,就可以伪造TGT 和 Logon Session Key 来进入下一步 Client 与 TGS 的交互。而已有了金票后,就跳过AS 验证,不用验证账户和密码,所以也不担心域管密码修改。
银票(白银票据,Sliver ticket):如果说黄金票据是伪造的 TGT,那么白银票据就是伪造的 ST。在 Kerberos 认证的第三步,Client 带着 ST 和Authenticator3 向 Server 上的某个服务进行请求,Server 接收到 Client 的请求之后,通过自己的 Master Key 解密 ST,从而获得Session Key。通过 Session Key 解密Authenticator3,进而验证对方的身份,验证成功就让 Client 访问 server 上的指定服务了。所以我们只需要知道 Server 用户的Hash 就可以伪造出一个 ST,且不会经过 KDC,但是伪造的门票只对部分服务起作用。
5. 金票和银票的区别
获取方式不同,认证流程不同,加密方式不同。
- 获取方式不同
- 金票:伪造的TGT,可以获取任意Kerberos的访问权限
- 银票:伪造的ST,只能访问指定的服务,如CIFS认证流程不同
- 认证流程不同
- 金票:同KDC交互,但不同AS交互
- 银票:不同KDC交互,直接访问Server
- 加密方式不同
- 金票:由krbtgt NTLM Hash 加密
- 银票:由服务账号 NTLM Hash 加密
6. 针对Kerberos的攻击
- 用户名爆破
- 密码喷洒和密码爆破
- Kerberoasting
- ASRepRoasting
- 黄金票据和白银票据
- MS14-068
- 非约束委派、约束委派、基于资源的约束委派
- 票据传递(ptt/ptk/ptc)
- mimikatz加密降级攻击(万能钥匙)
- 使用恶意的kerberos证书做权限维持