当前位置: 首页 > news >正文

[内网安全] 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 认证完整流程图

相关文章:

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

🌟想系统化学习内网渗透?看看这个:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:Kerberos 协议简介 Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过…...

[Computer Vision]实验七:图像检索

目录 一、实验内容 二、实验过程 2.1 准备数据集 2.2 SIFT特征提取 2.3 学习“视觉词典”(vision vocabulary) 2.4 建立图像索引并保存到数据库中 2.5 用一幅图像查询 三、实验小结 一、实验内容 实现基于颜色直方图、bag of word等方法的以图搜…...

C++之thread_local变量

C之thread_local变量_c threadlocal-CSDN博客 thread_local简介 thread_local 是 C11 为线程安全引进的变量声明符。表示对象的生命周期属于线程存储期。 线程局部存储(Thread Local Storage,TLS)是一种存储期(storage duration),对象的存储是在…...

【国产Linux | 银河麒麟】麒麟化龙——KylinOS下载到安装一条龙服务,起飞!

🗺️博客地图 📍一、下载地址 📍二、 系统安装 本文基于Windows操作系统vmware虚拟机安装 一、下载地址 官网:产品试用申请国产操作系统、麒麟操作系统——麒麟软件官方网站 下载自己需要的版本,完成后&#xff0c…...

(接“使用js去复制网页内容的方法”)js中的execCommand怎么复制富文本内容解析

document.execCommand(copy) 是传统的剪贴板操作方法,但它主要用于复制纯文本内容。如果你想复制富文本内容(包括 HTML 标签和样式),需要结合一些技巧来实现。以下是具体方法: 方法:通过创建隐藏的富文本元…...

npm ERR! code 128 npm ERR! An unknown git error occurred

【问题描述】 【问题解决】 管理员运行cmd(右键window --> 选择终端管理员) 执行命令 git config --global url.“https://”.insteadOf ssh://git cd 到项目目录 重新执行npm install 个人原因,这里执行npm install --registryhttps:…...

解决Leetcode第3470题全排列IV

3470.全排列IV 难度:困难 问题描述: 给你两个整数n和k,一个交替排列是前n个正整数的排列,且任意相邻两个元素不都为奇数或都为偶数。 返回第k个交替排列,并按字典序排序。如果有效的交替排列少于k个,则…...

MyBatis 配置文件核心

MyBatis 配置文件核心标签解析 以下是针对你的笔记中的三个核心标签的详细解析,帮助你全面理解它们的用途和配置逻辑。 1. properties 标签:动态加载外部配置 功能 将环境相关的配置(如数据库连接、密钥等)与 MyBatis 核心配置…...

bert模型笔记

1.各预训练模型说明 BERT模型在英文数据集上提供了两种大小的模型,Base和Large。Uncased是意味着输入的词都会转变成小写,cased是意味着输入的词会保存其大写(在命名实体识别等项目上需要)。Multilingual是支持多语言的&#xff0…...

微信小程序接入deepseek

先上效果 话不多说&#xff0c;直接上代码&#xff08;本人用的hbuilder Xuniapp&#xff09; <template><view class"container"><!-- 聊天内容区域 --><scroll-view class"chat-list" scroll-y :scroll-top"scrollTop":…...

推荐算法和推荐系统入门第一趴

以下是推荐系统技术总结的架构梳理和建议表达思路&#xff1a; 从原理到生产环境&#xff1a;推荐系统核心技术与实战代码解析 一、推荐算法的演进图谱 传统算法三剑客 ![推荐系统算法分类示意图] &#xff08;使用Mermaid绘制算法分类关系图&#xff0c;清晰展示技术演进&am…...

unity pico开发 四 物体交互 抓取 交互层级

文章目录 手部设置物体交互物体抓取添加抓取抓取三种类型抓取点偏移抓取事件抓取时不让物体吸附到手部 射线抓取交互层级 手部设置 为手部&#xff08;LeftHandController&#xff09;添加XRDirInteractor脚本 并添加一个球形碰撞盒&#xff0c;勾选isTrigger,调整大小为0.1 …...

基于深度学习的青花瓷图像检索系统开发与实现

目录 1.研究背景与目的 1.1课题背景 1.2研究目的 二、调研资料情况 2.1图像分割研究现状 2.2图像检索调研 2.2.1选择深度学习进行检索的原因及优势 2.2.2基于深度学习的图像检索技术的发展 2.2.3基于深度学习的图像检索的研究重点 2.3基于深度学习的图像检索方法调研 …...

uniapp 系统学习,从入门到实战(八)—— Vuex 的使用

全篇大概 4500 字(含代码)&#xff0c;建议阅读时间 30min &#x1f4da; 目录 Vuex核心概念解析在 UniApp 中集成Vuex状态管理与数据共享实践总结 一、Vuex 核心概念解析 1.1 什么是状态管理 在跨多组件的大型应用中&#xff0c;不同页面/组件需要共享和修改相同数据时&am…...

Vue Hooks 深度解析:从原理到实践

Vue Hooks 深度解析&#xff1a;从原理到实践 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff01;点我试试&#xff01;&#xff01; 文章目录 Vue Hooks 深度解析&#xff1a;从原理到实践一、背景…...

django中序列化器serializer 的高级使用和需要注意的点

在 Django REST framework(DRF)中,序列化器(Serializer)是一个强大的工具,用于将复杂的数据类型(如 Django 模型实例)转换为 Python 原生数据类型,以便将其渲染为 JSON、XML 等格式,同时也能将接收到的外部数据反序列化为 Django 模型实例。以下将介绍序列化器的高级…...

靶场(二)---靶场心得小白分享

开始&#xff1a; 看一下本地IP 21有未授权访问的话&#xff0c;就从21先看起 PORT STATE SERVICE VERSION 20/tcp closed ftp-data 21/tcp open ftp vsftpd 2.0.8 or later | ftp-anon: Anonymous FTP login allowed (FTP code 230) |_Cant get dire…...

PHP Error处理指南

PHP Error处理指南 引言 在PHP开发过程中,错误处理是一个至关重要的环节。正确的错误处理不仅能够提高代码的健壮性,还能提升用户体验。本文将详细介绍PHP中常见的错误类型、错误处理机制以及最佳实践,帮助开发者更好地应对和处理PHP错误。 PHP错误类型 在PHP中,错误主…...

视频输入设备-V4L2的开发流程简述

一、摄像头的工作原理与应用 基本概念 V4L2的全称是Video For Linux Two&#xff0c;其实指的是V4L的升级版&#xff0c;是linux系统关于视频设备的内核驱动&#xff0c;同时V4L2也包含Linux系统下关于视频以及音频采集的接口&#xff0c;只需要配合对应的视频采集设备就可以实…...

【Manus资料合集】激活码内测渠道+《Manus Al:Agent应用的ChatGPT时刻》(附资源)

DeepSeek 之后&#xff0c;又一个AI沸腾&#xff0c;冲击的不仅仅是通用大模型。 ——全球首款通用AI Agent的破圈启示录 2025年3月6日凌晨&#xff0c;全球AI圈被一款名为Manus的产品彻底点燃。由Monica团队&#xff08;隶属中国夜莺科技&#xff09;推出的“全球首款通用AI…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...