windows认证原理-ntlm认证

本地认证流程

    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系统的安全机制,它用于本地安全和登陆策略
操作系统的密码存储在:%SystemRoot%\system32\config\sam

 

 

认证分类

账号密码认证:通过向服务端发送账号密码来证明自己的身份(在这里提一嘴,公有云上的账号密码认证叫做ram认证)

挑战认证(ntml认证):通过向服务端发送一段计算结果来证明自己的身份

kerberos认证:通过向服务端发送一张票来证明自己

 

ntlm认证(工作组-比较简单)

client(客户端),sever(服务端)

这时候我们的密码存储在sever上:%SystemRoot%\system32\config\sam

 

历史版本

ntllmv1:服务器通过发送一个8字节的随机数(挑战(challenge))来验证客户端,客户端返回两个24字节hash进行计算并返回计算的结果

ntlmv2:它通过加强协议来抵御许多的欺骗攻击,并增加服务器向客户端进行身份验证的能力,从而增强了ntlm的安全性。服务器通过发送一个16字节的hamac-md5随机数(挑战(challenge))来验证客户端

 

ntlm认证(域)

client(客户端),sever(服务端),dc(域控)

这时候我们的密码存储在域控上:ntds.dit
第一步,首先在client输入username,password和domain,然后client会把password hash后的值先缓存到本地
第二步,之后,client把username的明文发送给server(DC)
第三步,DC会生成一个16字节的随机数,即challenge(挑战码),再传回给client
第四步,当client收到challenge以后,会先复制一份出来,然后和缓存中的密码hash再一同混合hash一次,混合后的值称为response,之后client再将challenge,response及username一并都传给server
第五步,server端在收到client传过来的这三个值以后会把它们都转发给DC
第六步,当DC接到过来的这三个值的以后,会根据username到域控的账号数据库(ntds.dit)里面找到该username对应的hash,然后把这个hash拿出来和传过来的challenge值再混合hash
第七步,将(6)中混合后的hash值跟传来的response进行比较,相同则认证成功,反之,则失败,当然,如果是本地登录,所有验证肯定也全部都直接在本地进行了

 

你可能感兴趣的:(windows认证原理-ntlm认证)