Token Privileges Abusing - Windows Token
字数 2541 2025-08-06 12:21:08

Windows Token 权限滥用技术详解

1. Windows Token 基础概念

Windows Token(令牌)是 Windows 安全模型的核心组件,它包含了进程或线程的安全上下文信息。每个进程都有一个主令牌,而线程可以从主令牌继承或使用模拟令牌。

1.1 Token 的组成

  • 用户 SID:标识令牌关联的用户
  • 组 SID:用户所属的组
  • 特权列表:分配给令牌的特权
  • 所有者 SID:令牌的所有者
  • 主组 SID:令牌的主组
  • 默认 DACL:默认的自主访问控制列表
  • :令牌的来源
  • 类型:主令牌或模拟令牌
  • 模拟级别:模拟的安全级别
  • 统计信息:令牌的统计信息
  • 会话 ID:关联的终端服务会话
  • 限制 SID:限制性 SID 列表

1.2 特权 (Privilege) 类型

Windows 定义了许多特权,常见的有:

  • SeDebugPrivilege:调试程序
  • SeImpersonatePrivilege:模拟客户端
  • SeAssignPrimaryTokenPrivilege:分配主令牌
  • SeTcbPrivilege:作为操作系统的一部分
  • SeBackupPrivilege:备份文件和目录
  • SeRestorePrivilege:还原文件和目录
  • SeCreateTokenPrivilege:创建令牌对象
  • SeLoadDriverPrivilege:加载和卸载设备驱动程序

2. 令牌权限滥用技术

2.1 特权提升技术

2.1.1 SeDebugPrivilege 滥用

拥有 SeDebugPrivilege 可以读取和写入其他进程的内存,常用于:

  • 注入代码到高权限进程
  • 从高权限进程如 lsass.exe 中提取凭据

利用步骤

  1. 检查当前进程是否具有 SeDebugPrivilege
  2. 如果没有但可以启用,则启用该特权
  3. 打开目标进程 (如 lsass.exe)
  4. 使用 MiniDumpWriteDump 或类似技术转储进程内存

2.1.2 SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege 滥用

这些特权允许进程模拟其他用户或分配主令牌,常用于:

  • 通过命名管道模拟客户端
  • 创建具有更高权限的新进程

利用方法

  1. 创建命名管道
  2. 等待高权限客户端连接
  3. 使用 ImpersonateNamedPipeClient 模拟客户端
  4. 创建新进程或执行其他操作

2.1.3 SeLoadDriverPrivilege 滥用

允许加载内核驱动程序,可用于:

  • 加载恶意驱动程序
  • 利用漏洞驱动程序进行内核级操作

利用步骤

  1. 准备恶意驱动程序
  2. 使用 NtLoadDriver 或相关 API 加载驱动
  3. 通过驱动程序执行特权操作

2.2 令牌窃取与复制

2.2.1 从高权限进程窃取令牌

  1. 使用 OpenProcess 打开目标进程 (如 winlogon.exe)
  2. 使用 OpenProcessToken 获取进程令牌
  3. 使用 DuplicateTokenEx 复制令牌
  4. 使用 CreateProcessWithTokenW 或类似 API 创建新进程

2.2.2 令牌复制攻击

HANDLE hToken;
HANDLE hDupToken;

OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);
DuplicateTokenEx(hToken, TOKEN_ALL_ACCESS, NULL, SecurityImpersonation, TokenPrimary, &hDupToken);

STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcessWithTokenW(hDupToken, LOGON_WITH_PROFILE, L"cmd.exe", NULL, 0, NULL, NULL, &si, &pi);

2.3 受限令牌绕过

Windows 支持创建受限令牌,限制某些操作。绕过技术包括:

  • 使用 SeCreateTokenPrivilege 创建新令牌
  • 查找并利用令牌中的漏洞
  • 通过其他特权移除限制

3. 实际攻击场景

3.1 服务账户滥用

当攻击者获取服务账户权限时,可能利用:

  • 服务账户通常具有 SeImpersonatePrivilege
  • 服务账户可能运行在 SYSTEM 上下文
  • 服务账户可能有其他非标准权限

攻击流程

  1. 识别服务账户的权限
  2. 寻找可利用的特权
  3. 执行令牌操作提升权限

