认证流程

角色 功能
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

该消息包括:

  1. 用户主体名称。
  2. 帐户域的名称。
  3. 使用从用户密码派生的用户密钥加密的预身份验证数据。(NTLM Hash(Timestamp))

检索用户密钥

当 KDC 收到来自用户工作站上 Kerberos 客户端的请求时,KDC 会在其数据库中搜索该用户,提取帐户记录,并从记录中的字段中获取用户密钥

验证用户身份

KDC 解密预认证数据并评估其中的时间戳。如果时间戳通过测试,则 KDC 可以确信预认证数据是用用户密钥加密的,从而验证用户是真实的。

消息 2:身份验证服务回复(Authentication Service Reply)

也就是AS_REP

会回复两个消息

  1. Client NTLM Hash(Session Key),用户与TGS一起使用的TGS会话密钥,使用用户的NTLM Hash进行加密;用于后续和TGS服务进行通信
  2. 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



可以从图中看出 发送过去的也有两部分

  1. TGT: 用户的TGT
  2. 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

会向服务器发送两条消息

  1. Service Ticket:用服务器Hash加密的票据
  2. 新的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篇的更多相关文章

  1. Windows协议 LDAP篇 - 组&OU

    LDAP搜索 LDAP查找 位操作 以userAccountControl为例,CN=User-Account-Control,CN=Schema,CN=Configuration,DC=muxue, ...

  2. Windows协议 LDAP篇 - Actite Directory

    LDAP简介 先说下ldap,轻量目录访问协议.LDAP就是设计用来访问目录数据库的一个协议.也就是为了能访问目录数据库,ldap是其中一种协议 LDAP的基本模型 目录树:在一个目录服务系统中,整个 ...

  3. Windows协议 NTLM篇

    NTLM 基础 介绍 LM Hash & NTLM Hash Windows本身是不会存储明文密码的,只保存密码的hash 其中本机用户的密码hash是放在本地的SAM文件里面,域内用户的密码 ...

  4. Windows协议 LDAP篇 - 域权限

    windows 访问控制模型 也就是大名鼎鼎的ACM,access control mode 由两部分组成的. 访问令牌(access tokens) 其中包含有关登录用户的信息(User SID,G ...

  5. Windows协议 LDAP篇 - 域用户和计算机用户

    域用户 查询域用户 通过SAMR协议查询(net user就是通过这种协议查询的),samr也不是一种专门的协议,是一个RPC接口 在impacket里有个脚本samrdump.py,就是专门调用这个 ...

  6. [转帖]Windows安全认证是如何进行的?[Kerberos篇]

    Windows安全认证是如何进行的?[Kerberos篇] NTLM 的简单看了一下 基本上了解了.. 这个KERBEROS 的看不太懂 感觉说的我也有点迷糊.. 虽然是对称加密的 但是不清不楚的.. ...

  7. Windows 7 封装篇(一)【母盘定制】[手动制作]定制合适的系统母盘

    Windows 7 封装篇(一)[母盘定制][手动制作]定制合适的系统母盘 http://www.win10u.com/article/html/10.html Windows 7 封装篇(一)[母盘 ...

  8. Android Studio2.0 教程从入门到精通Windows版 - 入门篇

    http://www.open-open.com/lib/view/open1468121363300.html 本文转自:深度开源(open-open.com)原文标题:Android Studio ...

  9. Windows安全认证是如何进行的?[Kerberos篇]

    最近一段时间都在折腾安全(Security)方面的东西,比如Windows认证.非对称加密.数字证书.数字签名.TLS/SSL.WS-Security等.如果时间允许,我很乐意写一系列的文章与广大网友 ...

随机推荐

  1. 22.17、heartbeat和drbd整合

    1.要确保master-db和slave-db的drbd服务和heartbeat服务都已经停止了: 2.heartbeate设置: 修改master-db和slave-db的'/etc/ha.d/ha ...

  2. Algorithm:MD5算法原理说明

    MD5算法实现: 输入:不定长度信息(要加密的信息) 输出:固定长度128-bits.由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值. 基本方式为:求余.取余.调整长度.与链接 ...

  3. 免费版:Xshell和Xftp下载路径

    家庭版Xshell和Xftp下载地址: 下载地址:https://www.netsarang.com/zh/free-for-home-school/

  4. MyBatis:Mybatis逆向工程问题记录

    近日我在搭建springboot+mybatis+mysql 的整合项目(自己测试玩)的时候用到了mybatis的逆向工程,来这里记录一下我的菜鸟编码过程 首先我在maven中引入这些依赖 <d ...

  5. [心得体会]Spring注解基本使用方法

    涨知识系列 Environment environment = context.getEnvironment(); 在Spring中所有被加载到spring中的配置文件都会出现在这个环境变量中, 其中 ...

  6. SpringMVC(3)URL请求到Action的映射规则

    在SpringMVC(2)经典的HelloWorld实现我们展示了一个简单的get请求,并返回了一个简单的helloworld页面.本篇我们来学习如何来配置一个action的url映射规则. 在Spr ...

  7. take for granted

    解释含义1 Take for granted是一句地道的英语口语,意思是to expect someone to always be there and do things for you even ...

  8. JS中 var,let与const的区别

    1.在ES6(ES2015)出现之前,JavaScript中声明变量就只有通过 var 关键字,函数声明是通过 function 关键字,而在ES6之后,声明的方式有 var . let . cons ...

  9. [zebra源码]分片语句ShardPreparedStatement执行过程

    主要过程包括: 分库分表的路由定位 sql语句的 ast 抽象语法树的解析 通过自定义 SQLASTVisitor (MySQLSelectASTVisitor) 遍历sql ast,解析出逻辑表名 ...

  10. 第一个用户进程 - Android 的 Init 进程

    本文尝试对着 <深入理解 Android 5.0 系统>来对 android 9.0 的启动代码进行分析,但是分析过程中发现自己缺乏操作系统方面的知识,以致于只能做一些简单分析.最近也买了 ...