Windows认证原理-本地/NTLM身份认证
0x00:简介
简述一下windows的几种认证,包括本地认证、NTLM认证(工作组)、NTLM认证(域)
认证分类可以分为:
账号密码认证:通过账号密码直接向服务器证明自己身份
挑战认证(NTLM)认证:通过向服务端发送一段计算结果来证明自己的身份
kerberos认证:通过向服务端发送一张票据来证明自己
0x01:本地认证流程
windows logon process(winlogon.exe),winlogon是负责处理安全相关的用户交互界面的组件。winlogon的工作包括加载其他用户身份的安全组件,提供图形化的登陆界面,以及创建用户会话。 lsass.exe(本地安全认证子系统服务)用于微软windows系统的安全机制。他负责windows系统的安全策略。在本地验证或者登陆的时候验证用户的身份,管理用户密码变更,并产生访问日志。用户注销,重启,锁屏后,操作系统会让winlogon显示图形化的登陆界面,也就是输入框,接受域名,用户名,密码后交给lsass进程,将明文密码加密成ntlm hash对sam数据库比较认证,相同则认证成功
流程:winlogon.exe -> 接受用户的输入 -> lsass.exe ->认证
windows logon process(winlogon.exe)是windows nt用户登录程序,用于管理用户的登录和退出。
lsass用于微软windows系统的安全机制,它用于本地安全和登陆策略
操作系统的密码存储在:C:\Windows\System32\config\sam
0x02:NTLM认证(工作组)
工作组中只有client (客户端)和 server (服务端)
此时密码储存在server上 C:\Windows\System32\config\sam
历史版本
ntllmv1:服务器通过发送一个8字节的随机数(挑战(challenge))来验证客户端,客户端返回两个24字节hash进行计算并返回计算的结果
ntlmv2:它通过加强协议来抵御许多的欺骗攻击,并增加服务器向客户端进行身份验证的能力,从而增强了ntlm的安全性。服务器通过发送一个16字节的hamac-md5随机数(挑战(challenge))来验证客户端
0x03:ntlm认证(域)
client(客户端),sever(服务端),dc(域控)
这时候我们的密码存储在域控上:C:\Windows\NTDS\ntds.dit
认证过程:
- 1,客户端首先在本地加密当前用户的密码成为密码散列
- 2,客户端向服务器发送自己的账号,这个账号是没有经过加密的,明文传输.
- 3,服务器端产生一个16位的随机数字发送给客户端,作为一个challenge(挑战)
- 4,客户端再用加密后的密码散列来加密这个challenge,然后把这个返回给服务器,作为response(响应)
- 5,服务器端将用户名,给客户端的challenge,客户端返回的response这三个东西发送给域控制器.
- 6,域控制器用这个用户名在SAM密码管理库中找到这个用户的密码散列,然后使用这个密码散列来加密chellenge
- 7,域控制器比较两次加密的challenge,如果一样,那么认证成功,反之,则认证失败.