介绍:

Kerberos 是一种由 MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。

在 Kerberos 认证中,最主要的问题是如何证明「你是你」的问题,如当一个 Client 去访问 Server 服务器上的某服务时,Server 如何判断 Client 是否有权限来访问自己主机上的服务,同时保证在这个过程中的通讯内容即使被拦截或篡改也不影响通讯的安全性,这正是 Kerberos 解决的问题。在域渗透过程中 Kerberos 协议的攻防也是很重要的存在。

Kerberos 主要是用在域环境下的身份认证协议


Kerberos 协议框架:

在 Kerberos 协议中主要是有三个角色的存在:

1. 访问服务的 Client;

2. 提供服务的 Server;

3.KDC(Key Distribution Center)密钥分发中心

注意:

1、KDC 服务默认会安装在一个域的域控中
2、从物理层面看,AD与KDC均为域控制器(Domain Controller)
3、AD其实是一个类似于本机SAM的一个数据库,全称叫account database,存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT
4、KDC 服务框架中包含一个 KRBTGT 账户,它是在创建域时系统自动创建的一个账号,你可以暂时理解为他就是一个无法登陆的账号,在发放票据时会使用到它的密码 HASH 值。


上文提到的TGT,KDC,client,server又是什么东西呢,下文来介绍下:

Kerberos粗略的验证流程:

先来举个例子:如果把 Kerberos 中的票据类比为一张火车票,那么 Client 端就是乘客,Server 端就是火车,而 KDC 就是就是车站的认证系统。如果Client端的票据是合法的(由你本人身份证购买并由你本人持有)同时有访问 Server 端服务的权限(车票对应车次正确)那么你才能上车。当然和火车票不一样的是 Kerberos 中有存在两张票,而火车票从头到尾只有一张。

在KDC中又分为两个部分:Authentication ServiceTicket Granting Service

Authentication Service:AS 的作用就是验证 Client 端的身份(确定你是身份证上的本人),验证通过就会给一张 TGT(Ticket Granting Ticket)票给 Client。

Ticket Granting Service:TGS 的作用是通过 AS 发送给 Client 的票(TGT)换取访问 Server 端的票(上车的票 ST)。ST(ServiceTicket)也被称之为 TGS Ticket,为了和 TGS 区分,在这里就用 ST 来说明,所以TGS Ticket和ST的意思是一样的。

这就说明了为什么在Kerberos中存有两种票,其实就是更加细分了其中的验证,简单的描述就是首先你拿身份证验证头像是不是一样,是的话就返回一张TGT,然后在通过验证车票获得上车的资格,这里就有对TGT的验证,通过的话再返回一张ST/TGS Ticket的票,如果都可以那么就验证成功了。


Kerberos 详解认证流程:

当 Client 想要访问 Server 上的某个服务时,需要先向 AS 证明自己的身份,然后通过 AS 发放的 TGT 向 Server 发起认证请求,这个过程分为三块:

The Authentication Service Exchange:Client 与 AS 的交互,

The Ticket-Granting Service (TGS) Exchange:Client 与 TGS 的交互,

The Client/Server Authentication Exchange:Client 与 Server 的交互。

(1)TheAuthentication Service Exchange

KRB_AS_REQ(请求):

Client->AS:Client 先向 KDC 的 AS 发送 Authenticator1(内容为Client hash加密的时间戳)

KRB_AS_REP(应答):

AS-> Client:AS根据用户名在AD中寻找是否在白名单中,然后根据用户名提取到对应的NTLM Hash,然后会生成一个随机数session key,然后返回给Client由Client的ntlm hash加密的session key-as作为AS数据,再返回TGT(使用KDC中krbtgt的NTLM Hash加密session key和客户端的信息,客户端的信息里面包含了时间戳等信息)

AS验证的简述:在 KDC(AD) 中存储了域中所有用户的密码 HASH,当 AS 接收到 Client 的请求之后会根据 KDC 中存储的密码来解密,解密成功并且验证信息。
验证成功后返回给 Client两个东西,一个是由 Client 密码 HASH 加密的 session key-as 和 TGT(由 KRBTGT HASH 加密的 session key 和 TimeStamp 等信息)。

(2)TheTicket-Granting Service (TGS) Exchange

KRB_TGS_REQ(请求):

Client 接收到了加密后的session key-as 和 TGT 之后,先用自身密码 HASH解密得到session key ,TGT 是由 KDC 中KRBTGT的HASH加密,所以Client 无法解密。这时 Client 再用session key加密的TimeStamp,然后再和TGT 一起发送给 KDC 中的 TGS(TicketGranting Server)票据授权服务器换取能够访问 Server 的票据。

KRB_TGS_REP(应答):

TGS 收到 Client 发送过来的 TGT 和 Session key 加密的 TimeStamp 之后,首先会检查自身是否存在 Client 所请求的服务。如果服务存在,则用 KRBTGT的HASH解密 TGT

一般情况下 TGS 会检查 TGT 中的时间戳查看 TGT 是否过期,且原始地址是否和 TGT 中保存的地址相同

验证成功之后将返回Client两个东西,一个是用 session key 加密的 session key-tgs,然后另一个是 Client要访问的Server的密码 HASH 加密的 session key-tgs(前面和session key加密生成的)生成就是ST(TGS)

