Windows之NTLM认证


Windows之NTLM认证

在允许的环境下,Kerberos是首选的认证方式。在这之前,Windows主要采用另一种认证协议——NTLM(NT Lan Manager)。NTLM使用在Windows NT和Windows 2000 Server(or later)工作组环境中(Kerberos用在域模式下)。在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。

NTLM认证主要有本地认证网络认证两种方式

本地认证

SAM文件

Windows本地登陆时用户密码存储在SAM文件中,可以把它当作一个存储密码的数据库,所有的操作都在本地进行的。它将用户输入的密码转换为哈希值,然后与SAM中的哈希值进行比较。

SAM文件保存在

C:\Windows\system32\config\SAM

SAM有两种加密算法,也就是NTLM和LM。

NTLM Hash

NTLM Hash的前身是LMHash,目前基本淘汰,但是还是存在。NTLM Hash是支持Net NTLM认证协议及本地认证过程中的一个重要参与物,其长度为32位,由数字与字母组成,

加密算法如下:

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

admin -> hex(16进制编码) = 61646d696e
61646d696e -> Unicode = 610064006d0069006e00
610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634

本地认证流程

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

  1. 当刚开机、注销等操作后,winlogon.exe 进程会显示一个登录界面要求输入用户名和密码。
  2. 输入用户名和密码后,会被 winlogon.exe 获取,然后将其发送给 lsass.exe 进程。
  3. lsass.exe 将明文密码计算得到 NT Hash(不考虑LM)。
  4. 之后会将用户名和计算得到的 NT Hash 拿到 SAM 数据库去查找比对。

所以,Mimikatz模块读取 lsass.exe 进程可以能获得已登录用户的 NTLM hash

  • Winlogon.exe,是Windows NT 用户登陆程序,用于管理用户登录和退出。
  • lsass.exe 用于微软 Windows 系统的安全机制。用于本地安全和登陆策略。

网络认证

Windows网络认证常用的有两种:Kerberos和NTLM

NTLM网络认证采用挑战/响应(Challenge/Response)的消息交换模式,流程如下:

Net-NTLM hash

  1. 客户端向服务器发送一个请求,请求中包含明文的登录用户名。服务器会提前存储登录用户名和对应的密码 hash

  2. 服务器接收到请求后,生成一个16位的随机数Challenge,明文发送回客户端。

  3. 客户端接收到 Challenge 后,使用登录用户的密码 hash 对 Challenge 加密,获得 Challenge2,将 Challenge2 发送给服务器

  4. 服务器接收客户端的Challenge2,会向域控发送针对客户端的验证请求

    发送的内容有:用户名、Challenge、Challenge2

5.DC根据用户名获取该帐号的密码哈希值,对原始的Challenge进行加密。如果加密后的Challenge和服务器发送的一致,则意味着用户拥有正确的密码,验证通过,否则验证失败。DC将验证结果发给服务器,并最终反馈给客户端。