搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
寸_铁
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
特洛伊木马源攻击_不支持unicode显示定向格式化字符
2
jupyter notebook读取/导出excel文件_jupyter 怎么打开excel
3
Ubuntu 22.04编译安装ROS noetic_ubuntu 22.04安装ros-noetic
4
spring cloud alibaba中台架构源码二次开发+系统集成、集中式应用权限管理_数据中台源码 下载
5
测试开发的要求_测试开发要求怎么写
6
代码随想录leetcode200题之动态规划算法
7
第四讲 Linux系统简介_linux最初版本创始人中文名
8
贵阳华为云技术精髓应用创新论坛,加速开发者云端创新发展_蒋捷 dtse
9
LiveBOS UploadFile.do 任意文件上传漏洞复现(XVE-2023-21708)_livebos漏洞
10
【震撼来袭】Flux横空出世,吊打Midjourney,重塑AI艺术创作新格局!(附保姆级部署教程)_flux1.0
当前位置:
article
> 正文
详细讲解kerberos认证全过程、黄金、白银票据_kerberos认证过程
作者:寸_铁 | 2024-08-19 22:49:27
赞
踩
kerberos认证过程
Kerberos认证在域渗透的作用不容小觑,刚开始学的时候觉得挺复杂、挺难记的,仔细学了一段时间,自己梳理了整个流程之后对Kerberos认证具有更多的、更深入的认识,以下是我对与Kerberos认证的理解,内容包含了我在学习过程中的一些困惑,希望有助于各位对于Kerberos认证流程、黄金票据、白银票据的学习与记忆。
参与Kerberos认证的有三个角色:客户端(client简写c)、服务端(server简写s)、DC(域控),而DC中有一个叫密钥分发中心的组件即KDC,它负责处理用户身份验证和授权请求。KDC包含两个主要子组件:认证服务(AS)和票证授予服务(TGS)。以下是我画的Kerberos认证整个流程图,不好看大家见谅!!
第一步:客户端向DC的AS请求
此时客户端本机的Kerberos服务会向KDC的AS认证服务发送AS-REQ认证请求,请求内容包括了客户端的个人信息即principal如用户名,以及说明要请求什么服务、目标服务的主机名等信息,也告诉AS自己将与TGS通信。除此之外为了防止别人伪造这个客户端的身份,还要求发送一个认证因子authenticator,这个认证因子需要使用客户端的hash来加密一个时间戳。
为什么需要用自己的hash加密时间戳?
因为如果不用客户端的hash进行加密,那么攻击者可以伪造任意客户端的身份进行Kerberos认证,但是加上客户端hash进行加密,DC再进行解密,这使得攻击者的攻击加大难度,只有获取了用户的hash才能伪造客户端的身份。另外DC是域控,肯定是有客户端的hash的。
时间戳的作用是什么?
是为了一定程度上防止攻击者进行重放攻击。请求接收方会对这个时间戳做一个验证,在请求发送到请求接收的一定时间内,假设为5分钟,在这5分钟内接收方收到了请求,那么就相信其为安全的请求,反之如果超过了5分钟则怀疑受到了重放攻击。
第二步:DC的AS向客户端的请求做出响应
此时AS收到了客户端的请求之后,由于AS是在DC上面的,DC是有客户端的hash的,此时会查询AD目录找到该客户端的hash,然后对时间戳进行解密,如果解密失败说明用于加密的hash是错误的,同时验证是否为受到了重放攻击。
在AS验证通过之后,AS会生成一个login session key,并且使用用户的hash加密这个login session key,然后AS还会生成一个TGT,同使用过hash加密后的login session key以及一些其他相关信息打包发送给客户端。
什么是TGT?
是Kerberos认证中的一种加密票据,是由Kerberos认证服务器(AS)生成并加密的,该TGT包含了用户的身份信息、有效期限、密钥(login session key)和其他相关信息,不过这些信息是使用的krbtgt的hash进行加密的,不在是用户的hash了。
什么是krbtgt?
krbtgt是Kerberos中的一个特殊账户,用于存储和管理Ticket Granting Ticket(TGT)。在Kerberos认证系统中,krbtgt账户是一个系统级别的账户,用于生成TGT和使用自己的hash(krbtgt hash)加密TGT,并提供给用户进行身份验证和获取服务票据。那么如果攻击者获取到了这个hash(krbtgt hash),那么就可以任意的伪造TGT了,也就是
黄金票据
,拥有了黄金票据就可以跳过AS验证了。
为什么TGT要用krbtgt的hash加密?
因为在攻击者未获取krbtgt的hash时,使用krbtgt的哈希加密可以防止TGT在传输过程中被篡改或伪造。如果使用明文,还可能被中间人窃取数据包,获取一些敏感信息。
第三步:客户端向DC的TGS请求
此时客户端收到了DC的的响应包之后会将收到的TGT存储在本地,并使用自己的hash将对应使用自己的hash加密的信息进行解密,获取到AS生成的login session key,然后客户端使用login session key去加密时间戳然后与收到的TGT、需要的服务名字、自己的相关信息一同打包发送到DC的TGS。
为什么客户端收到TGT之后还要发送回去?
客户端发送TGT是发送给TGS的,在AS发送给客户端TGT之后,客户端需要将其发给TGS之后,TGS才会给客户端授予服务票据。
为什么客户端收到TGT之后要存储起来?
因为TGT是具有时效性的,不是永久的,也不是一次性的。只要在TGT过期之前,可以直接请求TGS申请服务票据,而不用在每次访问服务的时候都向AS请求TGT,减少了与AS的通信,提高了系统的性能和效率。
第四步:DC的TGS向客户端的请求做出响应
当TGS接收到请求之后,会检查自身是否存在客户端请求的服务,如果存在就会拿ktbtgt hash解密TGT(由于TGS是在DC上的,所有具有krbtgt的hash),解密到的信息中包含了login session key,别忘了客户端发过来的时间戳就是利用login session key加密的,此时就可以用其解密获取到时间戳了,然后验证时间戳。
然后KDC会生成一个新的名叫service session key,用于客户端和服务端直接的安全通信,并且为客户端生成ST服务票据,该票据是由客户端信息+service session key打包后用后用服务端的hash加密的(KDC在DC上,故DC拥有服务端的hash)。除此之外会将service session key用之前是login session key加密同ST一同打包发送给客户端。
为什么service session key要用login session key加密?
因为是service session key是要发给客户端的,客户端拥有login session key,可以解密后获取到service session key,也保证了service session key的安全性。
为什么要生成一个service session key?
这个是为了用于接下来的客户端与服务端的安全通信,作用类似于login session key。
为什么要用服务端的hash加密service session key?
因为为了保证service session key不被窃取不可明文传输且后期客户端和服务端要使用service session key进行安全通信,而服务端没有login session key,DC就使用服务端的hash进行加密,同时还可以防止非目标服务器窃取这个service session key,因为只有知道服务端的hash才能获取service session key,进一步保证了service session key的安全。如果攻击者窃取了服务端的hash那么就可以任意伪造ST也就是
白银票据
了,就可以不经过KDC了。
第五步:客户端向服务端请求
此时客户端接收到了TGS的响应,然后利用login session key解密获取到service session key,然后用于与服务端通信,同时将ST存储起来,然后客户端用service session key加密客户端信息和时间戳同ST(服务端hash加密的相关信息+service session key)打包一起发送给服务端验证。
第六步:服务端向DC的KDC的请求
客户端收到服务端发送过来的信息之后,用自己的hash即服务端hash解密ST,而ST中包括有service session key,那么再用service session key去解密使用service session key加密的信息包括有客户端相关信息和时间戳,再去验证这个时间戳,判断是否安全,判断是否为真实身份。
除此之外服务端还要向DC请求,使用PAC(Privilege Attribute Certificate)将客户端的属性信息发送给KDC进行验证客户端是否安全是否具有获取该服务的资格。
什么是PAC?
PAC是一个包含了客户端属性信息的数据结构,它包括了客户端的授权信息、组成员资格和其他相关属性。服务端在收到客户端的票据后,会从票据中提取出PAC,并将其发送给KDC进行验证。
验证过程是什么?
1.服务端从客户端的票据中提取出PAC。
2.服务端将PAC发送给KDC,请求对客户端的属性信息进行验证。
3.KDC收到PAC后,会验证其中的属性信息是否与KDC中存储的客户端属性信息一致。
4.如果属性信息一致,KDC将返回一个验证成功的响应给服务端。
5.服务端根据KDC的响应,判断客户端的属性信息是否有效,并根据需要进行授权或其他操作。
第七步:DC的KDC向服务端响应
此时KDC将会对服务端发来的PAC进行一个验证,验证流程如下
1.KDC首先会检查PAC中的票据(Ticket)是否有效,即检查票据的签名是否正确、是否过期等。这是基本的票据验证过程,确保票据本身是合法的。
2.KDC会从PAC中提取出客户端的属性信息,如授权信息、组成员资格等。
3.KDC会与自身存储的客户端属性信息进行比对,以验证PAC中的属性信息是否与KDC中存储的信息一致。这样可以确保客户端的属性信息没有被篡改或伪造。
4.如果PAC中的属性信息与KDC中存储的信息一致,KDC将认为PAC是有效的,并返回一个验证成功的响应给服务端。反之如果PAC中的属性信息与KDC中存储的信息不一致,KDC将认为PAC是无效的,并返回一个验证失败的响应给服务端。
第八步:服务端向客户端响应
此时服务端会生成一个票据,该票据包括客户端身份信息,以及服务端的身份信息,并使用之前获得的service session key去加密该票据信息并发送给客户端,然后客户端就可以正常获取到服务端的服务了。
为什么要使用service session key去加密该票据信息?
因为之前KDS已经给客户端发送过了service session key,而service session key就是用来二者安全通信的,故客户端可以使用service session key去解密获取到票据信息。service session key加密同时也保障了票据信息不被窃取和修改伪造。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/寸_铁/article/detail/1004024
推荐阅读
article
Codeforces
Round
965 (
Div
.
2
) 8.10...
看题得认真,不能迷糊,不然太费时间。 _codeforces round 965 (div.
2
)codeforces ...
赞
踩
article
Diffusion
Policy
开源项目教程...
Diffusion
Policy
开源项目教程 diffusion_policy[RSS 2023]
Diffusion
...
赞
踩
article
谈谈在
不同
公司
中的
SAP
职位
...
SAP
团队的管理
职位
,主要是管理
SAP
团队的日常事务,协调各种项目和实施的进度和资源等,如果
公司
内没有业务合作伙伴
职位
,...
赞
踩
article
>
<>em
>
c
>
<>/em
>
odefor
>
<>em
>
c
>
<>/em
>
e 387 (ab
>
<>em
>
c
>
<>/em
>
)水题_#
>
<>em
>
in
>
<>em
>
c
>
<>/em
>
lude
>
<>/em
>
>
<>
>
<>em
>
>
<>em
>
c
>
<>/em
>
stdio
>
<>/em
>
>
#
>
<>em
>
in
>
<>em
>
c
>
<>/em
>
lude
>
<>/em
>
>
<>...
A#
>
<>em
>
in
>
<>em
>
c
>
<>/em
>
lude
>
<>/em
>
#
>
<>em
>
in
>
<>em
>
c
>
<>/em
>
lude
>
<>/em
>
#
>
<>em
>
in
>
<>em
>
c
>
<>/em
>
lude
>
<>/em
>
using namespa
>
<>em
>
c
>
<>/em
>
e std;int main(){ ...
赞
踩
article
SQL
Server
端口
设置全攻略:让你的数据库更
安全
_
sql
server2022
端口
不更改
安全
吗...
修改
SQL
Server
的
端口
虽然不是一个复杂的操作,但却是提升
安全
性和避免
端口
冲突的有效手段。通过简单的几步设置,你就...
赞
踩
article
不用再找了
,
吐血整理
ChatGPT
4o
/
4o
mini
新手
使用手册
~_
gpt
-
4o
mini
需要...
读文件功能(pdf、word、ppt、Markdown、csv、txt等)
,
支持读取url网页内容。现在人工智能很强大
,
...
赞
踩
article
香港理工
:
你
精心设计
的
prompt
,
很
容易
被
用户
套出来!...
本文
的
内容比较丰富
,
从发现提示泄露问题到成因再到防御策略研究
,
娓娓道来
,
非常详尽。总结如下
:
本文探讨了LLMs在定制化使...
赞
踩
article
初步认识
Linux
系统
...
本博客会设计到一些历史方面关于计算机和
Linux
系统
,文字部分会比较多。然后会简单的涉及到
Linux
的简单操作,只会比较...
赞
踩
article
Cloudera
Manager5.1
2
、Java1.8、
Centos7
集群部署(
2
)------ ...
本文档详细介绍了在CentOS7上
安装
配置MySQL5.1
2
的过程,包括
安装
MySQL源、使用yum
安装
MySQL、启动...
赞
踩
article
用
python
做自动化
测试
--实现
高性能
测试
工具
(1)--序_
diameter
协议
测试
工具
...
做过几年开发或者
测试
开发的人员,时常会觉得很迷茫,新功能的开发或者老功能的维护,基本是在堆代码了, 做过几年
测试
的朋友也...
赞
踩
article
Eureka
入门指南:
微
服务
注册
与
发现
的
基础概念...
随着
微
服务
架构
的
普及,
微
服务
之间
的
高效通信和管理成为了开发和运维
的
核心挑战之一。为了解决
服务
发现
和管理问题,Netfli...
赞
踩
article
【源码+论文】
基于
SpringBoot
的
网上
订餐
系统
...
系统
测试主要是判断
系统
是否可以正常运行,功能模块是否可以实现操作。程序代码中是否有错误出现。测试程序是开发过程中
的
一个主...
赞
踩
article
建网站
域名
哪里申请?...
一个好的
域名
易于记忆,有助于提升品牌形象,增强用户对网站的信任感,同时也是搜索引擎优化(SEO)的关键因素。确定
域名
:首...
赞
踩
article
【
PYTHON
】模块
函数
之
pywinauto
PC 端的
自动化
(笔记)_
pywinauto
控件
速...
pywinauto
PC 端的
自动化
(笔记)_
pywinauto
控件
速度 慢
timeout
pywinauto
控件
...
赞
踩
article
Android
开机
流程
介绍...
本文章涉猎
Android
多个层级,旨在梳理整体
流程
,对
Android
设备的启动有一个感性的认识,能够达到一定逻辑自洽。A...
赞
踩
article
js
+
html
+
jquery
实现与
websocket
通信 多文件上传并且带
进度条
_
jquery
w...
一:成品演示:二:话不多说,直接上代码。html><
html
>
WebSo...
赞
踩
article
快速上手
,
学会芯驰 X9H PTG4.3 的
DDR
展频
调试
_
dumpclk
查运行
频率
...
展频
调试
是一种用于
调试
电子设备中
展频
功能的过程。
展频
是一种用于减少电磁干扰(EMI)的技术
,
通过在信号中引入微小的
频率
变...
赞
踩
article
时间
序列
模式(
ARIMA
)---
Python
实现_
时序
模式
python
...
时间
序列
分析的主要目的是根据已有的历史数据对未来进行预测。如餐饮销售预测可以看做是基于
时间
序列
的短期数据预测, 预测的对...
赞
踩
article
java
让
线程
暂停
,
如何
在
Java
中停止,
暂停
,取消
线程
...
i'm developing an app in
java
that launches some threads tha...
赞
踩
article
C++:
平衡
二叉
搜索
树之红
黑树
...
/节点的颜色定义RED,BLACK//节点结构体//节点的数据//节点的左孩子//节点的右孩子//节点的双亲节点//节点...
赞
踩
相关标签
codeforces
Div 2
制造
职场
职场和发展
kylin
sqlserver
人工智能
chatgpt
gpt
AI编程
AI写作
AI作画
ai
prompt
linux
运维
服务器
mysql
cloudera
hive
contos
python
测试工具