Windows认证体系—NTLM认证

NTLM Hash与 NTLM的关系、NTLM网络认证流程

关键词

  • NTLM Hash
  • NTLM
  • LSASS
  • Net-NTLM hash

关键词解释:

  • NTLM Hash:存储在SAM数据库NTDS数据库中对密码进行 Hash摘要计算后的结果
  • Net-NTLM hash:通常是指网络环境下 NTLM认证中的 Hash (下有说明)
  • NTLM:除 Kerberos之外的一种网络认证协议,只支持 Windows
  • LSASS:Windows系统的安全机制(系统进程)。用于本地安全和登陆策略

本地认证


Windows不存储用户的明文密码,它会将用户的明文密码经过加密后存储在 SAM (Security Account Manager Database,安全账号管理数据库)中。

SAM文件的路径是 %SystemRoot%\system32\config\sam

在进行本地认证的过程中,当用户登录时,系统将用户输入的明文密码加密成 NTLM Hash*,与 SAM数据库中的 *NTLM Hash 进行比较,从而实现认证

1
winlogon.exe -> 接收用户输入 -> lsass.exe -> (认证)

首先,用户注销、重启、锁屏后,操作系统会让 winlogon显示登录界面,也就是输入框,接收输入后,将密码交给 lsass进程,这个进程中会存一份明文密码,将明文密码加密成 NTLM Hash,对比 SAM数据库中的 Hash进行验证


NTLM Hash


Hash,一种将任意长度的消息压缩到某一固定长度的消息摘要的函数 。—— 度娘百科

通常意义上的 NTLM Hash指存储在 SAM数据库NTDS数据库中对密码进行 Hash摘要计算后的结果,这类 Hash可以直接用于 PTH,并且通常存在于 LSASS进程中,便于 SSP(NTLM 安全支持提供程序)使用


NTLM Hash的生成


  • 用户密码:susi2001
  • 首先,密码经过十六进制转为 7375736932303031
  • 将十六进制结果转为 Unicode格式 73007500730069003200300030003100
  • 以 Hex(16进制)数据作 MD4加密 ed3202726368f8e9fd23e78fbfac8c13

MD4加密使用 HashCalc


NTLM 和 NTLM Hash


NTLM 是一种网络认证协议,与 NTLM Hash的关系就是:NTLM网络认证协议是以 NTLM Hash 作为根本凭证进行认证的协议


NTLM网络认证机制


NTLM是一种基于质询/应答 (Challenge/Response )消息交换模式的认证机制,常用于 工作组域环境登录场景的身份认证


NTLM 认证方式


  • 交互式认证 :使用域账号登录到客户端;涉及两部分(客户端、域控)
  • 非交互式认证 :在已经登陆 的客户端上使用 SSO 的方式访问一台服务器;涉及三部分(客户端、域控、服务器)
1
2
3
4
5
# 非交互式场景

net use Z: \\10.0.1.102\vefs "password" /user:domain\xiaoming
# or
net use Z: \\10.0.1.102\vefs "password" /user:xiaoming

认证流程


NTLM协议的认证过程有三步:

  • 协商:主要用于确认双方协议版本(NTLMv1、NTLMv2等)
  • 质询:质询/应答 (Challenge/Response)模式,用于消息交换
  • 验证:验证身份合法性,通常由 Server端或 DC完成这个过程

大致流程如下:

  • 使用用户名和密码尝试登录客户端
  • 客户端对密码进行哈希处理并缓存密码 hash,丢弃实际的明文密码(不存储),然后将用户名发送到服务器,发起认证请求
  • 服务器生成一个 16字节的随机数,称为 质询 (Challenge) 或随机数 (nonce.aspx),并发送给客户端
  • 客户端使用缓存的 用户密码的 Hash 对此 Challenge 进行加密,加密结果为 Response(暂且叫做Challenge1),然后将结果发送给服务器
  • 服务器发送三项数据给域控制器:
    • User name
    • 发送给客户端的 Challenge(已加密)
    • 从客户端接收到的 Response
  • 域控制器使用 User name从 AD中检索该用户密码的 NTLM Hash,并使用此 NTLM Hash来加密 Challenge ,然后把这个值和客户端计算的响应值(Challenge1)进行比较。如果它们相同,则验证成功

经过 NTLM Hash加密 Challenge的结果在网络协议中称之为 Net NTLM Hash

在以上流程中,用户的登录密码 Hash 即为 NTLM Hash,Response中则包含 Net-NTLM Hash


NTLM v2


NTLM version 2 (NTLMv2)是在 Windows NT 4.0 SP4中引入的(在 Windows 2000 中得到了本地支持),它通过加强协议来防止许多欺骗攻击,并增加服务器向客户机进行身份验证的能力,从而增强了 NTLM的安全性

NTLM v1NTLM v2 最显著的区别就是 Challenge加密算法 不同,共同点就是加密的原料都是 NTLM Hash

  • Challenge:
    • v1: 8-byte
    • v2:16-byte
  • Net NTLM Hash:
    • v1:DES
    • v2: HMAC-MD5
1
2
3
4
5
# NTLM

C = 8-byte server challenge, random
K1 | K2 | K3 = NTLM-Hash | 5-bytes-0
response = DES(K1,C) | DES(K2,C) | DES(K3,C)
1
2
3
4
5
6
7
8
9
# NTLM v2

SC = 8-byte server challenge, random
CC = 8-byte client challenge, random
CC* = (X, time, CC2, domain name)
v2-Hash = HMAC-MD5(NT-Hash, user name, domain name)
LMv2 = HMAC-MD5(v2-Hash, SC, CC)
NTv2 = HMAC-MD5(v2-Hash, SC, CC*)
response = LMv2 | CC | NTv2 | CC*

Ref