NTLM及Kerberos认证原理摘录

2023-11-06

目录

NTLM

前言

认证流程

本地认证

NTLM Hash的生成

 Kerberos认证

概念

认证流程

​编辑Kerberos协议四个角色介绍

KDC的介绍

Kerberos认证 大体分为三个流程

Authentication Service Exchange

Ticket-Granting Service(TGS) Exchange

Client/Server Authentication Exchange


NTLM

前言

NTLM是NT LAN Manager的缩写,NTLM是指telnet的一种验证身份方式,即问询/应答身份验证协议,是windows NT 早期版本的标准安全协议,Windows 2000支持NTLM是为了保持向后兼容。Windows 2000内置三种基本安全协议之一。

认证流程

①使用用户名和密码登录客户端,进行本地认证

②客户端首先在本地加密当前用户的密码为密码散列,即NTLM Hash

注:通常意义上的NTLM Hash指存储再SAM数据库及NTDS数据库中对密码进行Hash摘要计算后的结果,这类Hash可以直接用户PTH,并且通常存在于LSASS进程中,便于SSP(NTLM安全支持提供程序)使用。

③确认双方协议版本、客户端向服务器明文发送自己的账号

④服务器生成一个16位的随机数字发送给客户端,即challenge

⑤客户端使用NTLM Hash来加密challenge,生成的结果即response

⑥服务器将明文的用户名challengeresponse发给域控制器(DC)

⑦域控制器用这个用户名在SAM密码管理库中找到用户对应的NTLM Hash,并使用这个值来加密challenge,生成的结果即为response2

注:Security Account Manager Database,安全账号管理数据库

⑧域控制器对response和response2进行比较,如果一样则认证成功,反之则失败

本地认证

Windows不会存储用户的明文密码,而是将明文秘密加密后存储在SAM中。

本地认证的过程中,用户登录时,系统会将用户输入的明文密码加密从NTLM Hash,然后和SAM中的NTLM Hash进行比较从而完成认证

用户进行任何注销操作(注销登录,重启,锁屏)等,winlogon进程会现实密码输入界面,接受用户输入密码后交给lsass进程,这个进程中会保存一份明文密码,然后加密成NTLM Hash

winlogon.exe -> 接收用户输入 -> lsass.exe -> 本地认证

NTLM Hash的生成

  • 用户明文密码: y5neko123
  • 十六进制转换为:79356e656b6f313233
  • 转换为Unicode码,相当于在每个字节后添加一个0x00:790035006e0065006b006f00310032003300
  • 以十六进制进行MD4加密:2aec2647511a853cbec96388c4ae8770

 Kerberos认证

概念

Kerberos是一种由MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端、服务器应用程序提供强身份验证

在Kerberos认证中,最主要的问题是如何证明【你是你】的问题,如当一个Client去访问Server服务器上的某服务器时,Server如何判断Client是否有权限是否有权限来访问自己主机上的服务,同时保证在这个过程中的通讯内容即使被拦截或篡改也不影响通讯的安全性,这正是Kerberos解决的问题。

Kerberos主要是用在域环境下的身份认证协议

认证流程

Kerberos协议四个角色介绍

  • 访问服务的Client
  • 提供服务的Server
  • KDC(Key Distribution Center)密钥分发中心,分为两个部分(Authentication Serice(AS) 和Ticket Granting Service(TGS))
KDC服务默认会安装在一个域的域控中,KDC服务框架中包含一个krbtgt账户,它是在创建域时系统自动创建的一个账号,是一个无法登陆的账号,在发放票据时会使用到它的密码HASH值
  • AD(Account Database)

KDC的介绍

Authentication Service: 认证服务器,一下简称AS,作用就是验证Client端的身份,验证通过会发送一张TGT(Ticket Granting Ticket) 票据给Client

TGT包含:使用KDC中的krbtgt账户的NTLM Hash加密的SessionKey、Client name &realm 以及End time:TGT的到期时间

Ticket Granting Service:票据分发服务器,一下简称TGS,作用是通过AS发送给Client的票据(TGT)换取ST(ServiceTicket) ,也被称为TGS Ticket

ST可以用来访问server端的票据,包含:SessionKey-tgs、Client name &realm 以及End Time:ST的到期时间。

Kerberos认证 大体分为三个流程

  • The Authentication Service Exchange:Client与AS的交互
  • The Ticket-Granting Service(TGS) Exchange:Client与TGS的交互
  • The Client/Server Authentication Exchange:Client与Server的交互

Authentication Service Exchange

1、KRB_AS_REQ(请求)

Client–》AS:客户端向KDC的AS发送Authenticatior1,内容包含:

  • Pre-authentication data :包含用以认证自己身份的信息,一般它的内容是一个被Client Hash加密过的时间戳
  • Client name & realm:用户信息
  • TGS的Server name

2、KRB_AS_REP(响应)

