[内网安全] Windows 域认证 — Kerberos 协议认证

🌟想系统化学习内网渗透?看看这个:[内网安全] 内网渗透 - 学习手册-CSDN博客

0x01:Kerberos 协议简介

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下,Kerberos 作为一种可信任的第三方认证服务,通过采用传统密码技术(如:共享密钥)来执行认证服务。

打一个浅显的例子,A 想要到 B 那里买东西,但是怕 B 收了钱不办事。此时,我们需要一个第三方机构 C 做担保,A 把钱给了 C,B 办完事后去 C 那里拿钱。Kerberos 协议就完成了这么一个操作。

0x02:Kerberos 协议的组成角色

在古希腊神话故事中,Kerberos 是一只具有三颗头颅的地狱恶犬,它守护在地狱之外,能够识别所有路过的亡灵,防止活着的入侵者闯入地狱:

Kerberos 协议中也存在三个角色,分别是:

  • 客户端(Client): 发送请求的一方。

  • 服务端(Server): 接收请求的乙方。

  • 密钥分发中心(Key Distribution Center,KDC): 该部分由两 AS 与 TGS 构成:

    • AS(Authentication Server): 认证服务器,专门用来认证客户端的身份并发放客户端用于访问 TGS 的 TGT(允许买票的票据 — 票据授予票据)

    • TGS(Ticket Granting Ticket): 票据授予服务器,用来执行整个认证过程以及发放客户端访问服务端时所需的服务授予票据(Ticket)

0x03:Kerberos 认证的类比流程

Kerberos 协议还是有些复杂的,所以本部分中,笔者将通过两个现实中的例子,让读者对 Kerberos 协议有一个大概的认识,为我们后面介绍 Kerberos 认证的完整流程打一个基础。

0x0301:Kerberos 类比流程 — 第三方购物

假设现在 A 要买 “电脑”,它知道 B 在卖(通过电视宣传啊),但是 AB 两人都没有见过面,现在 A 就在担心,我要是把钱直接给 B 了,B 翻脸不认人了怎么办,此时,A 就陷入了信任危机。

于是,A 想到了一个办法,它找到第三方机构 C(某东),C 机构认识 A 和 B,那么 A 就将钱交给了 C 机构,C 机构转告给 B 机构发货,等到 A 确认收货后,C 机构再把钱给 B。

上面这个例子,体现的是 Kerberos 的第三方认证特性,Kerberos 中的 KDC 在上面那里例子中就是充当 C 角色,A 就是 Client,B 就是 Server。但是上面这个例子并没有体现 KDC 中 “AS” 和 ”TGS“ 的用处,我们来看看下面这个例子。

0x0302:Kerberos 类比流程 — 乘坐过山车

假设你带着一家去做过山车,你不能直接去乘过山车,你得去售票处买票吧:

来到了售票处,你不光得有钱,你还得符合乘坐的标准吧(身高啥的),只有你都满足要求了,你才能花钱买到过山车的票,然后乘坐过山车:

在上面的那个流程中 ”你“ 就是 Client 端,”过山车“ 就是你申请的服务 Server。售票处(测量身高的阿姨 + 售票)构成了 KDC,你来到了 KDC,KDC 中的 AS 首先得校验你有没有购票资格,你有资格购票后,售票处(TGS)才能给你发放票据(Ticket)。

0x0303:Kerberos 认证流程简单概述

通过上面两个例子,相信读者对 Kerberos 已经有一个大致的认识了,这里笔者简单描述一下它的整体认证流程:客户端在访问每个想要访问的服务时,需要携带一个专门用于访问该服务并且能够证明自己身份的票据,当服务端收到了该票据他才能认定客户端身份正确,向客户端提供服务。

整个 Kerberos 认证流程可以简化为两大步:

  1. 客户端向 KDC 请求获取想要访问的目标服务的服务授予票据(Ticket)。

  2. 客户端拿着从 KDC 获取的服务授予票据(Ticket)访问相应的网络服务。

0x04:Kerberos 认证的完整流程

在前面类比流程中,笔者并没有详细讲 KDC 中 AS 和 TGS 的具体作用,那么在这里,笔者将详细讲解 Kerberos 认证的完整流程,并顺带介绍 AS 与 TGS 的作用。

0x0401:第一步 — 客户端与 AS 进行通信

为了获得能用来访问服务端服务的票据,客户端首先需要来到 KDC 获得服务授予票据(Ticket)。由于客户端是第一次访问 KDC,此时 KDC 也不能确认该客户端的身份,所以在第一次通信的时候 KDC 需要对客户端身份进行认证,确认客户端是一个可靠且拥有访问 KDC 权限的客户端。

