Windows认证机制学习

于 2021-12-09 发布

Kerberos协议非常复杂,学习时每篇文章都有不同之处,本篇文章查询了MSDN,尽量保证准确性,后续学习过程中如果发现内容有误会及时更正。

认证协议

LM

LAN Manager Challenge/Response 验证机制,简称LM。该方案比NTLM响应时间更早,安全性更低。

认证流程:

  1. A向B发起请求。
  2. B返回一个8字节的响应码。
  3. A将自己的LM Hash分成三部分,每组7字节,每组都使用响应码对其进行加密,然后发送给B。
  4. 然后B也执行和A相同的操作,不过LM Hash是储存在服务器中A的LM Hash。
  5. 两个LM-Hash进行比较,一致即认证成功。

NTLM

NTLM身份验证采用Challenge/Response机制,由协商、质询、身份验证三步组成。

域环境认证流程:

  1. 用户访问客户端计算机并提供域名、用户名和密码。客户端计算密码的加密哈希并丢弃实际密码。
  2. 客户端将用户名以明文形式发送到服务器。
  3. 服务器判断用户名是否存在,存在则生成一个16字节的随机数,称为Challenge或Nonce,并返回给客户端。
  4. 客户端使用用户密码的Hash对服务器返回的随机数进行加密,并将结果返回给服务器,被称为Response。
  5. 服务器向域控发送以下三项信息:
    • 用户名
    • 发送给客户端的Challenge
    • 从客户端收到的Response
  6. 域控使用用户名从安全账户管理器数据库中检索用户密码的Hash,并使用此Hash加密Challenge。
  7. 域控将加密后的Challenge与客户端计算出的Response进行比较,如果相同则认证成功。

Net-NTLMv1

服务器返回8位Challenge,Response加密算法3DES。

Net-NTLMv2

从Windows Vista起,默认使用Net-NTLMv2协议。 服务器返回16位Challenge,Response加密算法HMAC-MD5。

Kerberos

Kerberos协议构成:客户端、服务器、KDC(Key Distribution Center 密钥分发中心)

相关信息

角色 作用
Key Distributed Centser 密钥分发中心,包含AS和TGS两个服务
Authentication Service 身份验证服务,用于KDC对Client认证生成TGT
Ticket Granting Ticket 票据授予票据,用于向KDC获取服务票据的凭证
Ticket Granting Service 票据授予服务,用于KDC为Client生成ST
Active Directory 活动目录,用于存储用户、用户组、域相关的信息
Server Ticket 服务票据,也被称为 TGS Ticket,用于访问服务的凭证
Application Server 应用服务器,提供用户所需服务
krbtgt 密钥发行中心服务帐户,不可登陆,发放票据时会使用它的NTLM Hash

认证流程

AS_REQ

当域内某个客户端试图访问域内的某个服务,输入用户名密码后,客户端会向AS发送AS_REQ(身份验证服务请求):

用户名、请求的服务 请求凭据(使用用户密码Hash加密的时间戳)

AS_REP

KDC检查用户是否在本地数据库,存在则使用存储在本地的NTLM Hash解密凭据验证用户身份,如验证通过且时间戳在有效期内(5分钟),则返回AS_REP(身份验证服务回复):

用户名 TGT:用户名、会话密钥、TGT有效期、具有用户权限的PAC,使用krbtgt账户NTLM Hash加密 Session-Key: 使用用户的NTLM Hash加密

此时,用户拥有 TGT,可用于请求 TGS,然后访问服务。

TGS_REQ

客户端收到消息后,使用自己的NTLM Hash解密AS_REP返回的TGT,得到会话密钥。 然后向TGS发送请求TGS_REQ(票据授予服务请求):

TGT 请求服务的SPN Authenticator:使用会话密钥加密的用户名、时间戳等信息

TGS_REP

TGS收到TGS_REQ后,先在KDC中查找服务的SPN是否存在,如存在使用自己的TGS密钥解密TGS_REQ发送的TGT,得到会话密钥。 使用会话密钥解密TGS_REQ中的Authenticator,验证通过后向客户端发送TGS_REP(票据授予服务回复):

用户名 ST(Server Ticket):用户名、服务会话密钥、票据有效期等信息,使用请求服务的NTLM Hash加密 使用会话密钥加密的服务会话密钥

