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 -> 认证
- 当刚开机、注销等操作后,winlogon.exe 进程会显示一个登录界面要求输入用户名和密码。
- 输入用户名和密码后,会被 winlogon.exe 获取,然后将其发送给 lsass.exe 进程。
- lsass.exe 将明文密码计算得到 NT Hash(不考虑LM)。
- 之后会将用户名和计算得到的 NT Hash 拿到 SAM 数据库去查找比对。
所以,Mimikatz模块读取 lsass.exe
进程可以能获得已登录用户的 NTLM hash
- Winlogon.exe,是Windows NT 用户登陆程序,用于管理用户登录和退出。
- lsass.exe 用于微软 Windows 系统的安全机制。用于本地安全和登陆策略。
网络认证
Windows网络认证常用的有两种:Kerberos和NTLM
NTLM网络认证采用挑战/响应(Challenge/Response)的消息交换模式,流程如下:
Net-NTLM hash
-
客户端向服务器发送一个请求,请求中包含明文的登录用户名。服务器会提前存储登录用户名和对应的密码 hash
-
服务器接收到请求后,生成一个16位的随机数Challenge,明文发送回客户端。
-
客户端接收到 Challenge 后,使用登录用户的密码 hash 对 Challenge 加密,获得 Challenge2,将 Challenge2 发送给服务器
-
服务器接收客户端的Challenge2,会向域控发送针对客户端的验证请求
发送的内容有:用户名、Challenge、Challenge2
5.DC根据用户名获取该帐号的密码哈希值,对原始的Challenge进行加密。如果加密后的Challenge和服务器发送的一致,则意味着用户拥有正确的密码,验证通过,否则验证失败。DC将验证结果发给服务器,并最终反馈给客户端。