域渗透之初识Kerberos认证过程
Kerberos 是一种由麻省理工学院提出的一种网络身份验证协议,它通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。
Kerberos协议中的角色
在Kerberos协议中主要是有三个角色:
访问服务的客户端 Client
提供服务的服务端 Server
密钥分发中心KDC(Kerberos协议的核心组成)
KDC 服务会默认安装在域控中,而Client和Server分别是域内的客户和服务,在Kerberos中Client是否有权限访问Server端的服务,是由KDC发放的票据来决定的。

KDC中分成两个部分:
身份验证服务AS:验证Client的身份,验证通过之后,AS就会发放TGT票据给Client。
票据授予服务TGS:当Client获取的TGT票据后,TGS会给Clinet换取访问Server端的ST服务票据。
关键名词
DC 域控制器 Domain Controller
KDC 密钥分发中心 Key Distribution Center
AS 身份验证服务 Authentication Service
TGS 票据授予服务 Ticket Granting Service
TGT 认证票据 Ticket Granting Ticket
ST 服务票据 Service Ticket
PAC 特权属性证书 Privilege Attribute Certificate
AD 账户数据库 Account Database(存储所有Client的白名单)
krbtgt账户(KDC的服务账户)
Kerberos协议的工作流程
客户端向KDC的AS认证服务请求TGT票据
客户端通过AS认证后,KDC将会给客户端发放TGT票据
客户端带上TGT票据,向TGS认证服务请求ST服务票据
客户端通过TGS认证后,TGS将会给客户端发放ST服务票据
客户端使用ST服务票据向服务端请求服务
PAC校验:服务端拿到PAC询问KDC客户端是否有权限,KDC将客户端的权限信息返回给服务端,判断客户端是否有权限访问该服务,并把结果返回给客户端
举个例子:

下面来具体地了解Kerberos工作流程,强烈建议使用 windows_protocol 项目开发的Kerberos发包工具来模拟Kerberos认证的过程,从而加强理解。
Kerberos发包工具地址:https://github.com/daikerSec/windows_protocol/tree/master/tools
AS_REQ & AS_REP
首先是客户端与KDC中AS之间的认证,使用 AS_REQ & AS_REP 模块:
AS_REQ
AS_REQ指的是客户端向KDC发起AS认证服务请求TGT票据,请求凭据是客户端hash加密的时间戳。

这里ENC_TIMESTAMP是预认证,就是用客户端用户hash加密时间戳,发送给AS服务器。在AS服务器中有用户hash,然后使用用户hash进行解密,获得时间戳。如果能解密,并且时间戳在一定的范围内,则认证通过。

这里PA_PAC_REQUEST是启用PAC支持的扩展,PAC信息将包含在AS_REP中。这里的value对应的是include=true或者include=false(KDC根据include的值来判断返回的票据中是否携带PAC)。
AS_REP
AS_REP指的是AS预认证通过,接着AS认证服务会返回用krbtgt hash加密的TGT票据和用户hash加密的session key及其他信息。

这里ticket就是用于向TGS认证服务请求ST服务票据的认证,ticket中的这个enc-part是由krbtgt hash加密的,用户不可读取。

而在ticket下方的这个enc_part是使用用户hash加密的一个session key,用户解密后可以拿到这个session key作为下阶段的认证密钥。
TGT票据凭据里面最核心的东西就是krbtgt hash加密的ticket和用户hash加密的session key。
在AS_REP里面的ticket中的enc-part是使用krbtgt hash加密的。所以如果我们拥有krbtgt的hash,就可以给我们自己签发任意用户的TGT票据,这个票据也被称为黄金票据。
TGS_REQ & TGS_REP
当客户端获取TGT票据之后,可以去向KDC的TGS申请特定服务的访问权限,使用 TGS_REQ & TGS_REP 模块:
TGS_REQ
TGS_REQ指的是客户端带上从AS那里获得TGT票据,向TGS认证服务请求ST服务票据。

