本地认证

本地认证过程主要涉及SAM文件还有Lsass.exe进程。

SAM文件

SAM文件是Windows的用户账户数据库,所有用户的登录名和口令相关的信息都会保存在这个文件中。其格式通常为:administrator:LM-HASH:NTLM-HASH

Lsass.exe进程

  • Winlogon.exe:用户登录界面的管理进程,负责触发 lsass.exe 的认证流程。

  • 如过认证成功lsass.exe 会为用户创建访问令牌(Access Token)

访问令牌(Access Token),包含以下关键信息:

  • 安全标识符(SID):唯一标识用户账户和所属组。

  • 用户权限:如管理员权限、文件访问权限等。

  • 登录会话信息:如登录时间、认证类型(本地 / 域)。

认证流程

用户通过winLogon.exe来进行登录,通过winLogon.exe将登录凭证转递给Lsass.exe,Lsass.exe将登录凭证进行加密并跟本机的SAM文件的加密内容进行对比,如果加密后的登录凭证和SAM文件中的加密内容一致即认证成功便可登录系统。

LM-HASH加密

LM-HASH值介绍:

Windows操作系统通常使用两种方法对用户的明文密码进行加密处理。一部分为LM-HASH,另一部分为NTLM-HASH。在WIndows操作系统中,Hash的结构通常如下:

username:RID:LM-HASH:NTLM-HASH

LM HASH的全名为“LAN Manager Hash”,是微软为了提高Windows操作系统的安全性而采用的散列加密算法,其本质是DES加密,尽管LM HASH交为容易被破解,但是为了保证系统的兼容性,Windows只是将LM Hash进行禁用了(从Windows Vista和Windows Server2008版本开始,系统默认禁用了LM Hash)。LM HASH明文密码被限制在14位以内。如果LM Hash被禁用了,攻击者通过工具抓取的LM Hash通常为“aad3b435b51404eead3b435b51404ee”,即表示:表示 LM Hash 为空值或被禁用

LM-HASH加密步骤:

  1. 将明文口令转换为其大写形式,假设这里以明文Admin@123为例,转换大小写为ADMIN@123

  2. 将字符串大写后转为16进制字符串

  3. 密码不足14字节要用0补全

  4. 将上述编码分成两组7字节

  5. 将每一组7字节的十六进制转换为二进制,每7bit一组末尾加0,在转换为十六进制组成得到2组8字节的编码

  6. 将上述步骤得到的两组8字节编码,分别作为DES加密key为魔术字符串KGS!@#$%进行加密KGS!@#$%的16进制,然后按顺序拼接得到两个字符串。

NTLM-HASH加密

NTLM-HASH介绍:

NTLM Hash是微软为了在提高安全性的同时保证兼容性而设计的散列加密算法。NTLM Hash是基于MD4加密算法进行加密的。个人版从Windows vista以后,服务器版从Windows Server 2003以后,Windows操作系统的认证方法均为NTLM Hash。

NTLM-Hash加密步骤:

  1. 将口令转换为十六进制的格式

  2. 将16进制转换诚Unicode格式,即在每个字节之后添加0x00

  3. 对Unicode字符串作为MD4加密,生成32位的十六进制字符串

网络认证

NTLM 协议认证

  • 简介:NTLM(NT LAN Manager)是基于挑战 - 响应认证机制的协议,用于 Windows 网络认证 。在工作组环境中,当计算机间无法建立可信信托机构时,常采用此协议点对点建立访问链接。

  • 认证步骤

    1. 协商:客户端与服务端确定双方传输协议版本等信息。

    2. 质询:服务端收到客户端协商消息后,选择可接受服务、加密等级等内容,生成随机数 Challenge 发送给客户端。同时,服务端用查询到的用户 NTLM Hash 对 Challenge 加密,生成 Challenge1 并存储。

    3. 验证:客户端收到 Challenge 后,用自身账号的 NTLM Hash 加密 Challenge 生成 Response 发回服务端。服务端对比 Response 与本地 Challenge1,一致则认证成功。

  • 版本差异:NTLM v1 的 Challenge 为 8 位,采用 DES 加密算法;NTLM v2 的 Challenge 为 16 位,采用 HMAC - MD5 加密算法 ,v2 安全性更高。

NTLM协议认证实例:

现有两台主机分别位主机A和主机B,主机A如果想要访问主机B上的资源,就要像主机B发送一个存在于主机B上的一个用户,主机B接收以后会在本地进行验证,如果验证成功,才会允许主机A进行响应的访问。

挑战()响应()协议认证流程:

1、首先,Client会像Server发起请求连接协商一些相关东西

2、Server会将本地生成一个(16位或者8位)随机字符串,即Challenge,并将Challenge传递给Client。

3、当Client接收到Challenge时,将username的NTLM-hash对Challenge进行加密、和用户名、域名、机器名等相关信息,生成Response,并将Response发送给Server。

4、Server在收到Response后,将其和相同方式进行加密生成另一个Response,如果相同则验证成功,否则就认证失败。

Kerberos 协议认证

  • 简介:是一种可信的第三方认证服务协议,通过密钥系统为客户机 / 服务器应用程序提供认证服务 。常用于 Windows 域环境,需密钥分发中心(KDC,包含认证服务器 AS 和票据授予服务器 TGS )支持。

  • 认证流程

    1. 客户端向 KDC 发送包含用户名、主机 IP 和时间戳的明文请求。

    2. AS 在 Kerberos 认证数据库中查找用户名,存在则继续,否则认证失败。

    3. AS 返回响应,包括用 TGS 密码加密的票据授予票据(TGT )和用客户端密钥加密的含时间戳、TGS 信息、通信密钥(CT_SK )等内容。

    4. 客户端用自身密钥解密第二部分内容,对比时间戳,时间差合理则向 TGS 发送请求,请求包括用 CT_SK 加密的客户端信息、要访问的 Server 服务及 TGT。

    5. TGS 检查 Server 服务是否可被访问,用自身密钥解密 TGT,根据时间戳判断可靠性,再用 CT_SK 解密客户端加密信息,对比用户信息确认客户端身份。

    6. TGS 返回响应给客户端,包含用 Server 密码加密的 Server Ticket(ST )和用 CT_SK 加密的含客户端与服务端通信密钥(CS_SK )等内容。

    7. 客户端用 CS_SK 加密主机信息和时间戳,与 ST 一同发送给服务端。服务端用自身密钥解密 ST 获取 CS_SK,再用 CS_SK 解密客户端第一部分内容,核对信息完成认证。