IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 红队笔记之Kerberos协议浅析 -> 正文阅读

[网络协议]红队笔记之Kerberos协议浅析


Kerberos是一种由麻省理工研发,用来来保护Project Athena提供的网络服务器。这个协议以希腊神话中的人物Kerberos命名,他在希腊神话中是Ha des的一条凶猛的三头保卫神犬。故Kerberos也被戏称为三只狗头。

Kerberos是一种网络身份验证协议。其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现

  • 不依赖于主机操作系统的认证
  • 无需基于主机地址的信任
  • 不要求网络上所有主机的物理安全
  • 并假定网络上传送的数据包可以被任意地读取、修改和插入数据

在以上情况下, Kerberos 作为一 种可信任的第三方认证服务,是通过传统的密码技术(如:共享 密钥)执行认证服务的。

Kerberos协议架构 (三只狗头)

Kerberos协议由三部分组成,俗称三只狗头,这三只狗头在整个认证过程有着不同的角色,下面对协议的基本架构进行介绍

  • Client:认证发起方

  • Server:服务提供方

  • KDC(Key Distribution Center) :KDC负责管理票据、认证票据、分发票据,KDC不是一个独立的服务,它主要由两个服务组成:

    • 1、Authentication Service: 为client生成TGT的服务
    • 2、Ticket Granting Service: 为client生成某个服务的ticket
    • 备注1:整个认证的过程中KDC还要与DC(Domain Controller)中的AD(Account Database)进行交互,AD中存储所有Client的白名单,只有存在于白名单的client才能顺利申请到TGT
    • 备注2:KDC服务框架中包含一个默认的KRBTGT账户,其对应的NTLM Hash用例加密生成TGT

image-20211019153248664

Kerberos认证流程

Kerberos认证流程简述

1、Client与AS交互

Client向AS服务请求,希望获取访问Server的权限。 AS得到了这个消息,首先调用AD获取Client白名单,如Client在白名单中则返回TGT给Client。

TGT(Ticket Granting Ticket):入场券,通过入场券能够获得票据,是一种临时凭证。

2、Client与TGS交互

Client得到了TGT后,向TGS发送请求,希望获取访问Server的权限。TGS通过Client发送的TGT进行认证,如认证通过给Client发送可以访问Server的权限ticket。

Ticket:票据,是网络对象互相访问的凭证

3、Client与server交互

Client得到ticket后,将ticket发送给对应Server,Server认证通过后,Client最终获得访问Server权限。

Kerberos认证流程详解

为了表达方便,下文会采用“秘钥(密文)”的方式来表达被某种秘钥加密过的密文,如KEY1(B),将表达被秘钥KEY1加密B所产生的密文

1、Client与AS交互过程(身份认证)

  • Client先向AS发送KRB_AS_REQ,消息主要为明文的用户名信息

    KRB_AS_REQ消息体内容大致为;

    1、Pre-Authentication Data:一个被Client Hash加密的Timestamp.用于AS验证客户端身份

    2、Client Info: Client标识,用于AS查询Client对应的NTLM Hash

    3、Server Info:KDC的Tioket Granting Service

  • AS接到KRB_AS_REQ解析其中的用户名,调用AD进行查询,如用户名不在AD白名单中则认证终止,如在AD白名单中,AD将用户名对应的NTLM Hash发送给AS

  • AS生成一个随机字符串,叫TGS Session Key ,并使用用户名对应的NTLM Hash将Session Key进行加密,后文称Client Hash(TGS Session Key)

  • AS使用其默认账户KRBTGT对应的NTLM Hash对TGS Session Key,Client Info,TGT到期时间进行加密,生成KRBTGT Hash(TGS Session Key,Client Info,TGT到期时间),即TGT

  • AS向Client返回KRB_AS_REP

    KRB_AS_REP消息体内容大致为;

    MSG 1、Client Hash(Session Key):一个被Client Hash加密的Session Key,用于客户端接收后解密出Session Key

    MSG 2、KRBTGT Hash(TGS Session Key,Client Info,TGT到期时间)TGT:用于向TGS服务申请票据的凭证

  • Client使用自己的NTLM Hash解密MSG 1,获取到TGS Session Key,因为无KRBTGT对应的NTLM Hash故无法解析MSG 2获取到TGT

    至此,Client证明了自己的合法身份,并获得了TGT

