windows 域在工作中经常遇到,一直没有好好总结过,乘着最近有时间,将自己所理解的与大家分享一下

0x01、 Kerberos认证简介

windows 对于身份验证有多种方式,比如现在笔记本很常见的指纹解锁开机。在域中,依旧使用 Kerberos 作为认证手段。

Kerberos 这个名字来源于希腊神话,是冥界守护神兽的名字。

Kerberos 是一个三头怪兽,之所以用它来命名一种完全认证协议,是因为整个认证过程涉及到三方:客户端、服务端和 KDC(Key Distribution Center)。在 Windows 域环境中,KDC 的角色由 DC(Domain Controller)来担当。

Kerberos 是一种基于票据 ticket 的认证方式,举个简单的例子来说:

  • 你想参加一场舞会,被拒绝,对方告诉你需要门票
  • 你又去往领门票的地方,对方审查你的资格后,发给你一张门票
  • 最终你凭着这张门票参加了这场舞会,但是对于其他场次的舞会,你任须要去经过资格审查领取门票

下面就来详细聊聊域认证 Kerberos ,值得注意的是,这个流程与上述例子还是有区别的,切勿照搬例子带入

0x02、域认证 Kerberos 流程

这块牵涉到的名词比较多,先在前面进行列出,并给出简写

简写 全拼
DC Domain Controller 域控
KDC Key Distribution Center 密钥分发中心
AD Account Database 账户数据库
AS Authentication Service 身份验证服务
TGS Ticket Granting Service 票据授与服务
TGT Ticket Granting Ticket 票据中心授予的票据

先来就下图做一个详细的流程说明:

1. Authentication Service Exchange 认证服务交换

通过这步骤,AS 实现对 Client 身份的确认,并颁发给该 Client 一个 TGT 。具体过程如下:

client 向 AS 发送 AS Request, 为了确 AS Request 仅限于自己和 KDC 知道,client使用自己的 Master Key(用户密码的一种hash) 对 AS Request 的主体部分进行加密(KDC 可以通 AD 获得该Client 的 Master Key)。

AS Request 的大体包含以下的内容:

  • Pre-authentication data:被 Client 的 Master key加密过的 Timestamp,用于证明自己是所发送用户名对应的那个用户
  • Client name & realm: 简单地说就是Domain name\Client name
  • Server Name:注意这里的 Server Name并不是 Client 真正要访问的 Server 的名称,而我们也说了 TGT 是和 Server 无关的( Client 只能使用 Ticket ,而不是 TGT 去访问Server )。这里的 Server Name 实际上是 KDC TGS 的 Server Name

    AS 通过它接收到的 AS Request 验证发送方的是否是在 Client name & realm 中声称的那个人,也就是说要验证发送放是否知道 Client 的 Password 。所以 AS 只需从 AD 中提取 Client 对应的 Master Key对 Pre-authentication data 进行解密,如果是一个合法的 Timestamp,则可以证明发送方提供的用户名是存在于白名单中且密码对应正确的。

在这里,可能会产生一个疑问,为什么要使用 Timestamp,这种时间戳?

我们试想一下,如果恶意攻击者抓取了一个这样的AS Request数据包,用算力一直去爆破尝试,那是不是有不小的机会获取 TGT 。所以在 AS 进行其他操作之前,会先提取AS Request中的 Timestamp ,并同当前的时间进行比较,如果他们之间的偏差超出一个可以接受的时间范围(一般是5mins),AS 会直接拒绝该 Client 的请求。当AS Request中的 Timestamp 早于上次认证时间点,也是直接拒绝。

验证通过之后,AS 将一份 AS Response 发送给 Client。AS Response 主要包含两个部分:本 Client 的 Master Key 加密过的 Logon Session Key 和被自己(KDC)加密的TGT。

而TGT大体又包含以下的内容:

  • Session Key: SKDC-Client:Logon Session Key
  • Client name & realm: 简单地说就是Domain name\Client
  • End time: TGT到期的时间。

