天天看点

NTLM认证原理及其过程

windows认证协议主要有以下两种:

  1. 基于ntlm的认证方式,主要用在早期的windows工作组环境中,认证的过程也相对比较简单、
  2. 另一种是基于Kerberos的认证方式,主要用在域环境中

NTLM认证

NTLM认证原理及其过程
NTLM认证原理及其过程

正在上传…重新上传取消

NTLM认证原理及其过程

以下步骤刻画了 NTLM 非交互式认证过程, 第一步中提供了用户的 NTLM 认证信息,该步是用户交互式认证(Logon)过程的一部分。

  1. (交互式登录到某客户机)用户使用:域名、用户名、密码,登陆到某台客户端。客户端计算并存储用户密码的加密散列值(Hash),然后将真实的密码丢掉(即不保存用户真实的密码)
  2. 客户端将用户名以纯文本的方式发送到要访问的服务器
  3. 服务器产生一个 16 字节的随机数并将该随机数发送给客户端,该随机数通常称为:挑战(Challenge)
  4. 客户端使用用户密码的散列值加密服务器发送过来的 Challenge,并将结果发回给服务器, 该步骤通常称为:应答 (Response)
  5. 服务器将下面三项内容发送到域控制器 (Domain Controller)   
  • 用户名
  • 发送给客户端的 Challenge
  • 从客户端收到的 Response

      7.域控制器使用 用户名 从安全账号管理数据库 (Security Account Manager database)中获得用户密码的散列值, 并使用获得的密码散列值来加密 Challenge

      8.域控制器比较步骤(6)中计算得到的加密后的 Challenge值与步骤(4)中客户端加密得到的 Response,如果两者一致,则认证通过

NTLM是一种基于挑战(challenge)/响应(response)消息交互模式的认证过程,从整个认证过程来看,安全确实不怎么到位,也就是说入侵者只需要拿到一个系统管理员的hash,直接给dc认证就好了,反正账户名和域名都知道,早期的pass the hash (psexec)确实就是通过这种方式来进行的,如果本地管理员的账号密码相同,其实不用密码一样可以被认证,我们所要做的就是不断通过这种方式来尝试拓展内网的其他机器,直到控制整个域,但后来的kb2871997,似乎改变了一些现状,但也可能只是似乎

总结:

  1. 用户登录客户端电脑
  2. (type 1)客户端向服务器发送type 1(协商)消息,它主要包含客户端支持和服务器请求的功能列表。
  3. (type 2)服务器用type 2消息(质询)进行响应,这包含服务器支持和同意的功能列表。但是,最重要的是,它包含服务器产生的Challenge。
  4. (type 3)客户端用type 3消息(身份验证)回复质询。用户接收到步骤3中的challenge之后,使用用户hash与challenge进行加密运算得到response,将response,username,challeng发给服务器。消息中的response是最关键的部分,因为它们向服务器证明客户端用户已经知道帐户密码。
  5. 服务器拿到type 3之后,使用challenge和用户hash进行加密得到response2与type 3发来的response进行比较。如果用户hash是存储在域控里面的话,那么没有用户hash,也就没办法计算response2。也就没法验证。这个时候用户服务器就会通过netlogon协议联系域控,建立一个安全通道,然后将type 1,type 2,type3 全部发给域控(这个过程也叫作Pass Through Authentication认证流程)
  6. 域控使用challenge和用户hash进行加密得到response2,与type 3的response进行比较

参考:https://klionsec.github.io/2016/08/10/ntlm-kerberos/

https://blog.csdn.net/qq_26886929/article/details/53905654