这里ar-req这部分会携带AS_REP里面获取到的TGT票据。图中可以看到ar-req中的ticket和AS_REP的ticket部分是完全一致的。TGS通过krbtgt的hash解密TGT票据,然后验证客户端的身份。
TGS_REP
TGS_REP指的是客户端通过了TGS认证服务后,TGS将会给客户端用户发放ST服务票据。TGS生成的ST服务票据其中包括ticket和一个新的session key。

这里ticket就是最终用户用于请求特定服务AP_REQ的认证(ST票据),里面的enc_part也是加密的,是使用要请求的服务的hash加密的,用户不可读取。
在ticket下方的enc-part这部分是可以解密的,密钥就是上一轮AS_REP里面返回TGT票据中的session key,解密以后的这个新session key同样用来作为下阶段的认证密钥。
在TGS_REQ里面是使用要请求的服务(host)的hash加密的。因此如果我们拥有服务的hash就可以自己制作一个ticket,既白银票据。
AP_REQ
AP_REQ指的是最后客户端用户使用ST票据去访问特定的服务。
客户端首先将ST票据中解密后的session key缓存,然后客户端将ST服务票据和session key加密的时间戳一起发送给服务端。
服务端使用自己的hash解密ST票据提取session key,然后使用session key验证加密的时间戳,确认客户端的身份并建立会话。
PAC
TGS_REP这里其实存在一个隐患:在这一步中,不论用户是否有权限访问服务,只要TGT解密无误,都将返回ST服务票据。那么任何一个用户,只要hash正确,就可以请求域内任何一个服务的票据。
为了解决上面的这个问题,微软引进了PAC(Privilege Attribute Certificate)即特权属性证书,用来验证用户权限和模拟用户操作的凭证。
引进PAC之后的kerberos流程变成:
用户向KDC发起AS_REQ,请求凭据是用户hash加密的时间戳,KDC使用用户hash进行解密,如果结果正确返回用krbtgt的hash加密的TGT票据,TGT票据里面包含PAC,PAC包含用户的sid,用户所在的组。
用户凭借TGT票据向KDC发起针对特定服务的TGS_REQ请求,KDC使用krbtgt的hash进行解密,如果结果正确,就返回用服务hash加密的ST票据。
用户拿着ST票据去请求服务,服务使用自己的hash解密TGS票据。如果解密正确,就拿着PAC去KDC那边询问用户有没有访问权限,域控解密PAC。获取用户的sid,以及所在的组,再判断用户是否有访问服务的权限。
总结
以上就是Kerberos工作流程的三个主要部分简单分析,Kerberos还有很多细节内容值得学习,包括PAC,委派等,还有在认证的过程中引发的一系列安全问题,比如常听到的黄金票据和白银票据等。持续学习!
参考文章:
https://daiker.gitbook.io/windows-protocol/kerberos
https://xz.aliyun.com/t/8187?time__1311=n4%2BxuDgDBDyGKiKPe05DK3hrDcDAo42u%2BGirD&alichlgref=https%3A%2F%2Fxxe.icu%2F
https://xxe.icu/domain-security.html#域用户名枚举
https://zhuanlan.zhihu.com/p/266491528
若有错误,欢迎指正!o( ̄▽ ̄)ブ
域渗透之初识Kerberos认证过程的更多相关文章
- 域渗透基础之Kerberos认证协议
本来昨晚就该总结整理,又拖到今天早上..6点起来赶可还行 0x01 Kerberos前言 Kerberos 是一种由 MIT(麻省理工大学)提出的一种网络身份验证协议.它旨在通过使用密钥加密技术为客 ...
- [Kerberos] Kerberos 认证过程整理
Kerberos是一种安全认证协议,意在提供 more secure authentication simplified management of password convenience of s ...
- 域渗透基础之NTLM认证协议
域渗透基础的两个认证协议ntlm和Kerberos协议是必须总结的~ 这篇简单总结下ntlm协议 晚上写下kerberos 0x01 NTLM简介 NTLM使用在Windows NT和Windows ...
- 在kerberos认证过程中Active Directory的作用
LDAP介绍 1),ladp(Lightweight Directory Access Protocol),轻量级目录访问协议,提供被称为目录服务的信息服务,特别是基于X.500(构成全球分布式的目录 ...
- Kerberos认证过程学习理解
概念: Kerberos服务器:AS认证服务器,TGS服务授权服务器 Client 客户端,代表使用应用的用户 AppServer 服务端,应用提供各种服务的服务器 Client在Kerberos注册 ...
- 域渗透 | kerberos认证及过程中产生的攻击
文章首发于公众号<Z2O安全攻防> 直接公众号文章复制过来的,排版可能有点乱, 可以去公众号看. https://mp.weixin.qq.com/s/WMGkQoMnQdyG8UmS ...
- 域渗透-凭据传递攻击(pass the hash)完全总结
总结下PtH具体形式(wmicexec.powershell.msf等) 0x01 PtH攻击原理 && 黄金白银票据 PtH攻击原理 wiki https://en.wikiped ...
- Kerberos认证浅析
1 引言 在希腊神话中Kerberos是守护地狱之门的一条凶猛的三头神犬,而我们在本文中所要介绍的Kerberos认证协议是由美国麻省理工学院(MIT)首先提出并实现的,是该校雅典娜计划的一部分.这个 ...
- 域渗透-Kerberos身份验证流程
域渗透-Kerberos身份验证流程 Kerberos协议框架 在 Kerberos 协议中主要是有三个角色的存在: 1. 访问服务的 Client: 2. 提供服务的 Server: 3.KDC(K ...
- 配置两个Hadoop集群Kerberos认证跨域互信
两个Hadoop集群开启Kerberos验证后,集群间不能够相互访问,需要实现Kerberos之间的互信,使用Hadoop集群A的客户端访问Hadoop集群B的服务(实质上是使用Kerberos Re ...
随机推荐
- Node.js 使用
创建 Node 项目 npm init -y # 初始化 Node 项目 package.json 文件 这个文件记录了项目的相关信息. { "name": "hello ...
- web静态和动态的区别
一.静态web页面: 1.在静态Web程序中,客户端使用Web浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request),告诉服务器我现在 ...
- c程序设计语言 by K&R(三)结构
一.类型定义 typedef typedef int Length; typedef char* String; typedef struct tnode* Treeptr; typedef int ...
- CSS & JS Effect – 画三角形 Triangle
前言 画三角形有什么用? 可以做这样的 Design 参考 5 Ways To Create A Triangle With CSS Border Triangle 用 border 做 三角形应该是 ...
- 26岁女生转行车载测试1年,月入15K~
年前有朋友找工作,跟我说简历改了车载后,收到的打招呼翻了几倍,如今车载测试前景非常广阔,因为越来越多的汽车厂商正在开发新的可智能化的汽车,他们需要测试这些汽车的性能,安全性以及可靠性.车载测试技术可以 ...
- Maya 2019.2 Mtoa 无法正常加载并报错
事件起因: 在开始安装 Maya2019.2 时自动安装的 Mtoa 的版本为 5.3.1,但是在插件管理器里无法启用插件,于是乎去网上下了一个低的版本 5.1.1,虽然可以使用但是渲染出来的东西不能 ...
- Python技术书示例代码相关内容
二维码用微信扫,按提示填写你的邮箱,转到电脑上打开邮箱下载.清华国企网盘,比较快速.安全.放心下载. 百度网盘链接 用Edge/Chrome浏览器下载. <Python自动化运维快速入门> ...
- LeetCode 730. Count Different Palindromic Subsequences (区间DP)
题意 给一个字符串S,求它所有子序列中不同非空回文串的数量.字符串由 'a' 'b' 'c' 'd' 四个字母组成. 由于题目要求的是不同回文串. abba 的回文串子序列为 a,b,aba,abba ...
- Linux系统启动速度优化工具systemd-analyze
systemd-analyze简介 systemd-analyze是Linux自带的分析系统启动性能的工具. systemd-analyze可使用的命令: systemd-analyze [OPTIO ...
- 随心所动,厂商的CPU核管理策略介绍
一.引文 随着CPU架构的发展,工艺的升级,带来性能提升,能效的提升(同性能下).但是由于极限性能的增加,也带来了peak功耗的增加(大部分情况下,能效比的提升无法抵消这部分),CPU功耗优化一直是广 ...