域渗透之初识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 ...
随机推荐
- docker高级篇2-分布式存储之三种算法
面试题: 1~2亿条数据需要缓存,请问如何设计这个缓存案例? 答:单机单台100%是不可能的.肯定是分布式缓存的.那么用Redis如何落地? 一般有三种方案: 哈希取余分区:一致性哈希算法分区:哈希槽 ...
- ZEGO 教程 | RTC + AI 视觉的最佳实践(移动端)
摘要:帮助开发者在音视频场景中快速获得 AI 视觉功能 -- 美颜.滤镜.背景抠图等. 文|即构 Native SDK 开发团队 Z世代作为社会新的消费主力,追求个性.热爱新奇事物,青睐与酷炫 ...
- OData – 坑
前言 OData 有很多很多的坑,我的主张是能少用一样是一样,比如 Batch Processing 不要用,Inheritance 不要用,除了 GET 其它 PUT POST DELETE 都不要 ...
- RxJS 系列 – 概念篇
前言 很长一段时间没有写 Angular 了 (哎...全栈的命),近期计划又要开始回去写了,于是就开始做复习咯. 我的复习是从 JS > TS > RxJS > Angular,与 ...
- ASP.NET Core Library – Google libphonenumber (Country Dial Code)
前言 Google libphonenumber 是 Java 的, ASP.NET Core 只是 port 过去而已. 以前在 angular2 学习笔记 ( translate, i18n 翻译 ...
- angular cli, vs code liveserver, vs 2019 iis express 10, vs code kestrel 使用 https + ip
更新: 2022-03-20 修订版: Vs Code, Visual Studio 2022, Angular and Live Server Running Through Https and I ...
- Asp.net core 学习笔记之异常处理
自己写代码自己维护, 你爱怎样写都可以, 确保一致性就可以了. 不要自己写,自己看不懂 /.\ 但是如果有一天你要别人也看得懂...那就不单单是一致性的问题了,最好是用大众的 style. refer ...
- ASP.NET Core – Razor Pages 冷知识
Multiple Form Binding 问题 在一个 page 里面有 2 张 form, 那么就会有 2 个 model binding. 当任何一个 submit 的时候. 由于 2 个 mo ...
- 线段树 ----洛谷p3372
问题描述: 已知一个数列,对数列进行两种操作:1,对数列某个区间中的所有数加d:2,查询数列某区间的区间和 输入: 第一行输入两个整数n和m,分别代表数列中元素个数和对数列的操作次数,第二行输入n个用 ...
- [OI] 二项式期望 DP
OSU OSU yet Another OSU yet yet Another OSU OSU 的题目是这样的:有一些相邻的块,给定每一个块的联通概率,每个连通块对答案有 \(size^{3}\) 的 ...