Windows认证机制剖析:本地,工作组,域环境。
本地认证(User Login)
概念
在本地登录Windows的情况下,操作系统会使用用户输入的密码作为凭证去与系统中的密码进行验证,操作系统中的密码存储在
1 |
%SystemRoot%\system32\config\sam |
登录系统的时候,系统会自动地读取SAM文件中的“密码”与我们输入的“密码”进行比对,如果相同,证明认证成功!
这个SAM文件中保留了计算机本地所有用户的凭证信息,可以理解为是一个数据库。
※注意:Windows本身不保存明文密码,只保留密码的Hash。
NTLM Hash的产生
NTLM Hash的前身是LM Hash,由于存在安全缺陷已经被淘汰,无需做过多的了解,知道有这个东西即可
假设我的密码是admin,那么操作系统会将admin转换为十六进制,经过Unicode转换后,再调用MD4加密算法加密,这个加密结果的十六进制就是NTLM Hash。
1 |
admin -> hex(16进制编码) = 61646d696e |
本地认证流程
1 |
winlogon.exe -> 接收用户输入 -> lsass.exe -> (认证) |
- Windows Logon Process(即 winlogon.exe),是Windows NT 用户登 陆程序,用于管理用户登录和退出。
- LSASS用于微软Windows系统的安全机 制。它用于本地安全和登陆策略。
网络认证(Net NTLM)
工作组环境和域环境下Net NTLM认证过程因为有DC(域控制器)的参与流程略有差异,不过不影响我们进行哈希传递攻击,这里分开讲一下。
NTLM 协议概念
这个协议只支持Windows
NTLM是一种网络认证协议,全称是:NT LAN Manager
,它是基于挑战(Challenge)/响应(Response)认证机制的一种认证模式。
NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议,消息的传输依赖于使用NTLM的上层协议,比如SMB
,LDAP
,HTTP
等。
工作组
NTLM协议认证过程
-
协商:主要用于确认双方协议版本,NTLM存在V1和V2两个版本,具体区别就是加密方式不同,这个一般不用管。
-
质询:就是挑战(Challenge)/响应(Response)认证机制起作用的范畴,也是认证机制的核心。
-
验证:验证主要是在质询完成后验证结果,是认证的最后一步。
协商
质询
- 1.
Client
向Server
发送用户信息(用户名)请求。 - 2.
Server
收到用户信息后判断该本地账户列表是否存在(不存在就返回认证失败),存在则生成一个16位的随机数(Challenge
), 然后使用登录用户名对应的NTLM Hash
加密Challenge
(16位随机字符), 生成一个Challenge1
(Net-NTLM Hash
)存在内存中。同时,将Challenge
(16位随机字符)发送给Client
。 - 3.
Client
接受到服务器发送的Challenge
后,使用将要登录到账户对应的NTLM Hash
加密Challenge
生成Response
(Net-NTLM Hash
),然后将Response
发送至Server
。
这里引入了Net NTLM Hash:经过NTLM Hash加密Challenge的结果在网络协议中称之为Net NTLM Hash(不能直接用来进行哈希传递攻击,但可以通过暴力破解来获取明文密码)。
验证
Server
收到Client
发送的Response
(Net-NTLM Hash
)后,与之前保存在内存中的Challenge1
(Net-NTLM Hash
)比较,如果相等则认证通过。
现在再来看一下这个认证过程,是不是清晰了很多
域环境
NTLM协议认证过程
域环境下Net NTLM认证过程因为有DC(域控制器)的参与工作组下的流程略有差异。
①用户登录客户端电脑。
②Client
向Server
发送协商消息,它主要包含客户端支持和服务器请求的功能列表。
③Server
用质询消息(Challenge)进行响应,这包含服务器支持和同意的功能列表。但是最重要的是,它包含Server
产生的Challenge。
④Client
用身份验证消息(Response)回复质询。用户接收到步骤③中的Challenge之后,使用用户hash与challenge进行加密运算得到Response,将response
,username
,challeng
发给Server
。消息中的response
(Net-NTLM Hash)是最关键的部分,因为它们向服务器证明客户端用户已经知道帐户密码。
⑤Server
拿到身份验证消息(Response)后,使用challenge和用户hash进行加密得到response2与步骤③发来的response进行比较。
这时候,如果认证用户hash是存储在域控里面的话,那么本地没有认证用户hash,也就没办法计算response2,所以也就没法验证完成步骤⑤。所以Server
就会通过netlogon协议
联系域控,建立一个安全通道,然后将 协商消息,质询消息(Challenge),身份验证消息(Response) 全部发给域控(这个过程也叫作Pass Through Authentication
认证流程)。
⑥域控使用challenge和认证用户的hash进行加密得到response2,与type 3的response进行比较,判断是否一致。
⑦完成认证过程。
参考文章
https://daiker.gitbook.io/windows-protocol/ntlm-pian/4
https://payloads.online/archivers/2018-11-30/1/
- source:se7ensec.cn
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论