Windows 认证
本地认证
本地认证是指用户通过在本地计算机上输入用户名和密码登录系统的过程。Windows 系统中常用的认证协议是 NTLM(NT LAN Manager),它基于挑战/响应机制,具有较高的安全性和广泛的应用场景。
本地认证流程
密码输入 用户在登录界面(由
winlogon.exe
提供)输入用户名和明文密码。密码传递
winlogon.exe
将用户输入的明文密码传递给本地安全认证子系统(lsass.exe
,Local Security Authority Subsystem Service)。密码处理
- 在 Windows Server 2008 R2 及更早版本中,
lsass.exe
会缓存明文密码(出于安全考虑,新版本已禁用此功能)。 lsass.exe
使用用户输入的明文密码生成 NTLM hash(一种基于 MD4 算法的单向加密哈希值)。
- 在 Windows Server 2008 R2 及更早版本中,
NTLM hash 比较
lsass.exe
从本地 SAM(Security Account Manager) 数据库中读取存储的该用户的 NTLM hash。- 将用户输入密码生成的 NTLM hash 与 SAM 数据库中的 NTLM hash 进行比较。
- 如果两者一致,用户登录成功;否则,登录失败并返回错误提示。
本地认证流程图
注意事项
- SAM 数据库存储在
%SystemRoot%\System32\config\SAM
文件中,仅系统进程和管理员可访问。 - 为了增强安全性,建议启用复杂密码策略并定期更新密码。
网络认证
网络认证用于在分布式环境中验证用户身份,例如通过 RDP(远程桌面协议) 或 SMB(服务器消息块) 协议访问远程 Windows 主机。
网络认证流程
用户名发送
客户端(PC1)向目标主机(PC2)发送用户名。
PC2 检查其 SAM 数据库中是否存在该用户:
- 如果用户不存在,直接返回登录失败。
- 如果用户存在,继续后续认证步骤。
挑战生成
- PC2 生成一个 16 字节的随机挑战(challenge)。
- PC2 从 SAM 数据库中读取该用户的 NTLM hash,并使用此 hash 对挑战进行加密,生成加密后的挑战(称为 challenge1)。
挑战发送
- PC2 将原始挑战(challenge)发送回 PC1。
响应生成
- PC1 使用用户输入密码生成的 NTLM hash,对收到的挑战(challenge)进行加密,生成一个 响应(response)。
- PC1 将该响应发送至 PC2。
响应验证
- PC2 比较 PC1 发送的响应(response)与本地生成的 challenge1。
- 如果两者一致,认证通过,允许登录;否则,认证失败。
网络认证流程图
注意事项
- NTLM 协议在网络认证中存在一定安全隐患(如中继攻击)。
- 网络认证需要确保客户端和目标主机之间的网络连接稳定。
域认证
简介
Windows 操作系统支持两种主要的网络环境:工作组环境 和 域环境。
- 工作组环境 工作组是一种对等的资源共享网络,适用于小型网络。每台主机独立管理自己的用户账户和权限,缺乏集中化管理,适合家庭或小型办公室。
- 域环境 域环境由 域控制器(Domain Controller, DC) 统一管理,适合中大型企业网络。域环境通过集中化管理和认证(如 Active Directory 和 Kerberos 协议)提供更高的安全性、扩展性和管理效率。
域环境中的关键名词
AD(Active Directory) 活动目录是 Windows 域网络的核心,负责存储和管理域内的用户、计算机、组和其他资源信息。它提供了一个集中化的身份认证和授权框架。
KDC(Key Distribution Center) 密钥分发中心是域环境中实现 Kerberos 认证的核心组件,包含以下两个子服务:
- AS(Authentication Service):认证服务,负责验证用户身份并颁发 TGT(Ticket Granting Ticket)。
- TGS(Ticket Granting Service):票据授予服务,负责根据 TGT 颁发访问特定服务的 服务票据(Service Ticket)。
DC(Domain Controller) 域控制器是运行 Active Directory 和 KDC 的服务器,负责处理域内的认证和授权请求。
Domain Computers 加入域的计算机,受到域控制器的统一管理和策略约束。
Domain Admins 组 域管理员用户组,包含具有域管理权限的用户(Domain Admin),可管理域内的所有资源。
Domain Users 普通域用户,权限受限,通常只能访问分配给他们的资源。
域认证(Kerberos 协议)
Kerberos 是一种基于票据的网络身份验证协议,广泛用于 Windows 域环境中。它通过对称密钥加密技术为客户端和服务器提供强身份验证。Kerberos 由 麻省理工学院 开发,并被许多商业产品采纳。
Kerberos 认证流程
用户认证(AS 认证)
客户端向 KDC 的认证服务(AS)发送用户凭据(通常为用户名和密码)。
AS 验证用户身份:
- 如果验证通过,AS 使用用户的密码加密生成一个 TGT(票据授予票据),并返回给客户端。
- 如果验证失败,返回错误信息。
票据请求(TGS 认证)
客户端使用 TGT 向 KDC 的票据授予服务(TGS)请求访问特定服务的票据。
TGS 验证 TGT 的有效性:
- 如果 TGT 有效,TGS 颁发一个 服务票据(Service Ticket),用于访问目标服务。
- 如果 TGT 无效,返回错误信息。
服务访问
客户端使用服务票据向目标服务(例如文件服务器、邮件服务器)发起请求。
目标服务验证服务票据:
- 如果票据有效,允许客户端访问服务。
- 如果票据无效,拒绝访问。
黄金票据与白银票据
黄金票据 (Golden Ticket) 是攻击者通过获取域控制器 (KDC) 的 KRBTGT 密钥 伪造的 TGT(票据授予票据)。它允许攻击者以任意身份(包括管理员身份)请求服务票据,从而绕过正常的身份验证流程。黄金票据的生成不需要与 TGS 交互,而是直接由攻击者构造,因此它通常是攻击的起点。
白银票据 (Silver Ticket) 是攻击者通过获取特定服务账户的密钥(例如服务密钥 Ks)伪造的服务票据。它不需要 TGT 或与 TGS 交互,直接用于访问特定服务。白银票据的生成通常依赖于攻击者已经掌握了服务的密钥(可能通过其他手段获得),因此它可以看作是黄金票据攻击之后的一个扩展步骤。
Kerberos 认证流程图
简易流程图:
流程图:
优点
- Kerberos 使用票据机制,减少了密码在网络中的传输,提高了安全性。
- 支持单点登录(SSO),用户只需登录一次即可访问多个服务。
- 票据有时效性(通常为 10 小时),过期后需重新认证,进一步增强安全性。
注意事项
- Kerberos 依赖于时间同步,客户端、KDC 和服务端的时间差不能超过 5 分钟(默认值)。
- KDC 是域环境中的单点故障,需确保其高可用性(如配置多个域控制器)。
- 黄金票据(Golden Ticket)攻击是 Kerberos 的潜在威胁,需加强对域控制器的保护(如限制 KRBTGT 账户访问)。