AS–》Client:AS根据用户名在AD中判断是否在白名单中,接着进行验证发送方是否为Client name中声称的用户,也就是需要验证发送方是否知道该用户名的密码,此时只需要从AD中使用相同的NTLM Hash对请求包中的Pre-authentication data进行解密,如果是一个合法的时间戳,则说明提供的密钥无误。

验证成功后提取相应的NTLM Hash,此时会生成一个随机数SessionKey,然后使用提取的NTLM Hash来加密SessionKey,生成SessionKey-as作为AS数据,再返回一个TGT

Client收到KRB_AS_REP,通过自己的NTLM Hash对返回的SessionKey-as进行解密得到SessionKey后,即可携带TGT进入下一个步骤

Ticket-Granting Service(TGS) Exchange

1、KRB_TGS_REQ(请求)

Client–》TGS:Client向KDC的TGS发送Authenticator2,内容包含:

  • TGT
  • Authenticator:用以证明当初TGT的拥有者是自己,使用SessionKey来进行加密,其中包含有客户端信息和时间戳
  • Client name & realm
  • Server name & realm:Client要访问的Server

2、KRB_TGS_REP(响应)

TGS–》Client:TGS首先通过自己的NTLM Hash(krbtgt账户的NTLM Hash)对Client提供的TGT进行解密,即可得到SessionKey,再通过这个SessionKey解密Client提供的Authenticator来进行验证,此时生成一个SessionKey-tgs

验证成功后向对方发送两个数据:

  • 使用SesssionKey加密SessionKey-tgs生成SessionKey-tgs-encrypt,用于Client和server的认证
  • 使用Server的NTLM Hash 加密SessionKey-tgs生成ST

Client收到KRB_TBS_REP,使用SessionKey对返回的SessionKey-tgs-encrypt进行解密得到SessionKey-tgs,有了SessionKey-tgs和ST,Client就可以和Server交互了,至此TGS的任务完成。

Client/Server Authentication Exchange

1、KRB_AP_REQ(请求)

Client–》Server:Client向Server发送Authenticator3,内容包含:

  • ST
  • Authenticator:用以证明当初TGT的拥有者是自己,使用SessionKey来进行加密,其中包含有客户端信息和时间戳
  • Flag:用于表示Client是否需要进行双向验证

2、KRB_AP_REP(响应)

Server–》Client:Server首先通过自己的NTLM Hash对收到的ST进行解密,即可得到SessionKey-tgs,再通过这个SessionKey-tgs解密收到的Authenticator即可验证身份,原理同上。

此时连接建立成功

对于需要进行双向验证,Server从Authenticator提取Timestamp,使用SessionKey(Server-Client)进行加密,并将其发送给Client用于Client验证Server的身份。

如有侵权请联系删除

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NTLM及Kerberos认证原理摘录 的相关文章

  • 苏州大学邮箱注册JetBrain, 永远使用专业版

    今天发现 使用教育邮箱 可以免费使用JetBrain的专业版 作为苏大的学生 尤其是计算机学院的不要错过哦 注意 只是针对苏州大学的学生 毕业之后可以开通校友邮箱 相当于以后可以一直使用专业版 每年激活一次 1 开通邮箱 a 登陆网址 ht
  • PAT打卡--L1-016查验身份证(c++)

    原题链接 这道题其实也是一道简单题 我主要还是用其来学习C 通过这道题 了解到了c 中的字符和int之间的转换 首先贴上代码吧 include
  • spring data jpa 自定义接口实现

    没错 spring data jpa很优秀 但有一些东西 我们就想自己来 我除了想用你的 还想用我自己的 首先 我要spring data jpa的接口 为什么 因为很方便啊 public interface TaskDao extends
  • ORA-04088(ORA-04084): cannot change NEW values for this trigger type

    gt gt gt bug背景 gt gt gt bug来源一个定时任务的删除操作 这里需要删除原来数据 然后插入定时采集到的数据 因采集到的数据中没有id这个字段 所以插入这个过程需要借助oracle的触发器 来自动生成一个id 最终我写的