2、Client与TGS交互过程(服务授权)

  • Client使用使用上一步解析出来的TGS Session Key重新加密Client Info与时间戳, TGS Session Key(Client Info+Timestamp)后文称Authenticator 1

  • Client向TGS发送KRB_TGS_REQ

    KRB_TGS_REQ消息体内容大致为;

    MSG 1、Authenticator 1 :TGS Session Key(Client Info+Timesramp)

    MSG 2、TGT:KRBTGT Hash(session key+client info+TGT到期时间),以及Server Info(要访问的服务)

  • TGS接收到KRB_TGS_REQ后,使用账户KRBTGT对应的NTLM Hash对MSG 2中的TGT进行解密,得到TGS Session Key+client info+TGT到期时间

  • TGS拿到TGS Session Key后解密MSG 1,得到Client Info+Timesramp

  • TGS将TGT中解密出来的client info与MSG 1中解密出来的client info进行比较,如相同则认证通过,并生成一个用于与被访问服务做认证随机字符串,我们称之为Server Session Key

  • TGS使用MSG 2中的Server Info信息从AD中取出Server 对应的NTLM Hash

  • TGS使用Server对应NTLM Hash对Server SessionKey,Client Info,Ticket有效时间进行加密,生成Server Hash(Server SessionKey,Client Info,Ticket有效时间),即Ticket(票据)

  • TGS使用TGS Session Key加密Server Session Key生成TGS Session Key(Server Session Key)

  • TGS向Client发送KRB_TGS_REP

    KRB_TGS_REP消息体内容大致为;

    MSG 1:TGS Session Key(Server Session Key),用于客户端解密出Server Session Key

    MSG 2:Ticket:Server Hash(Server SessionKey,Client Info,Ticket有效时间),用于服务端认证

  • Client收到到KRB_TGS_REP后使用TGS Session Key解析出Server Session Key

至此,Client得到了访问Server的钥匙,Ticket

3、Client与Server交互(服务请求)

  • Client使用上一步解析出来的Server Session Key重新加密Client Info与时间戳,生成Server Session Key(Client Info+Timestamp),后文称Authenticator 2

  • Client向server发送KRB_AP_REQ

    KRB_AP_REQ消息体内容大致为;

    MSG 1、Authenticator 2:Server Session Key(Client Info+Timestamp)

    MSG 2、Ticket:Server Hash(Server SessionKey,Client Info,Ticket有效时间)

  • Server接收到KRB_AP_REQ后使用自己的NTLM Hash对ticket进行解密得到Server SessionKey,Client Info,Ticket有效时间等信息

  • Server使用Server SessionKey解密Authenticator 2得到Client Info

  • 将Ticket解析出来的Client Info与Authenticator 2 中解析出来的Client Info进行比较,如相同则认证通过

  • server使用Server SessionKey加密Authenticator 2 中所含的Timesramp,Server SessionKey(Timestamp)

  • 服务端向Client发送KRB_AP_REP

    KRB_AP_REP消息体内容大致为;

    MSG 1、Server SessionKey(Timesramp)

  • Client接收到KRB_AP_REP后使用Server SessionKey解析出Timestamp,与自己发送的Authenticator 2总所含Timestamp进行比较,如一致,则整个认证流程完成

  • 校验通过后,认证成功,该票据会一直存在客户端内存中。

    至此,Client与Server成功完成了认证

为了您和您家人的幸福,请不要利用文中技术在用户未授权情况下开展渗透测试!!!

《中华人民共和国刑法》

第二百八十五条
违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。
第二百八十六条
违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。

违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。
故意制作、传播计算机病毒等破坏程序,影响计算机系统正常运行,后果严重的,依照第一款的规定处罚

  网络协议 最新文章
Web渗透测试---Web TOP 10 漏洞
记一次公司某招标网站的web渗透(实战第一个
http模块
Apache 2部署SSL证书
HTTP的返回状态码
使用Python的smtplib模块发送简单邮件
qt -- 网络编程UDP
Http请求
TCP三次握手和四次挥手
2021-08-21
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 12:21:50  更:2021-12-05 12:22:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2022年11日历 -2022/11/28 9:39:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码