AP_REQ

客户端使用会话密钥解密TGS,得到服务会话密钥,将ST票据和服务会话密钥缓存到本地。当客户端需要访问某个服务端上的服务时,会向服务端发送AP_REQ(应用程序请求)。

Authenticator:使用服务会话密钥加密的时间戳等信息 ST

AP_REP(可选)

服务端使用自己的NTLM Hash解密ST,获取服务会话密钥、授权用户信息。 服务端使用服务会话密钥解密Authenticator等信息,与ST对比,通过验证后与客户端进行双向验证(此过程需要开启PAC验证服务,没有配置PAC可能会导致白银票据攻击):

双向验证过程:
1. 服务端验证客户端:
  i. 服务端发送PAC询问KDC用户有无访问权限。
  ii. KDC解密PAC通过SID判断用户组信息、权限等返回给服务端。
  iii. Server收到信息并与请求服务的ACL进行比较,决定是否提供服务。

2. 客户端验证服务端:
  i. 服务端发送Authenticator(使用服务会话密钥的时间戳)给客户端。
  ii. 客户端解密成功则证明验证服务会话密钥一致,双向验证通过。
  iii. 服务端开放服务,客户端访问服务。

加密方式

Windows只保存密码Hash值。
格式:Username:RID:LM-Hash:NTLM-Hash(LM-Hash从Windows Vista开始为空)

工作组环境用户信息保存在%SystemRoot%\System32\config\SAM
域环境用户信息保存在域控C:\Windows\NTDS\NTDS.dit

LM Hash

LM Hash从Windows Vista开始默认禁用。

启用方式:

本地安全策略 => 本地策略 => 安全选项,将不储存LAN管理器哈希值改为禁用。

加密过程:

  1. 用户的密码转换为大写,密码转换为16进制字符串,不足14字节将会用0来再后面补全。
  2. 密码的16进制字符串被分成两个7byte部分。每部分转换成比特流,并且长度位56bit,长度不足使用0在左边补齐长度。
  3. 再分7bit为一组,每组末尾加0,再组成一组。
  4. 上步骤得到的二组,分别作为key为KGS!@#$%进行DES加密。
  5. 将加密后的两组拼接在一起,得到最终LM Hash值。

缺点:

  1. 口令不区分大小写。
  2. 口令长度最多为14字节,超过14字节使用NTLM Hash。
  3. 如果没有超过7字节后面8字节是固定的(aad3b435b51404ee)。
  4. DES加密key固定(KGS!@#$%)。

NTLM Hash

NTLM Hash是支持Net NTLM认证协议及本地认证过程中的一个重要参与物,其长度为32位,由数字与字母组成。 可以从Windows系统中的SAM文件和域控的NTDS.dit文件中获得所有用户的Hash,通过Mimikatz读取lsass.exe进程能获得已登录用户的NTLM Hsash。

加密过程:

  1. 将用户密码转换为十六进制格式。
  2. 将十六进制格式的密码进行Unicode编码。
  3. 使用MD4摘要算法对Unicode编码数据进行Hash计算。

Net-NTLM Hash

指网络环境下的NTLM认证中的Hash,NTLM认证中的Response包含Net-NTLM Hash。 在NTLM协议中,NTLM响应分为NTLMv1,NTLMv2,NTLM session v2三种协议,不同协议使用不同格式的Challenge和加密算法。

Net-NTLMv1 Hash

格式:username::hostname:LM response:NTLM response:challenge

修改注册表启用:

reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t REG_DWORD /d 2 /f
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\ /v NtlmMinClientSec /t REG_DWORD /d 536870912 /f
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\ /v RestrictSendingNTLMTraffic /t REG_DWORD /d 0 /

8位Challenge,Response加密算法3DES。 这种方式相对脆弱,可以基于抓包工具和彩虹表爆破工具进行破解。

Net-NTLMv2 Hash

格式:username::domain:challenge:HMAC-MD5:blob

16位Challenge,Response加密算法HMAC-MD5。

参考链接

https://xz.aliyun.com/t/8187
https://xz.aliyun.com/t/10491
https://www.t00ls.cc/thread-63319-1-1.html
https://websec.readthedocs.io/zh/latest/auth/index.html
https://docs.microsoft.com/zh-cn/archive/blogs/apgceps/packerberos-2