# 本地用户认证

Windows 在进行本地登录认证时操作系统会使用用户输入的密码作为凭证去与系统中的密码进行对比验证。通过 winlogon.exe 接收用户输入传递至 lsass.exe 进行认证。

winlogon.exe 用于在用户注销、重启、锁屏后显示登录界面。 lsass.exe 用于将明文密码变成 NTLM Hash 的形式与 SAM 数据库比较认证。

# SAM

安全帐户管理器 (Security Accounts Manager,SAM) 是 Windows 操作系统管理用户帐户的安全所使用的一种机制。用来存储 Windows 操作系统密码的数据库文件为了避免明文密码泄漏 SAM 文件中保存的是明文密码在经过一系列算法处理过的 Hash 值被保存的 Hash 分为 LM Hash、NTLM Hash。当用户进行身份认证时会将输入的 Hash 值与 SAM 文件中保存的 Hash 值进行对比。

SAM 文件保存于 %SystemRoot%\system32\config\sam 中,在注册表中保存在 HKEY_LOCAL_MACHINE\SAM\SAMHKEY_LOCAL_MACHINE\SECURITY\SAM 。 在正常情况下 SAM 文件处于锁定状态不可直接访问、复制、移动仅有 system 用户权限才可以读写该文件。

# 密码破解

  • 通过物理接触主机、启动其他操作系统来获取 Windows 分区上的 %SystemRoot%\system32\config\sam 文件
  • 获取 %SystemRoot%\repair\sam._ 文件。
  • 使用工具从注册表中导出 SAM 散列值
  • 从网络中嗅探分析 SMB 报文,从中获取密码散列

# SPNEGO

SPNEGO (SPNEGO: Simple and Protected GSS-API Negotiation) 是微软提供的一种使用 GSS-API 认证机制的安全协议,用于使 Webserver 共享 Windows Credentials,它扩展了 Kerberos。