ATT&CK红蓝对抗实战指南-Windows安全基础

Windows 安全基础:凭据、访问控制模型与令牌安全防御

Windows 系统的身份认证依赖于底层的一系列安全接口和协议。

1.1.1 Windows 凭据

1. SSPI 与 SSP

  • SSPI (Security Support Provider Interface) :安全支持提供程序接口。它是 Windows 操作系统中用于执行各种安全相关操作的公用 API。功能全面,涵盖身份验证、信息完整性校验、信息隐私保护等,是众多安全支持提供程序(SSP)的调用接口。
  • SSP (Security Support Provider) :安全支持提供程序。是一个用于实现身份验证的 DLL 文件 。系统启动时会被加载到 LSA(Local Security Authority,本地安全机构)中,主要作用是扩展 Windows 的身份验证功能。

2. 常见的 SSP 类型

  1. NTLM:基于挑战/响应(Challenge/Response)验证机制的 Windows 网络认证协议,用于对主机进行身份验证。
  2. Kerberos:一种网络身份验证协议。作为可信第三方认证服务,主要优势是提供强大的加密和单点登录(SSO)机制。
  3. Negotiate:用于在 SSPI 和其他 SSP 之间进行安全支撑的应用程序层。它会自动分析请求,并根据安全策略选择最佳 SSP(Kerberos 或 NTLM)。
  4. 安全通道 (SChannel):使用 SSL/TLS 记录来加密数据有效载荷,主要用于需要进行安全超文本传输协议(HTTPS)通信的 Web 应用程序。
  5. 摘要身份验证:基于 HTTP 和 SASL 的质询/响应协议。
  6. Cred SSP:用于传输安全凭据的网络协议,常在 RDP 或 WinRM 远程管理中提供单点登录和网络级身份验证。
  7. 分布式密码验证 (DPA):提供使用数字证书完成的互联网身份验证。
  8. PKU2U:用户对用户的公开密钥加密技术,在不隶属域的系统之间提供对等身份验证。

1.1.2 Windows 访问控制模型

Windows 的访问控制模型由 访问令牌 (Access Token) 和 安全描述符 (Security Descriptor) 两部分构成。核心逻辑是:当用户访问资源时,系统会比对进程携带的"访问令牌"与目标资源携带的"安全描述符",从而判断是否具有访问权限。

1. 访问令牌 (Access Token)

访问令牌由当前登录账号的用户持有,包含账号标识(SID)和权限信息。分为两种类型:

  • 主令牌 (Primary Token) :与进程相关,描述进程相关用户账号的安全上下文(通常在用户登录成功或通过 RDP 登录时创建)。包含:用户SID、组SID、令牌来源、所有者SID、主要组SID、访问控制列表、权限列表、模拟级别等。
  • 模拟令牌 (Impersonation Token) :与线程相关。允许线程在与安全对象交互时使用客户端的安全上下文(例如文件共享服务端验证客户端权限时,无法直接获取客户端主令牌,会生成模拟令牌)。

2. 安全标识符 (SID)

SID (Security Identifier) 是一串唯一字符串,用于标识用户、用户组、域等角色身份。

  • 结构 :S-1-5-21-...-RID。包含版本号(S)、48位标识符机构值(如 5 代表 NT Authority)、可变数量的 32 位子机构值、以及相对标识符(RID)。
  • 常见 SID 举例 :
    • S-1-5-21-domain-512:Domain Admins(域管理员组)
    • S-1-5-21-domain-513:Domain Users(域用户组)
    • S-1-5-21-domain-500:Administrator(系统管理员账户)
    • S-1-5-18:Local SYSTEM(操作系统使用的账户)
    • S-1-1-0:Everyone(包含所有用户的组)
    • S-1-5-7:Anonymous(匿名登录)
  • SID 相关 API :AllocateAndInitializeSid(初始化SID)、EqualSid(比较SID是否相等)、FreeSid(释放内存)、ConvertSidToStringSid(转字符串)等。

3. 安全描述符 (Security Descriptor)

安全描述符绑定在每个被访问对象上,包含对象的属主、组以及访问控制列表。核心组成部分为 DACL 和 SACL:

  • DACL (任意访问控制列表) :包含 ACE (访问控制项)。决定了谁能以什么权限访问该对象。如果对象没有 DACL(未指定且无继承),系统默认允许所有人完全访问。
  • SACL (系统访问控制列表):主要用于系统审计,指定哪些用户的操作行为记录会被保存到系统日志中。
  • 注:创建新对象时,DACL 和 SACL 通常由创建者指定,或从父对象的可继承 ACE 中合并构建。

!IMPORTANT

总结:1.1.1 介绍了系统如何通过 SSPI/SSP 验证身份(NTLM/Kerberos);1.1.2 则说明了身份验证通过后,系统如何通过"访问令牌"(带SID)与目标对象的"安全描述符"(带DACL/SACL)进行匹配,从而决定是否放行访问。

相关推荐
白帽攻防录2 小时前
某pc客户端app从xss到rce实战案例
前端·网络安全·黑客·xss·rce·src漏洞·app漏洞
江屿风4 小时前
【Plain Language Large Model】【从麦当劳点餐到Redis接入:MCP如何让AI工具集成变简单】流食般投喂
人工智能·redis·笔记·语言模型·llm·mcp
学网安的肆伍4 小时前
认证机制攻防学习|PortSwigger Authentication 靶场复现总结(二):用户名枚举进阶
学习·web安全·网络安全·burpsuite·portswigger·认证安全·靶场复现
海绵宝宝转agent5 小时前
Leetcode二叉树算法个人理解
笔记·学习·算法·leetcode·深度优先
小oo呆5 小时前
【学习心得】MCP工具开发学习笔记
笔记·学习
网络小江5 小时前
组网第41课:ACL 门禁——标准/扩展、规则顺序、time-range、in/out 方向
运维·网络安全·acl·访问列表·in/out
2601_961146205 小时前
实验室用等离子表面处理设备处理汽车PP内饰件和PBT骨架的一点记录
笔记·汽车·设备
二十七日秋6 小时前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法
星恒随风6 小时前
Linux Socket TCP编程(二):逐文件重构多进程、多线程与线程池服务器,深入fork、pthread_create、popen和std::bind
linux·服务器·笔记·学习·tcp/ip