随机推荐

  • js(react)中使用百度地图

    0 需求 依次点击区 镇 小区 展示当前位置的数据列表 移动地图 movestart事件 隐藏详情 1 准备工作 1 1 引入百度地图并配置ak jspopularGL 百度地图API SDK 1 2 根据IP定位获取当前定位 import
  • 静态方法不能调用非静态方法的原因

    静态方法是属于类的 即静态方法是随着类的加载而加载的 在加载类时 程序就会为静态方法分配内存 而非静态方法是属于对象的 对象是在类加载之后创建的 也就是说静态方法先于对象存在 当你创建一个对象时 程序为其在堆中分配内存 一般是通过this指
  • 蓝桥杯 ADV-202 最长公共子序列

    算法提高 最长公共子序列 时间限制 1 0s 内存限制 256 0MB 问题描述 给定两个字符串 寻找这两个字串之间的最长公共子序列 输入格式 输入两行 分别包含一个字符串 仅含有小写字母 输出格式 最长公共子序列的长度 样例输入 abcd
  • 这恐怕是学习Frida最详细的笔记了

    转载自Sakura的博客 https eternalsakura13 com 2020 07 04 frida title Frida Android hook categories Android逆向 致谢 本篇文章学到的内容来自且完全来
  • video标签播放视频时错误403

    在HTML页面上添加
  • 【机器学习详解】SVM解二分类,多分类,及后验概率输出

    转载请注明出处 http blog csdn net luoshixian099 article details 51073885 CSDN 勿在浮沙筑高台 color Blue CSDN 21247 22312 28014 27801 3
  • Chrony时间同步服务器

    文章目录 一 时间同步基本概念 1 什么是时间同步 2 为什么需要时间同步 3 时间同步是如何完成 二 Chrony时间服务 1 Chrony介绍 2 为何需要Chrony 3 Chrony安装 4 Chrony服务端 5 Chrony客户
  • 安卓手机无需获取root权限安装桌面版Linux操作系统(非常详细,无计算机基础都可以)

    安卓手机无需获取root权限安装桌面版Linux操作系统 首先提醒一下这个教程可能会比较长 而却图片也稍微多了点 但真的很详细很详细 没有计算机基础都可以成功的 由于我学的是计算机方面的专业 所以学习需要经常使用电脑 可我的游戏本又非常的笨
  • OpenWrt的内核启动分析

    u boot从Flash分区中读取Linux内核到内存 然后跳转到内存 某个地址 执行Linux内核 Linux内核会进行一系列验证 根据设备树文件 见下图openwrt target linux realtek dts 5 15 XXX
  • valgrind交叉编译

    编译 autogen sh configure host mips linux gnu CC mips linux gnu gcc CXX mips linux gnu g prefix mnt mmc make make install
  • 信号反射与反弹图那些事

    原文来自公众号 工程师看海 我们总说阻抗不连续会导致信号反射 今天介绍下信号反射的过程与反弹图 如下图所示 对于传输线而言 当信号从左向右传播时 如果走线突然加粗 那么对应的单位长度电感和电位长度电容就会发生变化 使得阻抗突变 Z1 Z2
  • 数据输入及输出显示——JSP实用例子

    例子说明 这例子是学生基本信息的输入以及输出显示 有两个页面 info jsp和showInfo jsp 前者是顾客输入的信息页面 而后者是处理信息的页面 info jsp
  • 考研面试数据库题库

    文章目录 1 什么是数据库 2 数据库管理系统的主要功能是什么 3 什么是数据库系统 4 数据库系统的特点是什么 5 DBA的职责是什么 6 三级模式结构是什么 7 二级映射有什么优点 8 什么是数据库系统的二级映像与数据独立性 9 关系模
  • AIStudio训练模型无反应的解决办法

    问题描述 在AIStudio工作台中 启动环境 按照样例配置好训练集 验证集之后 输入指令 python train py dataset dir data device gpu max seq length 128 model name
  • rbf神经网络预测_城市轨道交通中短期客流预测的深度学习架构

    摘要 短期客流预测是城市轨道交通运营的重要组成部分 兴起的深度学习模型为提高预测精度提供了很好的思路 因此 我们提出了一种结合了残差网络 ResNet 图卷积网络 GCN 和长短期记忆网络 LSTM 简称ResLSTM 的深度学习架构来预测
  • 反转字符串中的元音字母Python解法

    给你一个字符串 s 仅反转字符串中的所有元音字母 并返回结果字符串 元音字母包括 a e i o u 且可能以大小写两种形式出现 例 输入 s hello 输出 holle 解析 字符串中只有元音字母受到条件约束 所以我们只需要将元音字母进
  • RK3588移植opencv(包含opencv_contrib)过程

    后面给大家准备了我自己编译好的 百度云链接 如果有用 麻烦点个赞 1 环境 PC端 Ubuntu 16 04 opencv 版本 3 4 13 编译器 aarch64 linux gnu 工具 cmake 2 源码下载 opencv 3 4
  • dubbo 源码分析-1

    前一篇springCloud 篇幅较长 看起来比较累 这一篇dubbo源码分析 将拆分3篇来分析 1 版本 这里源码是从git 上拉下来的 现在注解用的多 这也是一篇分析注解版本的 2 入口 这是spring 容器启动 回加载Provide
  • makefile文件详解

    1 make是如何工作的 在默认的方式下 也就是只输入make命令 那么 1 make会在当前目录下找名字叫 Makefile 或 makefile 的文件 默认的情况下 make命令会在当前目录下按顺序找寻文件名为 GNUmakefile
  • NTLM及Kerberos认证原理摘录

    目录 NTLM 前言 认证流程 本地认证 NTLM Hash的生成 Kerberos认证 概念 认证流程 编辑Kerberos协议四个角色介绍 KDC的介绍 Kerberos认证 大体分为三个流程 Authentication Servic