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系统的安全机制,它用于本地安全和登陆策略。
认证分类
- 账号密码认证
通过向服务端发送“账号密码”来证明自己的身份 - 挑战认证
通过向服务端发送“一段计算结果”来证明自己的身份 - Kerberos认证
通过向服务端发送一张“票”,来证明自己的身份
密钥
长期密钥:被长期密钥加密的数据不应该在网络上传输,因为有的密钥可能长时间内保持不变,比如密码
短期密钥:由于被长期密钥加密的数据包不能在网络上传送,所以需要使用另一种密钥来加密需要进行网络传输的数据。这种密钥只在一段时间内有效,即使加密过的数据包被黑客截获,等他把密钥计算出来的时候,这个密钥早就已经过期了。我们把这种密钥称为短期密钥。
NTLM认证
Client(客户端)、Server(服务端)
历史版本
NTLMv1:服务器通过发送一个8字节的随机数(挑战)来验证客户端,客户端返回两个24字节Hash进行计算并返回计算结果.
NTLMv2:它通过加强协议来抵御许多欺骗攻击,并增加服务器向客户端进行身份验证的能力,从而增强了NTLM的安全性。服务器通过发送一个16字节的HMAC-MD5随机数(挑战)来验证客户端。
PTH攻击方式
NTLM认证流程(工作组)
1.协商
- Clint向Server发送TYPE 1 Negotiate协商消息,确定协议版本
- 服务端接收到客户端发送过来的TYPE 1 消息,会读取其中的内容,并从中选择出自己所能接受的服务内容,加密等级,安全服务等等
2.质询
- Client向Server发送明文用户名消息作为请求
- Server收到请求,验证是否存在Client发来的用户名,如果存在,传入NTLM SSP,得到NTLM_CHALLENGE消息。
- 将16位的随机数(Challenge)发送给Client,并使用SAM中查询用户名对应的NTLM Hash加密Challenge,生成Net-NTLM Hash 存放在内存中。
- 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返回的结果,对客户端进行回复。
该请求主要包含以下三方面的内容:
- 客户端用户名
- 原始的Challenge
- 加密后的Challenge(也就是Net NTLM-Hash)
SSP
- 安全支持提供程序(SSP)
- 安全支持提供程序接口(SSPI)
SSPI(Security Support Provider Interface)
这是Windows 定义的一套接口,此接口定义了与安全有关的功能函数,用来获得验证、信息完整性、信息隐私等安全功能,就是定义了一套接口函数用来身份验证,签名等
SSP(Security Support Provider),DLL(具体实现)
- Kerbeeros Security Support Provider
- NTLM Security Support Provider
- Digest Security Support Provider
- Negotiate Security Support Provider
- Schannel Security Support Provider
- Credential Security Support Provider
- Negotiate Extensions Security Support Provider
- PKU2U Security Support Provider
NTLM SSP
- NTLMSSP(安全支持提供程序)是安全支持提供程序接口(SSPI)使用的二进制消息协议
- NTLMSSP用在CIFS、HTTP协商身份验证(IIS)、MSRPC
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认证名词
- AS:身份认证服务(验证Client身份)
- KDC:密钥分发中心(域内最重要的服务器,域控制器)
- TGT:票据中心用户信授予的票据(访问TGS服务的票)
- TGS:票据授权服务
- ST:访问服务的票据
- Krbtgt:每个域中都有krbtgt账户,此账户是KDC的服务账户用来创建TGT
- Principal:认证主体
- PAC:特权属性证书(用户的SID,用户所在的组)
- SPN:服务主体名称
- Session Key(临时会话密钥a,只有Client和TGS知道,在Kerberos认证中至关重要)
- Server Session Key(临时会话密钥b,只有Client和Service知道,在Kerberos中至关重要)
Kerberos认证流程
- Client(客户端)
- Server(服务端)
- KDC(也就是参与认证的域控制器)
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)
- 加密时间戳,防止重放攻击,+/- five minutes(Client NTLM HASH 加密)
- Client Name(user's username)
- Service Name(krbtgt service)
- A Nonce(generated by the user)
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加密),内容包含:
- Client Name
- timestamp(+/- five minutes)
(2)TGT(使用krbtgt hash加密)
- Session Key
(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加密:
- Client name
- Server Session Key
- PAC(krbtgt hash签名)
- TGS生命周期
2.使用Session Key加密的Server Session Key,内容:
- A Nonce
- TGS生命周期
- 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,内容:
- ST
- Timestamp
- Client Name
2.ST(Server NTLM Hash加密)
- Server Session Key
- Client Name
白银票据(伪造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信息,内容包含:
- ID
- 时间戳
Client:
1.Client使用缓存中的用Server Session Key解密Authenticator信息,得到访问该访问需要携带的ID和时间戳
2.认证完成,只需要使用申请的Service Ticket就可以正常访问服务
Golden Ticket与Silver Ticket区别
利用范围
- 金票:伪造TGT、获取任意Kerberos权限
- 银票:伪造TGS,获取牟定服务权限
加密方式
- 金票:使用krbtgt NTLM Hash加密
- 银票:服务账号(计算机账户)NTLM Hash加密
认证流程
- 金票:同KDC交互
- 银票:不同KDC交互
UAC触发条件
- 必须在Administrators组才受UAC限制
- 非RID为500
触发验证
工作组:(触发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