Client 通过自己的 Master Key 对第一部分解密获得 Logon Session Key之后,携带着 TGT 便可以进入下一步:TGS Exchange。

2. Ticket Granting Service Exchange 票据授与服务交换

TGS Exchange 通过 Client 向 KDC 中的 TGS 发送 TGS Request 开始。TGS Request大体包含以下的内容:

  • TGT:Client 通过 AS Exchange 获得的 TGT,TGT 被 KDC 的 Master Key 进行加密。
  • Authenticator:用以证明当初 TGT 的拥有者是否就是自己, client 端使用 Logon session key 进行加密
  • Client name & realm: 简单地说就是 Domain name\Client 。
  • Server name & realm: 简单地说就是 Domain name\Server ,这回是 Client 试图访问的那个 Server 。
  • 时间戳,同第一步,这里略

Hint :Authenticator在这里可以理解为仅限于验证双反预先知晓的内容,相当于联络暗号


TGS 收到TGS Request在发给 Client 真正的 Ticket 之前,先得整个 Client 提供的那个 TGT 是否是 AS 颁发给它的。于是它得通过 Client 提供的 Authenticator 来证明。但是 Authentication 是通过 Logon Session Key 进行加密的,而自己并没有保存这个 Session Key 。所以 TGS 先得通过自己的 Master Key 对 Client 提供的 TGT 进行解密,从而获得这个Logon Session Key ,再通过这个 Logon Session Key 解密 Authenticator 进行验证。

换句话说,TGS 接收到请求之后,现通过自己的密钥解密 TGT 并获取 Logon Session Key ,然后通过 Logon Session Key 解密 Authenticator ,进而验证了对方的真实身份。

验证通过向对方发送 TGS Response。这个TGS Response有两部分组成:

  • 使用Logon Session Key(SKDC-Client)加密过用于Client和Server的Session Key(SServer-Client)
  • 使用Server的Master Key进行加密的Ticket。

该Ticket大体包含以下一些内容:

  • Session Key:SServer-Client。
  • Client name & realm: 简单地说就是Domain name\Client。
  • End time: Ticket的到期时间。

Client 收到TGS Response,使用 Logon Session Key,解密第一部分后获得 Session Key (注意区分 Logon Session Key 与 Session Key 分别是什么步骤获得的,及其的区别)。有了 Session Key 和 Ticket , Client 就可以之间和 Server 进行交互,而无须在通过 KDC 作中间人了。

Client如果使用Ticket和Server怎样进行交互的,这个阶段通过我们的第3个步骤来完成:CS(Client/Server )Exchange。

3. CS(Client/Server )Exchange

Client 通过 TGS Exchange 获得 Server 的 Session Key ,随后创建用于证明自己就是 Ticket 的真正所有者的 Authenticator 和时间戳,并使用 Session Key 进行加密。最后将这个被加密过的 Authenticator,时间戳 和 Ticket 作为 Request 数据包发送给 Server 。此外还包含一个 Flag 用于表示 Client 是否需要进行双向验证。

Server 接收到 Request 之后,通过自己的 Master Key 解密 Ticket,从而获得 Session Key 。通过 Session Key 解密 Authenticator ,进而验证对方的身份。验证成功,让 Client 访问需要访问的资源,否则直接拒绝对方的请求。时间戳的作用,同第一步,这里略。

实际上,到目前为止,服务端已经完成了对客户端的验证,但是,整个认证过程还没有结束。谈到认证,很多人都认为只是服务器对客户端的认证,实际上在大部分场合,我们需要的是双向验证(Mutual Authentication)——访问者和被访问者互相验证对方的身份。现在服务器已经可以确保客户端是它所声称的那么用户,客户端还没有确认它所访问的不是一个钓鱼服务呢。

为了解决客户端对服务器的验证,服务要需要将解密后的 Authenticator 再次用 Session Key 进行加密,并发挥给客户端。客户端再用缓存 Session Key 进行解密,如果和之前的内容完全一样,则可以证明自己正在访问的服务器和自己拥有相同 Session Key,而这个会话秘钥不为外人知晓。

