Windows协议 Kerberos篇
认证流程
角色 | 功能 |
---|---|
Domain Controller | 也就是域控 |
Key Distribution Center | 秘钥分发中心,简称KDC,默认安装在域控里,包括AS、AD和TGS。 |
Account Database | 类似于SAM的一个数据库(AD),存储所有client的白名单,只有存 在于白名单的client才能顺利申请到TGT |
Authentication Service | 简称为AS,为client生成TGT的服务;也就是认证服务 |
Session Key | 会话密钥 |
Session Key Distribution | 会话密钥分发,当客户端想要连接到服务器时,客户端会向 KDC 发送请求,KDC 会分发一个唯一的短期会话密钥,供双方在相互验证时使用 |
Ticket | 票据,是网络对象互相访问的凭证 |
Ticket Granting Ticket | 票据授权票据(TGT)。TGT 使身份验证服务能够安全地将请求者的凭据传输到票证授予服务。 |
Ticket Granting Service: | 简称为TGS,为client生成某个服务的ticket;也就是出票服务 |
User key | 也就是用户的NTLM Hash |
AS_REQ & AS_REP
从AS中获取TGT
消息 1:身份验证服务请求(Authentication Service Request)
也就是AS_REQ
client将消息发送到KDC
该消息包括:
- 用户主体名称。
- 帐户域的名称。
- 使用从用户密码派生的用户密钥加密的预身份验证数据。(NTLM Hash(Timestamp))
检索用户密钥
当 KDC 收到来自用户工作站上 Kerberos 客户端的请求时,KDC 会在其数据库中搜索该用户,提取帐户记录,并从记录中的字段中获取用户密钥
验证用户身份
KDC 解密预认证数据并评估其中的时间戳。如果时间戳通过测试,则 KDC 可以确信预认证数据是用用户密钥加密的,从而验证用户是真实的。
消息 2:身份验证服务回复(Authentication Service Reply)
也就是AS_REP
会回复两个消息
- Client NTLM Hash(Session Key),用户与TGS一起使用的TGS会话密钥,使用用户的NTLM Hash进行加密;用于后续和TGS服务进行通信
- TGT,使用TGS密钥加密
TGT 包括:
- KDC 与用户一起使用的 TGS 会话密钥。
- 用户的授权数据。
- 授权数据包括:
- 用户帐户的 SID。
- 用户所在域 tailspintoys.com 中的安全组的 SID。
- 企业中通用组的 SID,包括用户或用户所属的域组之一。
当client收到server的回复时,用自己的NTLM Hash解密消息1,获得其中的Session Key
客户端不需要解密消息2(他也解密不了 没有key),只需要消息1中的TGS Session Key就可以向TGS发起请求
TGS_REQ & TGS_REP
从TGS中获取ticket
消息 3:票据授予服务请求
也就是TGS_REQ
可以从图中看出 发送过去的也有两部分
- TGT: 用户的TGT
- Authenticator:在Kerberos的Authenticator实际上就是关于Client的一些信息和当前时间的一个Timestamp;Authenticator=Session Key(Client info + Timestamp)
消息 4:票据授予服务回复
也就是TGS_REP
当 KDC 收到 KRB_TGS_REQ 时,它用自己的密钥(TGS key)解密TGT,从TGT中提取到Session Key,再使用Session Key解密其他内容,解密出来的内容同TGT中的信息进行校验来评估客户端可不可信。
如果验证通过,KDC从TGT中提取用户的授权数据并创建另一个Session Key(Server Session Key)供客户端与服务一起使用。KDC使用用户的TGS里的Session Key加密这个Server Session Key(Session key(Server Session Key))。然后和用户的授权数据一起打包进Ticket中,并使用服务的密钥(Server Hash)加密Ticket(Server Hash(Ticket))。然后,KDC 在 Kerberos 票证授予服务回复 (KRB_TGS_REP) 中将这些凭据发送回客户
新的Server Session Key是客户端和服务端一起使用的
当Kerberos客户端收到回复时,它使用用户的TGS的Session Key解密Server Session Key以用于服务,并将密钥存储在其凭据缓存中。然后它提取服务的票证并将其存储在其缓存中。
AP-REQ & AP-REP
就是请求服务了
AP-REQ
会向服务器发送两条消息
- Service Ticket:用服务器Hash加密的票据
- 新的Authorization:里面存的是用户的数据+Timestamp,用Server Session Key加密
AP-REP
该服务接收 KRB_AP_REQ,解密Ticket,并提取用户的授权数据和Server Session Key。该服务使用Server Session Key解密用户的Authorization,然后评估其中的时间戳。如果身份验证器通过测试,则服务会在客户端的请求中查找相互身份验证标志。如果设置了该标志,则服务使用会话密钥对来自用户身份验证器的时间进行加密,并在 Kerberos 应用程序回复 (KRB_AP_REP) 中返回结果。如果未设置标志,则不需要响应。
当用户工作站上的客户端收到 KRB_AP_REP 时,它会使用与服务共享的Server Session Key解密服务的Authorization,并将服务返回的时间与客户端原始的Authorization中的时间进行比较。如果时间匹配,则客户知道该服务是真实的。
Windows协议 Kerberos篇的更多相关文章
- Windows协议 LDAP篇 - 组&OU
LDAP搜索 LDAP查找 位操作 以userAccountControl为例,CN=User-Account-Control,CN=Schema,CN=Configuration,DC=muxue, ...
- Windows协议 LDAP篇 - Actite Directory
LDAP简介 先说下ldap,轻量目录访问协议.LDAP就是设计用来访问目录数据库的一个协议.也就是为了能访问目录数据库,ldap是其中一种协议 LDAP的基本模型 目录树:在一个目录服务系统中,整个 ...
- Windows协议 NTLM篇
NTLM 基础 介绍 LM Hash & NTLM Hash Windows本身是不会存储明文密码的,只保存密码的hash 其中本机用户的密码hash是放在本地的SAM文件里面,域内用户的密码 ...
- Windows协议 LDAP篇 - 域权限
windows 访问控制模型 也就是大名鼎鼎的ACM,access control mode 由两部分组成的. 访问令牌(access tokens) 其中包含有关登录用户的信息(User SID,G ...
- Windows协议 LDAP篇 - 域用户和计算机用户
域用户 查询域用户 通过SAMR协议查询(net user就是通过这种协议查询的),samr也不是一种专门的协议,是一个RPC接口 在impacket里有个脚本samrdump.py,就是专门调用这个 ...
- [转帖]Windows安全认证是如何进行的?[Kerberos篇]
Windows安全认证是如何进行的?[Kerberos篇] NTLM 的简单看了一下 基本上了解了.. 这个KERBEROS 的看不太懂 感觉说的我也有点迷糊.. 虽然是对称加密的 但是不清不楚的.. ...
- Windows 7 封装篇(一)【母盘定制】[手动制作]定制合适的系统母盘
Windows 7 封装篇(一)[母盘定制][手动制作]定制合适的系统母盘 http://www.win10u.com/article/html/10.html Windows 7 封装篇(一)[母盘 ...
- Android Studio2.0 教程从入门到精通Windows版 - 入门篇
http://www.open-open.com/lib/view/open1468121363300.html 本文转自:深度开源(open-open.com)原文标题:Android Studio ...
- Windows安全认证是如何进行的?[Kerberos篇]
最近一段时间都在折腾安全(Security)方面的东西,比如Windows认证.非对称加密.数字证书.数字签名.TLS/SSL.WS-Security等.如果时间允许,我很乐意写一系列的文章与广大网友 ...
随机推荐
- 5.1 万 Star!不用 root 就能连接控制安卓的开源工具
[导语]:一款在 PC 端控制安卓设备的小工具.可在 PC 和安卓设备间互通剪贴板.用电脑键盘打字.传输文件.安装程序.截图.录屏等等功能. 简介 scrcpy 可以显示并控制通过 USB (或 TC ...
- 20、wordpress博客url静态化
20.1 wordpress没有实现伪静态时的网页: 20.2进入wordpress后台: 1.设置 2.固定链接 3.自定义链接 /archives/%post_id%.html #%post_id ...
- Datahub 0.8.5发布! 通用的元数据搜索和发现工具
近期Datahub 发布了最新的版本0.8.5,作为LinkedIn开源的通用的元数据搜索和发现工具.Datahub近一年来有了巨大的发展,也成为了很多公司进行元数据管理的调研方向并进行使用的选择. ...
- PHP实现的解汉诺塔问题算法示例
问题描述: 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到小按顺序放置64个金盘(如下图).游戏的目标:把A杆 ...
- 关于mysql binlog二进制
binlog 在mysql中,当发生数据变更时,都会将变更数据的语句,通过二进制形式,存储到binlog日志文件中. 通过binlog文件,你可以查看mysql一段时间内,对数据库的所有改动. 也可以 ...
- 了解Javascript中函数作为对象的魅力
前言 Javascript赋予了函数非常多的特性,其中最重要的特性之一就是将函数作为第一型的对象.那就意味着在javascript中函数可以有属性,可以有方法, 可以享有所有对象所拥有的特性.并且最重 ...
- mybatis常用标签(转)
1. 定义sql语句 select 标签 属性介绍: id :唯一的标识符. parameterType:传给此语句的参数的全路径名或别名 例:com.test.poso.User或user resu ...
- 华为交换机5855设置ssh
配置思路 配置交换机密钥对 #生成RSA密钥对 设置vty登陆用户界面的认证方式为AAA认证 #设置远程认证方式 设置aaa用户信息 #本地用户名和密码 #本地用户服务类型 #本地用户授权等级 设置s ...
- 软件测试跟踪工具Bugzilla的安装 - Linux版本
首先查看Linux当前版本 输入"uname -a ",可显示电脑以及操作系统的相关信息 输入"cat /proc/version",说明正在运行的内核版本 输 ...
- modelsim 独立仿真vivado的IP核及仿真脚本
Modelsim独立仿真vivado的IP 最近一直在做local dimming项目的FPGA硬件实现,算法的其中一步就是直方图统计,即数字图像的某一灰度级的像素数,这个直方图的源码找了半天才搞到, ...