第一步:Client 首先向 KDC 以明文方式发起请求,并在该次请求中携带了自己的用户名,主机 IP 和当前时间戳。

第二步:KDC 中的 AS (AS 是 KDC 中专门用来认证客户端身份的认证服务器)接收请求后去 Kerberos 认证数据库中根据用户名查找是否存在该用户(注意:此时只会查找是否有相同用户名的用户,并不会判断身份的可靠性)。

第三步:如果没有该用户名,则认证失败,服务结束;如果存在用户名,则 AS 认证中心便认为用户存在,此时便会返回相应给客户端,响应中包含两部分内容:

  • 第一部分内容被称为(TGT),即 ”票据授予票据“。客户端后续需要使用 TGT 去 TGS(票据授予中心)获取访问网络服务所需的 Ticket(服务授予票据),TGT 中包含 Kerberos 数据库中存在的该客户端的 Name,IP,当前的时间戳,客户端即将访问的 TGS 的 Name,TGT 的有效时间以及一把用于客户端和 TGS 间进行的 Session_Key(CT_SK)。整个 TGT 使用 TGS 密钥加密,客户端是解密不了的,由于密钥从没有在网络中传输过,所以也不存在密钥被劫持破解的情况。

  • 第二部分内容是使用客户端密钥加密的,其中包括用于客户端和 TGS 间通信的 Session_Key(CT_SK),客户端即将访问的 TGS 的 Name 以及 TGT 的有效时间,和一个当前的时间戳。该部分内容使用客户端加密,所以客户端在拿到该部分内容时可以通过自己的密钥解密。如果是一个假的客户端,那么他是不会拥有真正客户端的密钥的,因为该密钥也没在网络中进行传输过。这也同时认证了客户端的身份,如果是假客户端会由于解密失败而终止认证流程。

第一阶段的整体流程如下图所示:

0x0402:第二步 — 客户端和 TGS 进行通信

经过了第一步,Client 收到了来自 KDC(准确来说是 AS)的响应,并获取到了其中两部分的内容。此时客户端会用自己的密钥将第二部分内容解密,获取时间戳、自己将要访问的 TGS 的信息以及用于与 TGS 通信的密钥 CT_SK。Client 在获取上述信息后,会先根据时间戳判断该时间戳与自己发送请求时的时间之间的差值是否大于 5 分钟,如果大于五分钟则认为该 AS 是伪造的,认证失败。如果时间戳合理,客户端就会准备向 TGS 发起请求。客户端和 TGS 通信流程如下:

Client(客户端)行为:

  1. 客户端使用 CT_SK 加密将自己的客户端信息发送给 KDC,其中包括客户端名,IP,时间戳。

  2. 客户端将自己想要访问的 Server 服务以明文的方式发送给 KDC。

  3. 客户端将使用 TGS 密钥加密的 TGT 也原封不动的携带给 KDC。

KDC 中的 TGS(票据授予服务器)行为:

  1. TGS 收到了来自客户端的请求。首先根据客户端明文传输过来的 Server 服务 IP 查看当前 Kerberos 系统中是否存在可以被用户访问的对应服务。如果不存在,认证失败,如果存在,继续下一步。

  2. TGS 使用自己的密钥将 TGT 中的内容进行解密,此时他看到了经过 AS 认证过后并记录的用户信息,CT_SK 以及时间戳信息,它会先根据时间戳判断此次通信是否真实可靠没有超出时延。

  3. 如果时延正常,则 TGS 会使用 CT_SK 对客户端的第一部分内容进行解密(使用 CT_SK 加密的客户端信息),取出其中的用户信息和 TGT 中的用户信息进行比对,如果全部相同则认为客户端身份正确,可以进行下一步。

  4. 此时,KDC(准确来说是 TGS)将返回一个 Ticket,该 Ticket 由两个部分组成:

    1. 第一部分,用于客户端访问网络服务的使用 Server 密码加密的 ST(Server Ticket),其中包括客户端的 Name,IP,需要访问的网络服务的地址 Server IP,ST 的有效时间,时间戳以及用于客户端和服务端之间通信的 CS_SK(Session Key)。

    2. 第二部分,使用 CT_SK 加密的内容,其中包括 CS_SK 和时间戳,还有 ST 的有效时间。由于在第一次通信过程中,AS 已将 CT_SK 通过客户端密码加密交给了客户端,且客户端解密并缓存了 CT_SK,所以该部分内容在客户端接收到时是可以自己解密的。