(3)TheClient/Server Authentication Exchange

KRB_AP_REQ(请求):

Client -> Server 发送 Authenticator3(session key-tgs 加密 TimeStamp) 和票据 ST(Server 密码 HASH 加密 session key-tgs)

Client 收到 session key 加密生成的 session key-tgs 和 Server 密码 HASH 加密 session key-tgs生成的TGS 之后,用 session key 解密得到 session key-tgs,然后把 sessionkey-tgs 加密的 TimeStamp 和 ST(也就是TGS)一起发送给 Server。

KRB_AP_REP(应答):

Server-> Client

server 通过自己的密码解密 ST,得到 sessionkey-tgs, 再用 sessionkey-tgs 解密 Authenticator3 得到 TimeStamp,验证正确返回验证成功。

上文文字描述的也就是最开头的图片,这里再放上去,是不是会发现这张图理解了???

参考文章:https://tools.ietf.org/html/rfc4120.html
参考文章:https://www.freebuf.com/articles/system/196434.html

Kerberos身份验证流程相关推荐

  1. kerberos验证_SQL Server中的服务主体名称和Kerberos身份验证概述

    kerberos验证 This article gives an overview of Service Principal Name (SPN) for using the Kerberos aut ...

  2. 为CDH 5.7集群添加Kerberos身份验证及Sentry权限控制

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 4. 为CDH 5集群添加Kerberos身份验证 4.1 安装sentry 1.点击"操作",&qu ...

  3. 活动目录 kerberos 身份验证的过程 组策略

    活动目录 在Windows系统平台下进行集中管理,方便网络资源的检索,使企业可以轻松地管理,通过活动目录组件(Active Directory,简称AD)来实现目录服务.它将网络中的各种资源组合起来, ...

  4. 服务器管理器添加windows2016提示“ kerberos 身份验证错误 ”

    服务器版本为windows2016数据中心版 客户端为win10 服务管理器添加服务器时提示" kerberos 身份验证错误 " 可以通过在服务器管理器上右键 远程桌面连接 远程 ...

  5. 记一个与第三方企业对接的身份验证流程

    最近要和第三方企业进行数据对接,就研究了一下身份验证(数据加解密)的事情:记录一下,最后的验证过程: 一.首先是我包装数据发送至第三方企业. 1.采用RSA算法生成非对称加密公私钥,双方交换公钥: 2 ...

  6. hive kerberos java_Kerberos身份验证错误 - Sqoop通过Hive从SQL导入HDFS

    我给出了以下Sqoop命令: sqoop import \ --connect "jdbc:sqlserver://ServerName:1433;databaseName=TESTDB;i ...

  7. 第13章 管理身份和身份验证

    13.1 控制对资产的访问 资产包括:信息,系统.设备.设施和人员. •信息 组织的信息包括其所有数据. 数据可存储在服务器.计算机和较小设备上的简单文件中,还可存储在服务器场中的大型数据库中. 访问 ...

  8. 两台服务器身份验证,详解三种不同的身份验证协议

    本文最初发布于devever.net网站,经原作者授权由InfoQ中文站翻译并分享. 现在,身份验证协议的数量快赶上应用程序协议,结果,这个领域很容易让人困惑. 最容易把人搞糊涂的是,很少有人注意到这 ...

  9. SharePoint 2010 中的BCS身份验证模式

    BCS(Business Connectivity Services)是SharePoint 2010中用于替换原先Microsoft Office SharePoint Server 2007企业版 ...

最新文章

  1. 【BZOJ】1726 [Usaco2006 Nov]Roadblocks第二短路
  2. Linux KVM虚拟网络的桥接
  3. Transformer性能被高估?DeepMind动态评估模型的时间泛化能力
  4. Scala入门到精通——第四节 Set、Map、Tuple、队列操作实战
  5. DotNet进阶系列
  6. VB案例:简易记事本
  7. HTML5的音频播放和视频播放
  8. MVP模式——Okhttp实现下载图片并带有进度 【Android Demo】
  9. libmodbus使用
  10. 如何在kylo中添加数据源
  11. Javascript 面向对象编程(一):封装
  12. seo关键词挖掘与筛选技巧
  13. 男程序员写代码的样子 VS 女程序员写代码的样子
  14. 用python制作文字特效
  15. 软件工程师不可不知的10个概念 收藏
  16. python 读写json文件
  17. 517我要吃:20大城市的20道特色面食与特色美食小吃
  18. 关于ubuntu下的bt下载工具
  19. 木马工作原理——病毒木马 002
  20. Java等概率生成1到n之间的随机数

热门文章

  1. 抖音平台多产物代码隔离技术的实践与探索
  2. Win2008 - R2 下安装 MsSqlServer2008
  3. 查看笔记本SN序列号
  4. Android 连接Mysql数据库步骤(新手步骤)
  5. 微信小程序 之 初体验(24点游戏)
  6. 2021年度十大开源SLAM算法
  7. 制作基于springboot的简易学生管理系统(详细)
  8. 有关感知器的一个小故事
  9. 基于java jsp的科研项目管理系统
  10. 使用filemanager-webpack-plugin将前端项目打包成zip压缩包