Windows凭据
1.SSPI
SSPI(Security Support Provider Interface,安全支持提供程序接口)是Windows操作系统中用于执行各种安全相关操作的公用API.SSPI的功能比较全面,可以用来获得身份验证、信息完整性校验、信息隐私保护等集成的安全服务。它是众多安全支持提供程序的调用接口。
2.SSP
SSP(Security Support Provider,安全支持提供程序)是一个用于实现身份验证的DDL文件。当操作系统启动时,SSP会被加载到LSA(Local Security Authority,本地安全机构)中。SSP的主要作用是扩展Windows的身份安全验证功能。可以这样简单理解:SSP就是一个DLL文件,用来实现身份认证并维持系统权限。下面介绍一下Windows系统中的常见SSP类型。
3.常见SSP类型
1)NTLM:一种Windows网络认证协议,基于挑战/响应(Challenge/Response)验证
机制,用于对主机进行身份验证。
2)Kerberos:一种网络身份验证协议。作为一种可信任的第三方认证服务,它的主要
优势在于可以提供强大的加密和单点登录(SSO)机制。
3)Negotiate:用于在SSPI和其他SSP之间进行安全支撑的应用程序层。当某个应用程序调入 SSPI 以登录到网络时,该应用程序会指定一个SSP来处理请求。如果指定Kerberos或NTLM SSP,则Negotiate将会分析请求并选取最佳SSP,以便基于客户配置的安全策略处理请求。
4)安全通道:也称SChannel,它使用SSL/TLS记录来加密数据有效载荷,主要用于需要进行安全超文本传输协议(HTTP)通信的Web应用程序。
5)摘要身份验证:基于HTTP和SASL(简单认证与安全层)身份验证的 质询/响应 协议。
6)Cred SSP:用于传输安全凭据的网络协议,通常在RDP或WinRM远程管理中用于提供单点登录和网络级身份验证。
7)分布式密码验证(DPA):提供使用数字证书完成的互联网身份验证。
8)用户对用户的公开密钥加密技术(Public Key Cryptography User-to-User,PKU2U):在不隶属于域的系统之间提供使用数字证书的对等身份验证。
Windows访问控制模型
1.访问控制模型简介
访问控制模型(Access Control Model)是Windows操作系统中一个关于安全性的概念,由访问令牌和安全描述符两部分构成,其中:访问令牌(Access Token)由当前登录Windows账号的用户持有,它包含该账号的基础信息,如用户账户的标识和权限信息;安全描述符由要访问的对象持有,它包含当前对象的安全信息。
假设当用户登录时,操作系统会对用户的账户名和密码进行身份验证,则当登录成功时,系统会自动分配访问令牌。访问令牌包含安全标识符(SD),SD用于标识用户的账户及其所属的任何组账户。当我们创建一个进程,也就是访问一个资源(进程资源)的时候,访问令牌会被复制一份并交给进
程,进程根据它的创建者为它设置的安全描述符中的访问控制列表(ACL)来判断我们是否可以访问,是否有权限执行某步操作。
2.访问令牌
Windows的访问令牌分为两种类型 主令牌(Primary Token)和模拟令牌(Imperson-ation Token),它代表某种请求或登录机制的凭据,使用户可以在短时间内执行某种身份认证或权限操作的验证信。Windows系统中每个用户登录账号都生成一个对应的访问令牌。当用户使用账号登录操作系统时,系统会将所登录的账号与安全数据库(SAM)中存储的数据进行对比验证,验证成功后才会生成访问令牌。如果我们打开的进程或线程正在与具有安全描述符的对象交互,则系统将会携带今牌进行访问,以此来表示用户身份。
创建进程时,Windows操作系统的内核都会为进程创建并分配一个主令牌。每个进程都含有一个主令牌,主令牌描述了进程相关用户账号的安全上下文。
同时,一个线程可以模拟一个客户端账号,允许此线程在与安全对象交互时使用客户端的安全上下文。一个正模拟客户端的线程拥有一个主令牌和一个模拟令牌。(主令牌是与进程相关的,而模拟令牌是与线程相关的。)
(1)主令牌
主令牌也叫授权令牌(Delegation Token),是一种认证机制,用于交互式登录,是为了减少不必要的认证工作而出现的,由Windows操作系统的内核创建并分配给进程的默认访问令牌。主令牌描述了登录进程返回的安全标识SID,与当前进程相关的用户账户的安全组的权限列表,代表系统可以使用令牌控制用户可以访问哪些安全对象、执行哪些相关系统操作。
主令牌通常用于本地登录及通过RDP远程登录的场景。
一个完整的主令牌包含如下内容:
- 当前账号SID
- 当前账户所处安全组的SID
- 该令牌的来源,即它是由哪个进程创建的
- 所有者的SID
- 主要组的SID
- 访问控制列表
- 用户或组拥有的权限列表
- 模拟级别
- 统计信息
- 限制SID
(2)模拟令牌
在默认情况下,当线程开启的时候,其所在进程的主令牌会自动附加到该线程上作为他的安全上下文。而线程可以在另一个非主令牌的访问令牌下执行,这个令牌被称为模拟令牌,通常会用于客户端/服务器之间的通信。
假设在文件共享的时候,服务器需要访问令牌来验证用户的权限,但它无法直接获取用户的访问令牌(该令牌是锁死在内存中的,无法访问),所以它就需要生成一个模拟令牌。
3.安全标识符
在Windows操作系统中,通常使用安全标识符(Security IDentifier,SID)来标识在系统中执行操作的实体。
SID是一个唯一的字符串,可以代表用户、用户组、域、域组、域成员等角色身份。
SID组成部分
-
前缀:每个SID以"S-"开头,表示这是一个安全标识符。
-
版本号:紧随"S-"的是版本号,通常为 "1" 表示当前版本的Windows NT SID格式。
-
认证机构(Authority):接下来的一对数字表示颁发此SID的认证机构。对于Windows NT系统,这个通常是固定的"S-1-5",代表该SID是由Windows NT或其后继者(如Windows 2000, Windows XP, Windows Server 2003及以后版本)颁发的。
-
子颁发机构(Sub-authority values):紧跟在认证机构后的是一系列用连字符分隔的数值,这些是子颁发机构标识符,用于进一步区分不同的安全主体类型和实例。例如,在S-1-5之后可能跟着一串序列号,如“21”,然后是更多的子颁发机构编号。
- 对于用户账户、组以及其他内置安全主体,这些子颁发机构值联合起来创建了一个独特的标识符。
- 在特定的SID例子中,如
S-1-5-21-3623811015-3361044348-30300820-1013
,"21" 后面的三个长整数就是三个子颁发机构值,最后一个数字往往表示具体的用户或组ID(RID,Relative ID)