三个流程的总结

上面的文字很多,为了帮助理解,下面我用一些简写去代替上面的名词,粗略的将域认证 Kerberos 原理再次讲述一遍

简写 含义
A client
B AS
C TGS
D server
  1. A 访问 B,发送请求包,其中包括 A 的名字和使用A 的 key_a 加密的时间戳
  2. B 通过查询内部数据库,得到 请求包中名字对应的 key ,如果用这把 key 可以解出一个规范的时间戳,且该时间戳时间与当前时间戳差距小于5 min,则返回 A 一个返回包
  3. 返回包包括使用 a_key 加密的 key1,和 A 无法使用的 data1
  4. A 使用 a_key 解密出 key1 ,将联络暗号使用 key1 进行加密和 data1 一起发送给 C
  5. C 收到请求包,解开 data1 ,取出 key1。使用 key1 解密联络暗号,确认 A 的身份
  6. 确认无误,C 返回 A 一个返回包。包括使用 key_d 加密的 data2 和 key2
  7. A 使用 key2 加密联络暗号,将其和 data2 一起发往 D 处
  8. D 使用 key_d 解密出 data2 ,取出 key2 ,验证联络暗号
  9. D 验证无误后使用 key2 加密联络暗号2发往 A
  10. A 使用 key2 解密联络暗号2,确认 D 身份,最终实现资源访问

如果还是不能理解的话,补充一个趣味例子吧

  • 用户要去游乐场,首先要在门口检查用户的身份(即 CHECK 用户的 ID),如果用户通过验证,游乐场的门卫 (AS) 即提供给用户一张门卡 (TGT)。

  • 这张卡片的用处就是告诉游乐场的各个场所,用户是通过正门进来,而不是后门偷爬进来的,并且也是获取进入场所一把钥匙。

  • 这时摩天轮的服务员拦下用户,向用户要求提供摩天轮的 (ST) 票据,用户说用户只有一个门卡 (TGT), 那用户只要把 TGT 放在一旁的票据授权机 (TGS) 上刷一下。

  • 票据授权机 (TGS) 就根据用户现在所在的摩天轮,给用户一张摩天轮的票据 (ST), 这样用户有了摩天轮的票据,现在用户可以畅通无阻的进入摩天轮里游玩了。

  • 当然如果用户玩完摩天轮后,想去游乐园的过山车玩耍一下,那用户一样只要带着那张门卡 (TGT). 到过山车的票据授权机 (TGS) 刷一下,得到过山车的票据 (ST) 就可以进入过山车进行玩耍。

  • 当用户离开游乐场后,用户的 TGT 就已经过期并且销毁。

参考链接:
https://docs.microsoft.com/en-us/windows/desktop/secauthn/microsoft-kerberos
https://web.mit.edu/kerberos/
https://www.freebuf.com/articles/database/190734.html
http://www.cnblogs.com/artech/archive/2011/01/24/kerberos.html
http://www.cnblogs.com/artech/archive/2007/07/05/807492.html
http://www.cnblogs.com/artech/archive/2007/07/07/809545.html
http://www.cnblogs.com/artech/archive/2007/07/10/811970.html
https://payloads.online/archivers/2018-11-30/1

