Skip to main content

Windows 认证理论

我们在之前已经讨论了 NTLM 认证、Kerberos 认证、LSA 与 LSASS、SAM 等概念。在这小节,我们将对 Windows 认证理论做一个整合、归纳以及延伸。

Windows 认证类型与形式

发生在 Windows 环境中的认证过程,可以是本地认证,以及域认证。

本地认证

本地认证,例如是使用本地账户登陆主机。我们对于个人用的主机进行登陆往往就是本地登陆。本地用户只存在于特定系统,即只有该系统才知道有哪些本地用户,例如 SRV01\David。尽管系统与系统之间是互相独立的,但是不同的系统却可能有着相似甚至相同的帐号密码。例如 SRV01\DavidSRV02\David。我们之前知道了本地系统的信息存储于 SAM 之中,当用户以本地账户认证的时候,Windows 会根据 SAM 中的记录验证凭证。

image.png

域认证

域认证,例如是员工通过分发的域账户登陆工作站并访问内部资源。总之,域认证与本地认证是不同的机制。域用户和群组呈现在具体的 AD 域中,所有的域系统, (或在受信任的域中) 知道如何应对认证,它们会将认证的流程委派给域控制器。域用户和主机数据存储于 NTDS (NT 目录服务) 数据库中,当有用户尝试认证,域控制器则根据记录来验证凭证。

image.png

而认证的形式,可以笼统地分为物理认证以及远程认证。

物理认证

当用户在电脑面前,输入凭证并登陆,那么这是物理认证,适用于本地用户和域用户,只要目标系统知道认证的帐号。在 AD 中,默认情况下,任何域用户可以物理登陆任何域主机。但是,绝大多数情况下,我们没有机会在目标的环境中实现物理登陆。

远程认证

与物理认证有所不同的是,默认情况下需要特定权限才能进行远程登陆,例如属于本地管理员分组远程桌面用户分组。因此,我们应该关心的还是远程认证。

image.png

为了理解接下来的概念,我们需要对 Windows 认证机制很熟悉。


Windows 认证重要概念

认证包/安全支持提供程序 AP/SSP

虽然在前面的小节有讨论过了,让我们再回顾一下。AP/SSP 通过分析登陆数据来认证 Windows 用户,不同的 AP/SSP 对多种登陆过程以及认证协议提供支持。AP/SSP 以 DLL 形式存在,被 LSA 所加载和使用。常见的 AP/SSP 有 NTLM,Kerberos,WDigest,Credman 等。微软所提供的 AP 有 CSSPMicrosoft NegotiateMicrosoft NTLMMicrosoft KerberosMicrosoft Digest SSP,以及 Secure Channel

AP 提供了 Windows 充当客户端和认证服务器所需的逻辑。对于客户端,想要通过 Windows 认证连接到特定服务。对于服务器,想要让服务或应用程序支持 Windows 认证

SSP 接口

微软提供 SSP 接口以简单地将应用程序与认证系统无缝继承。


image.png

SSPI 的作用主要有这些:安全包管理凭证管理安全上下文管理消息支持

 

交互式登陆 vs 非交互式登陆

本地认证与域认证、物理认证与远程认证,这样的分类还不够。认证还有交互式非交互式之分。

交互式登陆,通常需要指定明文凭证,例如通过 Windows 的登陆页面进行认证。最重要的一点是用户凭证会缓存在 LSA 进程的内存中,为各个 AP 做准备。缓存的凭证还能让 Windows 给用户提供 SSO 体验。

image.png

 

image.png

而非交互式认证,应用程序代表用户使用缓存的凭证,也就是非交互式认证只应在交互式认证之后发生,也就是缓存凭证可用时。一些应用通过 SSPI 来实现这些认证。

image.png

image.png

 

登陆会话

登陆会话会在成功的认证之后创建,无论是物理认证、远程认证、域认证、本地认证、交互式登陆还是非交互式登陆。AP 缓存的凭证绑定在了登陆会话上。而在用户登出后结束。

当认证成功时,被选中的 AP 将执行这两个重要任务:创建一个新的登陆会话,以及向 LSA 提供认证用户的安全信息

image.png

LSA 使用该信息创建访问令牌来代表用户在系统中的的安全上下文

image.png

通常来说,登陆会话通常在交互式认证之后存在缓存的凭证,而非交互式的认证普遍会导致不缓存凭证的登陆会话。

 

 

登陆类型

 

 

令牌


模仿