3.2 横向移动中的令牌使用

在横向移动中,攻击者可以:

  • 使用 Pass-the-Hash 技术
  • 使用 Overpass-the-Hash 技术
  • 窃取远程服务的令牌
  • 滥用 Kerberos 委派

4. 防御与检测

4.1 防御措施

  • 最小特权原则:只分配必要的特权
  • 特权分离:不同服务使用不同账户
  • 令牌过滤:使用受限令牌
  • 审计配置:监控特权使用

4.2 检测方法

  • 监控可疑的令牌操作:
    • DuplicateTokenEx
    • CreateProcessWithTokenW
    • ImpersonateNamedPipeClient
  • 检查特权启用事件
  • 监控异常的进程创建

4.3 加固建议

  1. 定期审查服务账户权限
  2. 禁用不必要的特权
  3. 实施特权访问管理 (PAM)
  4. 启用详细的安全审计
  5. 使用 Windows Defender ATP 或类似解决方案

5. 工具与技术实现

5.1 常用工具

  • Mimikatz:令牌操作、凭据提取
  • RottenPotato:特权提升利用
  • JuicyPotato:SeImpersonatePrivilege 利用
  • PrintSpoofer:滥用打印机后台处理程序服务

5.2 API 函数

关键 Windows API 函数:

  • OpenProcessToken
  • DuplicateTokenEx
  • CreateProcessWithTokenW
  • ImpersonateLoggedOnUser
  • RevertToSelf
  • SetThreadToken
  • AdjustTokenPrivileges

5.3 示例代码

启用特权示例:

BOOL EnablePrivilege(LPCTSTR lpszPrivilege) {
    HANDLE hToken;
    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
        return FALSE;

    LUID luid;
    if (!LookupPrivilegeValue(NULL, lpszPrivilege, &luid)) {
        CloseHandle(hToken);
        return FALSE;
    }

    TOKEN_PRIVILEGES tp;
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

    if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) {
        CloseHandle(hToken);
        return FALSE;
    }

    CloseHandle(hToken);
    return TRUE;
}

6. 高级技术

6.1 令牌沙箱逃逸

在沙箱环境中,攻击者可能尝试:

  • 利用父进程的令牌
  • 查找沙箱未过滤的特权
  • 使用跨会话令牌

6.2 内核级令牌操作

通过内核漏洞或驱动程序:

  • 直接修改令牌结构
  • 绕过令牌检查
  • 创建具有任意特权的令牌

6.3 跨会话令牌窃取

在终端服务环境中:

  • 使用 WTSQueryUserToken 获取其他会话令牌
  • 使用 LogonUser 创建跨会话令牌
  • 滥用会话隔离机制

7. 总结

Windows 令牌权限滥用是攻击者常用的特权提升和横向移动技术。理解这些技术对于防御和检测此类攻击至关重要。防御者应关注最小特权原则、实施严格的令牌管理,并监控可疑的令牌操作活动。

