系统相关
首页 > 系统相关> > Windows认证协议

Windows认证协议

作者:互联网

目录

Windows认证协议

本地认证流程

Windows Logon Process(即winlogon.exe),Winlogon是负责处理安全相关的用户交互界面的组件。Winlogon的工作包括加载其他用户身份安全组件、提供图形化的登陆界面,以及创建用户会话。

LSASS(本地安全认证子系统服务)用于微软Windows系统的安全机制。它负责Windows系统安全策略。它负责用户在本地验证或远程登陆时验证用户身份,管理用户密码变更,并产生访问日志。

用户注销、重启、锁屏后、操作系统会让winlogon显示图形化登陆界面,也就是输入框,接受域名,用户名、密码后交给lsass进程,将明文密码加密成NTLM Hash,对SAM数据库比较认证,相同则认证成功。

winlogon.exe-->接收用户输入-->lsass.exe-->(认证)
Windows Logon Process(即winlogon.exe),是Windows NT户登陆程序,用于管理用户登录和退出。
LSASS用于微软Windows系统的安全机制,它用于本地安全和登陆策略。

认证分类

密钥

长期密钥:被长期密钥加密的数据不应该在网络上传输,因为有的密钥可能长时间内保持不变,比如密码

短期密钥:由于被长期密钥加密的数据包不能在网络上传送,所以需要使用另一种密钥来加密需要进行网络传输的数据。这种密钥只在一段时间内有效,即使加密过的数据包被黑客截获,等他把密钥计算出来的时候,这个密钥早就已经过期了。我们把这种密钥称为短期密钥。

NTLM认证

Client(客户端)、Server(服务端)

历史版本

NTLMv1:服务器通过发送一个8字节的随机数(挑战)来验证客户端,客户端返回两个24字节Hash进行计算并返回计算结果.

NTLMv2:它通过加强协议来抵御许多欺骗攻击,并增加服务器向客户端进行身份验证的能力,从而增强了NTLM的安全性。服务器通过发送一个16字节的HMAC-MD5随机数(挑战)来验证客户端。

PTH攻击方式

NTLM认证流程(工作组)

1.协商
  1. Clint向Server发送TYPE 1 Negotiate协商消息,确定协议版本
  2. 服务端接收到客户端发送过来的TYPE 1 消息,会读取其中的内容,并从中选择出自己所能接受的服务内容,加密等级,安全服务等等
2.质询
  1. Client向Server发送明文用户名消息作为请求
  2. Server收到请求,验证是否存在Client发来的用户名,如果存在,传入NTLM SSP,得到NTLM_CHALLENGE消息。
  3. 将16位的随机数(Challenge)发送给Client,并使用SAM中查询用户名对应的NTLM Hash加密Challenge,生成Net-NTLM Hash 存放在内存中。
  4. Client使用发送的用户名对应的NTLM Hash加密Challenge,将结果(Response)发功给Server
3.验证

Server收到Client发送的Response,将接收的Response与Net-NTLM Hash进行比较,如果相同,则认证通过。

注:每次生成的16字节的Challenge都不同,保证的安全性。

NTLM认证流程(域)

1.用户通过输入Windows账号和密码登录客户端主机,客户端会缓存密码的哈希值NTLM-Hash。成果登录客户端的用户如果试图访问服务器资源,需要向对方发送一个请求,该请求利用NTLM SSP生成NTLM_NEGOTIATE消息(被称为TYPE 1消息,Negotiate 协商消息),并将TYPE 1消息发送给服务端中,该TYPE 1消息中包含一个以明文表示的用户名以及其他的一些协商信息(认证的主体,机器以及需要使用的安全服务等等信息)

2.服务端接收到客户端发送过来的TYPE 1消息,会读取其中的内容,并从中选择出自己所能接受的服务内容,加密等级,安全服务等等。然后传入NTLM SSP,得到NTLM_CHALLENGE消息(被称为TYPE 2消息,Challenge挑战消息),并将此TYPE 2消息发回给客户端。此TYPE 2消息中包含了一个由服务端生成的16位随机值,此随机值被称为Challenge,服务器将该Challenge保存起来。

3.客户端收到服务端返回的TYPE 2消息,读取出服务端所支持的内容,并取出其中的随机值Challenge,用缓存的密码的哈希值NTLM-Hash对其进行加密,得到Net NTLM-Hash(加密后的Challenge),并且将Net NTLM-Hash封装到NTLM_AUTH消息中(被称为TYPE 3消息,Authenticate认证消息)发往服务端。

4.服务器接收到客户端发送来的NTLM_AUTH的TYPE 3消息后,取出其中的Net NTLM-Hash值,并向DC域控(Domain Control)发送针对客户端的验证请求。

5.DC根据用户名获取该账号的密码哈希值NTLM-Hash,用密码哈希值NTLM-Hash 对原始的Challenge进行加密得到Net NTLM-Hash。如果加密后的Challenge和服务器发送的一致,则意味着用户拥有正确的密码,验证通过,否则验证失败。DC将验证结果发送给服务器。