第二阶段整体流程如下图所示:

0x0403:第三步 — 客户端和服务端进行通信

经过前面两步,此时客户端收到了来自 TGS 的响应,并使用缓存在本地的 CT_SK 解密出了第二部分的内容(第一部分内容中的 ST 是由 Server 密码加密,客户端无法解密)。客户端在检验第二部分时间戳无误后取出其中的 CS_SK 准备向服务端发起最后的请求:

Client(客户端)行为:

客户端使用 CS_SK 将自己的主机信息和时间戳进行加密作为交给服务端的第一部分内容,然后将 ST(服务授予票据)作为第二部分内容都发送给服务端。

 Server(服务端)行为:

服务端收到来自客户端的请求,使用自己的密钥,将客户端发送来的 ST 部分进行解密,核对时间戳后将其中的 CS_SK 取出,使用 CS_SK 将客户端发来的第一部分内容进行解密,从而获得经过 TGS 认证过后的客户端信息,此时他将这部分信息和客户端第二部分内容带来的信息进行比对,最终确认客户端就是经过了 KDC 认证的具有真实身份的客户端,是他可以提供服务的客户端。

此时服务端会返回一段使用 CT_SK 加密的表示接收请求的响应给客户端,在客户端收到请求后,使用缓存在本地的 CS_SK 解密后也确认了服务端的身份。(其实服务端在通信过程中还会使用数字证书证明自己身份)。

至此,第三次通信完成,此时也代表整个 Kerberos 认证的完成,通信的双方都确认了对方的身份,此时便可以放心的进行整个网络通信了。第三阶段流程如下:

0x0404:Kerberos 认证完整流程图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29380.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器数据恢复—raid5阵列中硬盘掉线导致上层应用不可用的数据恢复案例

服务器数据恢复环境&故障: 某公司一台服务器,服务器上有一组由8块硬盘组建的raid5磁盘阵列。 磁盘阵列中2块硬盘的指示灯显示异常,其他硬盘指示灯显示正常。上层应用不可用。 服务器数据恢复过程: 1、将服务器中所有硬盘编号…

π0源码解析——一个模型控制7种机械臂:对开源VLA sota之π0源码的全面分析,含我司的部分落地实践

前言 ChatGPT出来后的两年多,也是我疯狂写博的两年多(年初deepseek更引爆了下),比如从创业起步时的15年到后来22年之间 每年2-6篇的,干到了23年30篇、24年65篇、25年前两月18篇,成了我在大模型和具身的原始技术积累 如今一转眼…

Dify+DeepSeek | Excel数据一键可视化(创建步骤案例)(echarts助手.yml)(文档表格转图表、根据表格绘制图表、Excel绘制图表)