windows 域认证 Kerberos详解相关推荐

  1. kerberos认证_初识 Windows域认证体系 Kerberos认证

    关键词: Kerberos认证 域控制器(Domain Controller,DC) 密钥分发中心(Key Distribution Center,KDC) 帐户数据库(Account Databas ...

  2. Windows 7防火墙设置详解(二)

    Windows 7防火墙设置详解(二) 一.高级安全Windows 防火墙MMC 依次点击"计算机"--"控制面板"--"Windows防火墙&quo ...

  3. Windows 7防火墙设置详解(三)

    Windows 7防火墙设置详解(三) 一.如何禁用或启用规则 方法:只需要在需要禁用或启动的规则上,鼠标右键选择启用或禁止规则即可,或点击右侧的操作栏进行规则启用或禁止. 二.入站规则和出站规则 由 ...

  4. 跨域资源共享CORS详解

    最近深入了解了CORS的相关东西,觉得阮一峰老师的文章写得最详细易懂了,所有转载作为学习笔记. 原文地址:跨域资源共享 CORS 详解 CORS是W3C的一个标准,全称是跨域资源共享(Cross-or ...

  5. Windows WMIC命令使用详解

    Windows WMIC命令使用详解 第一次执行WMIC命令时,Windows首先要安装WMIC,然后显示出WMIC的命令行提示符.在WMIC命令行提示符上,命令以交互的方式执行. 执行"w ...

  6. windows USB读卡器驱动详解

    目标 在windows 2000及以上版本的操作系统中,开发usb读卡器驱动.实现数据批量传输功能,同时需要根据特定的协议(协议可自定义)进行通信.实现一个基于此usb驱动的动态库(统一接口),供上层 ...

  7. word该值小于列表中的前一条目_Word域的应和详解.doc

    Word域的应和详解 Word域的应用和详解 ■第一章 域基础一.域的作用 微软的文字处理软件Microsoft Word系列,其方便和自动化程度是其他任何文字处理软件所望尘莫及的.究其原因,其一,微 ...

  8. 豆邮windows客户端(第三方)开发详解

    豆邮windows客户端(第三方)开发详解 "豆邮",是社区网站"豆瓣"的一个类似私信的功能模块.在豆瓣官网,"豆邮"曾一度被改为" ...

  9. Windows域认证机制

    文章目录 Windows认证机制 Windows认证基础 本地认证 网络认证 hashcat破解net-ntlm hash 域认证 Kerberos认证协议的基础概念 Kerbreros认证流程 1. ...

  10. 数据库oracle认证方式,oracle数据库启动流程及登录认证方式详解

    转自:https://www.2cto.com/database/201803/726644.html ■  oracle启动流程-windows下 1) lsnrctl start  (启动监听) ...

最新文章

  1. 求矩阵两条对角线元素之和
  2. 程序员哀叹:专科都是ji's万的年薪,互联网的泡沫要破了
  3. JVM调优:运行参数,内存模型,mat、jps、jstat、jmap、jstack、jvisualvm工具的使用
  4. App设计灵感之十二组精美的地图导航App设计案例
  5. mysql更新视图的时候有时候可以不满足视图条件的值也能更新成功
  6. Angular jasmine单元测试框架spied method的调用记录数据结构
  7. 腾讯大湘网某处csrf(city.hn.qq.com)可投诉刷留言
  8. LeetCode 872叶子相似的树-简单
  9. 前端Chrome调试技巧汇总
  10. 【Latex】下标放在符号正下方
  11. python100天从新手到大师 pdf_Python100天从新手到大师(Python100Days)
  12. 电脑任务管理器_Windows任务管理器突然打不开了
  13. Java中封装、关键字及构造方法
  14. 世上可有后悔药?服务器里建快照
  15. 如何从应用直接跳转AppStore 电话 短信 邮件
  16. C ++中的初始化程序列表– std :: initializer_list
  17. RxJava2 方法总结
  18. Node.js的集群功能以及在Express的配置
  19. 【Codecs系列】HEVC-SCC(四):SCC IBC句法
  20. 宇视警戒球人形检测告警配置

热门文章

  1. 基于ABAQUS蠕变储层稠油蒸汽吞吐开发过程数值模拟
  2. kvaser在linux中的应用
  3. 肿瘤(Oncology)生物信息学分析简介
  4. 方向余弦,向量夹角,向量的投影
  5. endnotex9切换中文_EndNote9简明教程中文版
  6. 全国银行开户行名称查询数据库,包括行号、电话、地址、
  7. Apache Http Server安全漏洞解决
  8. 个人学习笔记附Markdown格式下载
  9. 开源dns软件PowerDNS BIND9 mydns
  10. 开发者必看:Google Play应用上架流程(希望你不踩坑!)