Windows Token 权限滥用技术详解 1. Windows Token 基础概念 Windows Token(令牌)是 Windows 安全模型的核心组件,它包含了进程或线程的安全上下文信息。每个进程都有一个主令牌,而线程可以从主令牌继承或使用模拟令牌。 1.1 Token 的组成 用户 SID :标识令牌关联的用户 组 SID :用户所属的组 特权列表 :分配给令牌的特权 所有者 SID :令牌的所有者 主组 SID :令牌的主组 默认 DACL :默认的自主访问控制列表 源 :令牌的来源 类型 :主令牌或模拟令牌 模拟级别 :模拟的安全级别 统计信息 :令牌的统计信息 会话 ID :关联的终端服务会话 限制 SID :限制性 SID 列表 1.2 特权 (Privilege) 类型 Windows 定义了许多特权,常见的有: SeDebugPrivilege:调试程序 SeImpersonatePrivilege:模拟客户端 SeAssignPrimaryTokenPrivilege:分配主令牌 SeTcbPrivilege:作为操作系统的一部分 SeBackupPrivilege:备份文件和目录 SeRestorePrivilege:还原文件和目录 SeCreateTokenPrivilege:创建令牌对象 SeLoadDriverPrivilege:加载和卸载设备驱动程序 2. 令牌权限滥用技术 2.1 特权提升技术 2.1.1 SeDebugPrivilege 滥用 拥有 SeDebugPrivilege 可以读取和写入其他进程的内存,常用于: 注入代码到高权限进程 从高权限进程如 lsass.exe 中提取凭据 利用步骤 : 检查当前进程是否具有 SeDebugPrivilege 如果没有但可以启用,则启用该特权 打开目标进程 (如 lsass.exe) 使用 MiniDumpWriteDump 或类似技术转储进程内存 2.1.2 SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege 滥用 这些特权允许进程模拟其他用户或分配主令牌,常用于: 通过命名管道模拟客户端 创建具有更高权限的新进程 利用方法 : 创建命名管道 等待高权限客户端连接 使用 ImpersonateNamedPipeClient 模拟客户端 创建新进程或执行其他操作 2.1.3 SeLoadDriverPrivilege 滥用 允许加载内核驱动程序,可用于: 加载恶意驱动程序 利用漏洞驱动程序进行内核级操作 利用步骤 : 准备恶意驱动程序 使用 NtLoadDriver 或相关 API 加载驱动 通过驱动程序执行特权操作 2.2 令牌窃取与复制 2.2.1 从高权限进程窃取令牌 使用 OpenProcess 打开目标进程 (如 winlogon.exe) 使用 OpenProcessToken 获取进程令牌 使用 DuplicateTokenEx 复制令牌 使用 CreateProcessWithTokenW 或类似 API 创建新进程 2.2.2 令牌复制攻击 2.3 受限令牌绕过 Windows 支持创建受限令牌,限制某些操作。绕过技术包括: 使用 SeCreateTokenPrivilege 创建新令牌 查找并利用令牌中的漏洞 通过其他特权移除限制 3. 实际攻击场景 3.1 服务账户滥用 当攻击者获取服务账户权限时,可能利用: 服务账户通常具有 SeImpersonatePrivilege 服务账户可能运行在 SYSTEM 上下文 服务账户可能有其他非标准权限 攻击流程 : 识别服务账户的权限 寻找可利用的特权 执行令牌操作提升权限 3.2 横向移动中的令牌使用 在横向移动中,攻击者可以: 使用 Pass-the-Hash 技术 使用 Overpass-the-Hash 技术 窃取远程服务的令牌 滥用 Kerberos 委派 4. 防御与检测 4.1 防御措施 最小特权原则 :只分配必要的特权 特权分离 :不同服务使用不同账户 令牌过滤 :使用受限令牌 审计配置 :监控特权使用 4.2 检测方法 监控可疑的令牌操作: DuplicateTokenEx CreateProcessWithTokenW ImpersonateNamedPipeClient 检查特权启用事件 监控异常的进程创建 4.3 加固建议 定期审查服务账户权限 禁用不必要的特权 实施特权访问管理 (PAM) 启用详细的安全审计 使用 Windows Defender ATP 或类似解决方案 5. 工具与技术实现 5.1 常用工具 Mimikatz :令牌操作、凭据提取 RottenPotato :特权提升利用 JuicyPotato :SeImpersonatePrivilege 利用 PrintSpoofer :滥用打印机后台处理程序服务 5.2 API 函数 关键 Windows API 函数: OpenProcessToken DuplicateTokenEx CreateProcessWithTokenW ImpersonateLoggedOnUser RevertToSelf SetThreadToken AdjustTokenPrivileges 5.3 示例代码 启用特权示例: 6. 高级技术 6.1 令牌沙箱逃逸 在沙箱环境中,攻击者可能尝试: 利用父进程的令牌 查找沙箱未过滤的特权 使用跨会话令牌 6.2 内核级令牌操作 通过内核漏洞或驱动程序: 直接修改令牌结构 绕过令牌检查 创建具有任意特权的令牌 6.3 跨会话令牌窃取 在终端服务环境中: 使用 WTSQueryUserToken 获取其他会话令牌 使用 LogonUser 创建跨会话令牌 滥用会话隔离机制 7. 总结 Windows 令牌权限滥用是攻击者常用的特权提升和横向移动技术。理解这些技术对于防御和检测此类攻击至关重要。防御者应关注最小特权原则、实施严格的令牌管理,并监控可疑的令牌操作活动。