NTLM及Kerberos认证原理摘录

目录

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的身份。

如有侵权请联系删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
NTLM Relay 是一种攻击技术,利用了 NTLM(Windows 网络身份验证协议)的漏洞。该攻击允许黑客在网络中伪装成受害者与服务器进行通信,从而获取敏感信息或执行一些恶意操作。 NTLM Relay 攻击的原理如下: 1. 受害计算机通过 NTLM 协议与服务器进行身份验证。在此过程中,受害计算机和服务器之间会进行一系列的挑战-响应验证,包括凭据传递和会话密钥生成。 2. 黑客在网络中进行监听,并截获受害计算机与服务器之间的 NTLM 通信数据。这可以通过中间人攻击或通过 ARP 欺骗攻击完成。 3. 黑客将截获的 NTLM 通信数据传输给目标服务器,冒充受害者的身份与服务器进行通信。 4. 目标服务器接收到黑客发送的伪造的验证请求并验证其身份。由于黑客已经截获到了真实的 NTLM 通信数据,因此服务器会认为该请求来自于受害者。 5. 服务器将响应返回给黑客,并黑客将该响应转发给受害计算机。 6. 受害计算机将响应解密并发送给黑客。 通过 NTLM Relay 攻击,黑客可以实施多种恶意操作,例如获取受害者的用户名和密码、执行远程命令、篡改数据等。这种攻击技术在企业中尤其危险,因为它可能导致黑客获取管理员权限并在网络中横向移动,进一步危害整个系统的安全。 为了防止 NTLM Relay 攻击,企业应采取以下措施:禁用 NTLM 认证、启用 Kerberos 认证、使用防火墙限制对 NTLM 端口的访问、使用多因素身份验证、及时修补操作系统中的漏洞并使用最新版本的软件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值