认证流程

角色 功能
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. Nacos配置中心交互模型是 push 还是 pull ?你应该这么回答

    本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富- 对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服 ...

  2. 10、linux启动过程

    (1)linux启动说明: 第一步:开机自检,检查硬件,加载BIOS(帮我们找到启动盘是谁): 第二步:读取MBR(读取启动硬盘0柱面0磁道1扇区(512字节)的前446字节,找到装有操作系统的分区) ...

  3. 记一次ios下h5页面图片显示问题

    刚入职公司时做了一个移动端图片预览的组件,之前也有业务组用过,没发现什么问题,但是这次有两个很诡异的问题. 一个是老数据的图不显示,另一个是图片点击预览只显示一部分加载不全.之所以诡异是所有设备都没问 ...

  4. POJ 1220 大数字的进制转换,偷下懒,用java

    题意为进制转换,Java的大数类就像是作弊 import java.math.BigInteger; import java.util.Scanner; public class Main { pub ...

  5. centos7安装chrome+chromeDriver+Xvfb

    安装chrome 创建yum源 # cd /etc/yum.repos.d/ # vim google-chrome.repo 创建yum源信息 [google-chrome] name=google ...

  6. WebSocket实现实时聊天系统

    WebSocket实现实时聊天系统 等闲变却故人心,却道故人心易变. 简介:前几天看了WebSocket,今天体验下它的实时聊天. 一.项目介绍 WebSocket 实时聊天系统自己一个一码的搞出来还 ...

  7. C语言:整数保存 原码 反码 补码

    #include <stdio.h> /* 本题结果为:-4 short类型占据2字节 ;赋值后实际占据了3个字节,所以有溢出警告提示,结果只保留0xfffc 保存二进制:1111 111 ...

  8. 使用BeautifulSoup自动爬取微信公众号图片

    爬取微信分享的图片,根据不同的页面自行修改,使用BeautifulSoup爬取,自行格局HTML修改要爬取图片的位置 import re import time import requests imp ...

  9. Scala学习——隐式转换

    scala隐式转换 一.需求:为一个类添加一个新的方法 java:动态代理 scala:隐式转换 隐式转换例子: 1.man to superMan package top.ruandb.scala. ...

  10. Appium - adb monkey事件(二)

    操作事件简介 Monkey所执行的随机事件流中包含11大事件,分别是触摸事件.手势事件.二指缩放事件.轨迹事件.屏幕旋转事件.基本导航事件.主要导航事件.系统按键事件.启动Activity事件.键盘事 ...