6.服务器根据DC返回的结果,对客户端进行回复。

该请求主要包含以下三方面的内容:

SSP

SSPI(Security Support Provider Interface)

这是Windows 定义的一套接口,此接口定义了与安全有关的功能函数,用来获得验证、信息完整性、信息隐私等安全功能,就是定义了一套接口函数用来身份验证,签名等

SSP(Security Support Provider),DLL(具体实现)

NTLM SSP

Windows网络认证

Kerberos(地狱三头犬)

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

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

RFC 4129 V5

tips:
在域环境中,默认先使用kerberos进行认证,当使用kerberos认证出现错误时使用NTLM认证。

Kerberos会使用的端口

TCP和UDP的88(Kerbeeros)端口:身份验证和票证授予

TCP和UDP的464端口:经典Kerberos Kpaswd(密码重设)协议

LDAP:389.636

Kerberos认证名词

Kerberos认证流程

1.Client请求KDC的AS服务拿到TGT

2.Client拿着TGT请求KDC的TGS服务拿到ST

3.CLient拿着ST访问Server

六个流程

1.Client向KDC-AS申请TGT(1)

Client->KDC-AS(AS-REQ)

User->Timestamp、username、SPN krbtgt、User nonce->KDC

AS-REQ域用户枚举(漏洞)

2.Client向KDC-AS申请TGT(2)

KDC-AS->Client (AS-REP)

1.身份验证服务(KDC-AS)使用用户NTLM解密时间戳,解密成功(KDC-AS)检查用户的信息(登陆限制.组成员身份等)并创建TGT

2.向本地LSA(Local Security Authority)请求生成一个特殊的数据PAC(使用krbtgt密钥进行签名)KDC随机生成一个短期会话密钥(Session Key),此时AS向Client发送两条消息
(1)TGT(使用krbtgt NTLM Hash加密),10小时,内容包含:
User Name、Session Key
PAC(由krbtgt hash签名)
TGT的生命周期
(2)另一条消息T(C)(使用Client申请TGT时使用的用户名对应的NTLM Hash加密),内容包含:
TGT的生命周期、Session Key、A Nonce

SESSION KEY 离线爆破(漏洞)

3.Client拿着TGT 请求KDC 的TGS服务拿到ST(1)

Client->KDC-TGS(TGS_REQ)

Client:

使用NTLM Hash解密T(C)获得Session Key

1.Client 向TGS发送消息

(1)Authenticator(使用Session Key加密),内容包含:

(2)TGT(使用krbtgt hash加密)

(3)所需的SPN

(4)A Nonce

黄金票据(伪造TGT,前提是获取krbtgt账号的口令散列值)

Forwardabel TGT 或Unconstrained delegation(非受限委派或无限制委派)

Client->KDC-TGS

KDC:

1.KDC使用Ktbtgt NTLM Hash 对TGT解密,获取Client信息和Session Key

2.使用Session Key 对Client 发来对Authenticator信息解密,对比TGT信息,相同则认证通过

SPN LookUP

DC reveives TGS_REQ

1.成功找到,确认ST

2.找到多个匹配,返回错误

3.未找到,返回错误

4.Client拿着TGT 请求KDC的TGS服务拿到ST(2)

KDC-TGS->Client(TGS-REP)

KDC:
TGS生成Server Session Key

1.TGS生成Client需要访问服务的ST发送给Client,Ticket使用目标服务账户的NTLM Hash加密:

2.使用Session Key加密的Server Session Key,内容:

3.用户名

Client:

Client收到消息后,使用Session Key解密获得Server Session Key

KERBEROAST

5.Client拿着ST访问Server(1)

Client->Server(AP-REQ)

Client:

1.Client发送由Server Session Key加密的Authenticator信息和ST访问Server,内容:

2.ST(Server NTLM Hash加密)

白银票据(伪造TGS,前提是获取服务账号的口令散列值)

6.Client 拿着ST访问Server(2)

Server->Client(AP-REP)

Server:

1.Server使用NTLM Hash解密ST,获得Server Session Key,使用Server Session Key解密Authenticator信息,对比Authenticator信息中的Client信息和Ticket中的Client信息对比,将Authenticator信息的时间戳和Ticket的时间戳是否相同(误差2min)

2.Server使用Server Session Key加密Authenticator信息,内容包含:

Client:

1.Client使用缓存中的用Server Session Key解密Authenticator信息,得到访问该访问需要携带的ID和时间戳

2.认证完成,只需要使用申请的Service Ticket就可以正常访问服务

Golden Ticket与Silver Ticket区别

利用范围

加密方式

认证流程

UAC触发条件

触发验证

工作组:(触发ntlm验证,ntlm附在SMB中)dir \unc路径,如

dir \ \computer

域环境:触发kerbeeros(cifs)

dir \ \dc

解密Kerberos流量

https://wiki.wireshark.org/Kerberos

标签:协议,Hash,Windows,NTLM,Server,KDC,Client,认证
来源: https://www.cnblogs.com/cx111/p/13804887.html