Dify部署参考:Dify Rag部署并集成在线Deepseek教程(Windows、部署Rag、安装Ragan安装、安装Dify安装、安装ollama安装) DifyDeepSeek - Excel数据一键可视化(创建步骤案例)-DSL工程文件(可直接导入&#x…

由麻省理工学院计算机科学与人工智能实验室等机构创建低成本、高效率的物理驱动数据生成框架,助力接触丰富的机器人操作任务

2025-02-28,由麻省理工学院计算机科学与人工智能实验室(CSAIL)和机器人与人工智能研究所的研究团队创建了一种低成本的数据生成框架,通过结合物理模拟、人类演示和基于模型的规划,高效生成大规模、高质量的接触丰富型机…

OpenCV计算摄影学(11)色调映射算法类cv::TonemapDrago

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::TonemapDrago 是 OpenCV 中实现的基于 Paul Debevec 和 Jorge Moraleda 以及后来由 Rogier van de Weijer 和 Theo Drago 改进的色调映射算法…

蓝桥杯 Excel地址

Excel地址 题目描述 Excel 单元格的地址表示很有趣,它使用字母来表示列号。 比如, A 表示第 1 列, B 表示第 2 列, Z 表示第 26 列, AA 表示第 27 列, AB 表示第 28 列, BA 表示第 53 列&#x…

JS禁止web页面调试

前言 由于前端在页面渲染的过程中 会调用很多后端的接口,而有些接口是不希望别人看到的,所以前端调用后端接口的行为动作就需要做一个隐藏。 禁用右键菜单 document.oncontextmenu function() {console.log("禁用右键菜单");return false;…

实例详细演示在Pytest中如何忽略警告

关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 当你尝试运行Pytest代码时,那些不相关的警告突然弹出,是不是…

OpenGL ES -> GLSurfaceView纹理贴图VBO(Vertex Buffer Object)方法实现

贴图 XML文件 <?xml version"1.0" encoding"utf-8"?> <com.example.myapplication.MyGLSurfaceViewxmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height…

IDEA中Git版本回退终极指南:Reset与Revert双方案详解

目录 前言一、版本回退前置知识二、Reset方案&#xff1a;整体改写历史1、IDEA图形化操作&#xff08;推荐&#xff09;1.1、查看提交历史1.2、选择目标版本1.3、选择回退模式1.3.1、Soft&#xff08;推荐&#xff09;1.3.2、Mixed1.3.3、Hard&#xff08;慎用&#xff09;1.3.…

面试题02.02.返回倒数第k个节点

实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 注意&#xff1a;本题相对原题稍作改动 示例&#xff1a; 输入&#xff1a; 1->2->3->4->5 和 k 2 输出&#xff1a; 4 说明&#xff1a; 给定的 k 保证是有效的。 题解&#xff…

【经验分享】Ubuntu20.04编译RK3568 AI模型报错问题(已解决)

【经验分享】Ubuntu20.04编译RK3568 AI模型报错问题&#xff08;已解决&#xff09; 前言问题现象问题分析解决方案总结 前言 这里使用的是Rockchip提供的rknn_model_zoo&#xff0c;https://github.com/airockchip/rknn_model_zoo/tree/main 此解决方案适用于Rockchip芯片在U…

Python的那些事第四十一篇:简化数据库交互的利器Django ORM

Django ORM:简化数据库交互的利器 摘要 随着互联网技术的飞速发展,Web开发越来越受到重视。Django作为一款流行的Python Web框架,以其高效、安全、可扩展等特点受到了广大开发者的喜爱。其中,Django ORM(对象关系映射)是Django框架的核心组件之一,它为开发者提供了一种…

Swagger UI界面的使用

访问地址 一般格式&#xff1a;http://xxxx:端口号/上下文路径/swagger-ui/index.html 首先保证当前项目已经集成Swagger的功能 上下文路径&#xff1a;指的配置文件中的&#xff1a;server.servlet.context-path的值 刚进入界面&#xff0c;找到自己的服务接口&#xff0c;开…

WPS工具栏添加Mathtype加载项

问题描述&#xff1a; 分别安装好WPS和MathType之后&#xff0c;WPS工具栏没直接显示MathType工具&#xff0c;或者是前期使用正常&#xff0c;由于WPS更新之后MathType工具消失&#xff0c;如下图 解决办法 将文件“MathType Commands 2016.dotm”和“MathPage.wll”从Matht…

部署RabbitMQ集群详细教程

部署RabbitMQ集群详细教程 下面是一份在 Ubuntu 环境下部署 RabbitMQ 集群的详细步骤说明&#xff0c;涉及主机名设置、Erlang & RabbitMQ 安装、管理插件启用、集群通信 Cookie 配置、节点加入集群、镜像队列策略设置以及集群验证等。为了演示方便&#xff0c;以下示例假…

三维数据可视化与表面重建:Marching Cubes算法的原理与应用

1. 引言 随着现代医学影像技术的飞速发展&#xff0c;三维数据的可视化与重建已成为医学研究、临床诊断和手术规划的重要工具。在众多三维重建算法中&#xff0c;Marching Cubes算法因其高效、稳定的特性成为从离散数据场中提取等值面的经典方法。本报告将深入探讨Marching Cu…

IDEA 2024.1.7 Java EE 无框架配置servlet

1、创建一个目录&#xff08;文件夹&#xff09;lib来放置我们的库 2、将tomcat目录下的lib文件夹中的servlet-api.jar文件复制到刚创建的lib文件夹下。 3、把刚才复制到lib下的servlet-api.jar添加为库 4、在src下新建一个package&#xff1a;com.demo&#xff0c;然后创…

【文生图】windows 部署stable-diffusion-webui

windows 部署stable-diffusion-webui AUTOMATIC1111 stable-diffusion-webui Detailed feature showcase with images: 带图片的详细功能展示: Original txt2img and img2img modes 原始的 txt2img 和 img2img 模式 One click install and run script (but you still must i…

【TCP/IP协议栈】【传输层】端口号、套接字、多路复用/分解、网络字节序

参考资料&#xff1a; 前言&#xff1a; 总结&#xff1a; 【计算机网络】套接字&#xff08;应用层和传输层之间的接口&#xff09; 套接字是一个通用的通信接口抽象不仅限于TCP/IP协议族作为应用层和传输层之间的桥梁支持多种通信方式和协议族 套接字定义 在 TCP 或者 UDP…