Kerberos认证流程简述
摸鱼了很长一段时间,被大佬按在地上摩擦,一时间精神恍惚想不起来写点啥,正好回来碰巧给别人讲kerberos协议认证流程,结果讲来讲去把自己讲晕了,就非常尴尬
于是有了这篇文章(友情提示:无事莫装X,装X遭人X),争取用我简单浅显而贫乏的词汇量,描述一下相关流程
0x01 认知
(1)
这是一个关于kerberos的经典图示,最简化地展示了kerberos的验证流程
kerberos是一种网络身份认证协议,设计目标是为了通过秘钥系统为C/S应用程序提供一种可靠的认证协议。它是双向验证的,即在保证客户端访问的服务端是安全可靠的情况下,也保证服务端回复的客户端也是安全可靠的。
想要证明访问与被访问的双方都是信得过的,必须要有一个第三方平台。在kerberos中就是图(1)中的KDC
按照图(1)介绍几个专有名词:
1.KDC (key distributed center ):用于票据生成管理服务,它包含AS与TGS
2.AS (authentication service):为客户端生成TGT
3.TGS(ticket granting service):为客户端生成某个服务的ticket
4.AD(account database):存储客户端白名单,只有位于白名单中的客户端才能申请TGT,就像SAM数据库一样
5.TGT(ticket granting ticket):用于获取ticket的一种票据
6.SK(session key):用户与域控的加密秘钥
7.client:想访问某个server的客户端
8.server:提供某种业务的服务
一般来说,kerberos是用于域环境中身份认证的
所以KDC一般会安装到域控之中。
从物理层面来看,AD 和 KDC都是“域控”
KDC当中有个krbtgt用户,在域控中net user会看到
krbtgt是个系统自建用户,不用于登录,发票据的时候会用到其NTML HASH
愿意继续看下去的,这里有个人认为详细一些的解释,不愿意看的请划到最后一小点
0x02 流程
逐一解释图(1)假设域内主机一个用户lcx想访问域内某服务器server中的某服务
圈1 (AS-REQ):client发送用户信息到KDC,向AS请求TGT票据
圈2(AS-REP):KDC收到请求,看看client是否在AD的白名单中,在的话,AS生成随机Session Key,并用用户的NTLM HASH对Session Key 加密得到密文A,再用krbtgt的NTLM HASH 对Session Key、客户端信息Client Info、客户端时间戳timestamp加密得到TGT,并将A 和 TGT一起返回客户端client
圈3(TGS-REQ):client收到请求,用自身的NTLM HASH 解密 密文A 得到Session Key,再用Session Key加密Client Info与timestamp 得到密文B , 把密文B 和 TGT一起发给KDC 给TGS
圈4(TGS-REP):TGS 用krbtgt的NTLM HASH 解密TGT ,得到Session Key和timestamp和Client Info。再用这个由TGT解密出来的Session Key解密密文B得到timestamp与Client Info。 两相对比是否一致。如果一致,TGS生成新的随机 Session Key,叫它Session Key2 吧,用它加密timestamp和Client Info得到密文Enc。再用服务端server的NTLM HASH对Session Key2和timestamp和Client Info加密得到ticket,返回给客户端client
圈5(AP-REQ):客户端client把ticket和Enc向服务端server发送,请求服务
圈6(AP-REP):服务端server用自己的NTLM HASH 对ticket进行解密得到Session Key2和timestamp和Client Info,再用解密出来的Session Key2解密密文Enc,得到timestamp和Client Info,进行信息校验,成功授权访问
大功告成
补充一些说明:时间戳timestamp的存在保证了密文在短时间内不可能被暴破;Client Info中存在很多信息包括客户端信息
由于krbtgt只存在于域控中KDC中,TGT要用krbtgt的NTLM HASH解密,即TGT只能由KDC解密
所以如果krbtgt的NTLM HASH泄露出去了,那谁拿到krbtgt的NTLM HASH,谁就充当KDC(指有奶便是娘),就可以伪造TGT,也就是权限维持里常说的黄金票据。。。。。。的原理,生成伪造黄金票据把票据一导入,体验一把生杀大权尽在手中的感觉。
另一方面ticket是服务账号用NTLM HASH加密得到的,如果这个服务账号的NTLM HASH泄露了(域控上抓的,新鲜的热乎的,计算机服务账号的NTLM HASH)谁拿到域控中计算机服务账号的NTLM HASH,谁就充当TGS(有奶便是娘*2),这就是权限维持中白银票据的原理。
0x03 比喻
https://www.zhihu.com/question/22177404
知乎用户车小胖
随便转载,请标明作者出处
Kerberos认证流程简述的更多相关文章
- Kerberos认证流程详解
Kerberos是诞生于上个世纪90年代的计算机认证协议,被广泛应用于各大操作系统和Hadoop生态系统中.了解Kerberos认证的流程将有助于解决Hadoop集群中的安全配置过程中的问题.为此,本 ...
- Kerberos认证原理及基于Kerberos认证的NFS文件共享
目录 Kerberos认证原理 简介 client访问server过程 一.Authentication Service Exchange (AS Exchange) 二.Ticket Grantin ...
- kerberos认证协议分析
Kerberos认证协议分析 Kerberos认证协议流程 如上图: * 第一步:client和认证服务器(AS)通信完成认证过程,如果认证成功AS返回给client一个TGT(用来向TGS获取tic ...
- 图解Kerberos认证工作原理
本文是我在看了这篇英文说明之后的总结 https://technet.microsoft.com/zh-cn/library/cc961976.aspx 是总结,不是翻译,所以是我看后按自己的理解写的 ...
- kerberos认证原理---讲的非常细致,易懂
前几天在给人解释Windows是如何通过Kerberos进行Authentication的时候,讲了半天也别把那位老兄讲明白,还差点把自己给绕进去.后来想想原因有以下两点:对于一个没有完全不了解Ker ...
- 域渗透基础之Kerberos认证协议
本来昨晚就该总结整理,又拖到今天早上..6点起来赶可还行 0x01 Kerberos前言 Kerberos 是一种由 MIT(麻省理工大学)提出的一种网络身份验证协议.它旨在通过使用密钥加密技术为客 ...
- python confluent kafka客户端配置kerberos认证
kafka的认证方式一般有如下3种: 1. SASL/GSSAPI 从版本0.9.0.0开始支持 2. SASL/PLAIN 从版本0.10.0.0开始支持 3. SASL/SCRAM-SHA- ...
- CDH构建大数据平台-配置集群的Kerberos认证安全
CDH构建大数据平台-配置集群的Kerberos认证安全 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 当平台用户使用量少的时候我们可能不会在一集群安全功能的缺失,因为用户少,团 ...
- kerberos认证协议爱情故事
0x01.kerberos简介 kerberos是一种域内认证协议,Kerberos的标志是三头狗,狗头分别代表以下角色: Client Server KDC(Key Distribution Cen ...
随机推荐
- QT从入门到入土(二)——对象模型(对象树)和窗口坐标体系
摘要 我们使用的标准 C++,其设计的对象模型虽然已经提供了非常高效的 RTTI 支持,但是在某些方面还是不够灵活.比如在 GUI 编程方面,既需要高效的运行效率也需要强大的灵活性,诸如删除某窗口时可 ...
- python使用笔记13--清理日志小练习
1 ''' 2 写一个删除日志的程序,删除5天前或为空的日志,不包括当天的 3 1.删除5天前的日志文件 4 2.删除为空的日志文件 5 ''' 6 import os 7 import time 8 ...
- C++ 11 智能指针(shared_ptr)类成员函数详解
C++ 11 模板库的 <memory> 头文件中定义的智能指针,即 shared_ptr 模板类,用来管理指针的存储,提供有限的内存回收函数,可同时与其他对象共享该管理功能. share ...
- C++11 左值引用和右值引用与引用折叠和完美转发
1.左值与右值 最感性的认识. 当然,左值也是可以在右边的. 左值是可以被修改的,右值不能. 当然取地址也是. 生存周期一般左值会比右值的长,一般右值都计算时产生的无名临时对象,存在时间比较短. 下面 ...
- Spring RestTemplate 之exchange方法
●exchange方法提供统一的方法模板进行四种请求:POST,PUT,DELETE,GET (1)POST请求 String reqJsonStr = "{\"code\&quo ...
- Python + unittest知识点回顾
postman 安装Newman 先安装node.js,把npm添加到环境变量中. npm install newman --registry=https://registry.npm.taobao. ...
- JS文件延迟和异步加载:defer和async属性
-般情况下,在文档的 <head> 标签中包含 JavaScript 脚本,或者导入的 JavaScript 文件.这意味着必须等到全部 JavaScript 代码都被加载.解析和执行完以 ...
- 一定要收藏的5个优秀的SpringCloud开源项目
上一期为大家推荐了几个前端模板,没看过的点下面 一定要收藏的5个后台管理系统的前端框架 今天再为大家推荐几个优秀的SpringCloud开源脚手架项目,开箱即用,不管是学习还是开发新项目,都非常不错. ...
- SpringBoot下Schdule的配置与使用
我们在平常项目开发中,经常会用到周期性定时任务,这个时候使用定时任务就能很方便的实现.在SpringBoot中用得最多的就是Schedule. 一.SpringBoot集成Schedule 1.依赖配 ...
- 用好Git stash,助你事半功倍
git stash: 用法:git stash list [<选项>] 或:git stash show [<选项>] [<stash>] 或:git stash ...