kerberos原理解析
- 一、核心术语
- 1、KDC:key distributed center ,整个安全认证过程的票据生成管理服务,其中包含两个服务,AS和TGS
- 2、AS:Authentication service,认证服务,为client生成TGT的服务
- 3、TGS:Ticket granting service,ticket生成服务,为client生成某个服务的ticket
- 4、TGT:Ticket-granting ticket ,用于获取ticket的票据
- 5、AD:Account database,存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT
复制代码
二、认证流程
总体认证流程分为三步,client到AS;client到TGS;client到server
1、client向kerberos服务请求,希望获取访问server的权限。kerberos得到了这个消息,首先得判断client是否是可信赖的,也就是白名单黑名单的说法。这就是AS服务完成的工作,通过在AD中存储黑名单和白名单来区分client。成功后,返回AS返回TGT给client。
2、client得到了TGT后,继续向kerberos请求,希望获取访问server的权限。kerberos又得到了这个消息,这时候通过client消息中的TGT,判断出了client拥有了这个权限,给了client访问server的权限ticket。
3、client得到ticket后,终于可以成功访问server。这个ticket只是针对这个server,其他server需要像TGS申请。
整个过程的通信都是加密的,这里设计到两层加密,因为所有的认证都是通过client,也就是说kerberos没有和server直接交互,这样的原因是kerberos并不知道server的状态,也无法保证同时和server,client之间通信的顺序,由client转发可以让client保证流程顺序。
第一层加密,kerberos对发给server数据的加密,防止client得到这些信息篡改。
第二层加密,kerberos对发给client数据的加密,防止其他网络监听者得到这些信息。
SPN在域环境中的应用
1、SPN概述(域服务认证体系)用于定位服务服务主体名称(SPN)是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名称。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。如果在整个林中的计算机上安装多个服务实例,则每个实例都必须具有自己的SPN。如果客户端可能使用多个名称进行身份验证,则给定的服务实例可以具有多个SPN。例如,SPN总是包含运行服务实例的主机名称,所以服务实例可以为其主机的每个名称或别名注册一个SPN。
2、SPN扫描
SPN格式:
SPN = serviceclass / hostname [:port] [/ servicename]
- Serviceclass:服务组件名称
- Hostname:以/ 分隔开,是计算机的FQDN(全限定域名,计算机名和域名)
- Port:以:分隔开,是该服务监听的端口号
- Servicename:一个字符串,可以是服务的专有名称(DN),objectGuid,Internet主机名或全限定域名常见的SPN服务,如MSSQL
MSSQLSvc/DC.bihuo.com:1433
MSSQLSvc/192.168.26.1:1433
3、SPN扫描
spn扫描也可以叫扫描Kerberos服务实例名称,在Active Directory环境中发现服务的最佳方法是通过“SPN扫描”。通过请求特定SPN类型的服务主体名称来查找服务,SPN扫描攻击者通过网络端口扫描的主要好处是SPN扫描不需要连接到网络上的每个IP来检查服务端口(不会触发ips,ids产生警告日志)。SPN查询是Kerberos票据行为的一部分
1) Setspn -T domain(域名) -q */* 扫描所有spn服务名称
- setspn -T bihuo.cn -q */*
复制代码
2) PowerShell-AD-Recon 该工具包提供了一些探测指定SPN的脚本,例如Exchange,Microsoft
SQLServer,Terminal等。
import-module .\Discover-PSInterestingServices.ps1
discover-psinterestingservices
使用脚本:
2、SPN扫描
3)GetUserSPNs是Kerberoast工具集中的一个powershell脚本,用来查询域内以用户注册的SPN
- import-module.\GetUserSPNs.sp1
复制代码
4)Powerview.ps1PowerView相对于上面几种是根据不同用户的objectsid来返回spn服务,返回的
信息更加详细
5) PowerShellery下有各种各样针对服务SPN探测的脚本。在(Powershellery-master\Stable
ish\Get-SPN)其中一些需要PowerShell v2.0的环境,还有一些则需要PowerShell v3.0环境。
1.Get-SPN -type service -search "*" 查询所有服务
- 1.Get-SPN -type service -search "*" 查询所有服务
复制代码
- 2.Get-SPN -type service -search "*" -List yes | Format-Table 格式化显示
复制代码
|