当前位置: 首页 > news >正文

进程令牌:Windows 安全架构中的关键元素

一、进程令牌概述

进程令牌(Process Token)是 Windows 操作系统中一个重要的安全机制,它包含了与进程安全上下文相关的详细信息。每个进程在执行时都会关联一个进程令牌,令牌用于确定该进程可以访问哪些资源以及能执行哪些操作。通过对进程令牌的管理,操作系统确保了对系统资源的访问控制,并且可以精确地指定哪些用户或进程可以进行哪些操作。

进程令牌不仅仅是标识用户身份的工具,它还直接影响着进程权限、访问控制及安全操作,进而决定了系统的安全性。

二、进程令牌的组成

进程令牌由多个组成部分构成,下面是令牌的主要内容:

1. 用户 SID(Security Identifier)

用户 SID 是标识进程所属用户或用户组的唯一标识符。每个用户或组在 Windows 系统中都有一个对应的 SID,进程令牌通过该 SID 确定进程的所有者身份。用户 SID 通常与登录到系统的账户相对应,决定了进程属于哪个用户。

2. 组 SID

组 SID 标识了进程所属的用户组。用户组是用于集中管理一组具有相同权限的用户账户。进程令牌中包含组 SID 信息,使得进程不仅仅可以继承用户的权限,也能够继承所属组的权限,进一步控制其访问资源的能力。

3. 权限

权限在进程令牌中定义了进程可以执行的操作类型,如读取、写入、执行等。操作系统根据这些权限来判断进程是否可以访问特定的资源或执行特定的操作。每个进程的令牌都绑定了一个权限集,用以决定它对系统资源的可访问性。

4. 特权

特权是一组更高权限的操作,通常用于系统级别的任务,如修改系统时间、关闭系统等。特权可以在令牌中进行配置,并且只有具备相应特权的进程才能执行这些关键操作。特权的控制通常用于确保系统的核心操作不会被恶意进程或不受信任的用户执行。

5. 令牌类型

令牌类型标识了令牌的作用。主要有两种令牌类型:主令牌(Primary Token)模拟令牌(Impersonation Token)

6. 令牌来源

令牌来源指明了令牌是如何产生的。例如,令牌可以来自用户登录过程(如登录令牌),也可以由服务账户生成(如服务令牌)。通过源信息,可以确定令牌是否与某个特定进程或操作相关。

三、进程令牌的类型

Windows 系统支持两种主要的进程令牌类型:主令牌和模拟令牌。

1. 主令牌(Primary Token)

每个进程都拥有一个主令牌,它代表了启动该进程的用户账户的安全上下文。主令牌包含了启动该进程的用户或用户组的 SID,以及相关权限、特权和组 SID 信息。主令牌通常是由操作系统自动为每个新进程创建,并用于控制该进程的访问权限。

2. 模拟令牌(Impersonation Token)

模拟令牌允许一个进程模拟另一个用户的安全上下文。模拟令牌通常用于客户端/服务器应用程序场景中,服务器端进程可以通过模拟客户端的身份来访问系统资源。模拟令牌使得服务器能够代表客户端访问资源,从而实现更为精细的权限控制。

四、进程令牌的使用

进程令牌的主要功能是控制进程对资源的访问权限和操作权限。在 Windows 中,操作系统使用进程令牌来决定进程是否能够执行某项特定操作或访问特定资源。具体来说,进程令牌在以下几方面发挥作用:

1. 访问控制

Windows 使用进程令牌来控制进程的访问权限。进程令牌中的权限和特权决定了该进程可以对哪些资源执行操作。例如,进程令牌可能包括“读取”权限,允许该进程读取文件内容;或者包括“写入”权限,允许进程修改文件。

2. 权限提升

在某些情况下,进程可能需要执行某些高权限操作,例如修改系统设置或安装软件。这时,可以通过修改进程的令牌来提升权限。这一过程通常通过修改进程令牌中的特权字段来完成。权限提升通常是通过调用如 DuplicateTokenEx 等 API 来实现的。

五、基于用户类型的令牌分类

根据不同的用户类型和用途,系统会创建不同类型的令牌,以决定进程或服务能够执行哪些操作。

1. 用户令牌(User Token)

用户令牌是与特定用户账户关联的令牌。它包含了用户的身份信息、组信息和权限,决定了用户能够访问的资源和执行的操作。当用户登录系统时,操作系统为该用户生成一个令牌,用于标识和验证用户的权限。

  • 示例:用户登录时,操作系统为其创建一个用户令牌,允许用户访问其权限范围内的文件、目录和系统资源。

2. 管理员令牌(Administrator Token)

管理员令牌通常与具有管理员权限的用户关联。管理员用户拥有更高的系统权限,可以执行修改系统设置、安装软件等操作。对于启用 用户账户控制(UAC) 的系统,管理员用户在大多数情况下会使用标准用户令牌,只有在需要提升权限时,才会使用管理员令牌。

  • 示例:当管理员账户执行需要高权限的操作时,系统会提示用户通过 UAC 提升权限,切换到管理员令牌。

3. 服务账户令牌(Service Account Token)

服务账户令牌与特定的服务账户关联,通常用于运行系统服务或应用程序。服务账户拥有与其职责相匹配的权限集,用于控制服务对系统资源的访问。常见的服务账户包括 LocalSystemNetworkService 和自定义服务账户。

  • 示例:Windows 服务(如 SQL Server)通常以特定的服务账户运行,每个服务账户都有一个独立的令牌,决定了服务能访问哪些资源。

4. 系统令牌(System Token)

系统令牌与操作系统进程相关联,代表了操作系统本身或系统级别的进程。系统令牌具有非常高的权限,通常用于控制对系统级别资源的访问。操作系统的核心进程和服务使用此类令牌执行系统级操作。

  • 示例:NT AUTHORITY\SYSTEM 账户通常在操作系统启动时使用,具有完全的系统级权限。

六、令牌的获取与修改

1. 获取令牌

开发人员或管理员可以通过 Windows 提供的 API 函数,如 OpenProcessToken,来获取与进程关联的令牌。通过调用这些函数,可以提取进程的令牌,并进行进一步的分析或操作。

2. 修改令牌

在某些情况下,可能需要修改进程的令牌。例如,管理员可以使用 DuplicateTokenEx API 来复制一个令牌,然后使用 SetPrivilege 等函数修改令牌中的权限,以提升或调整该进程的操作权限。

七、用户账户控制(UAC)与令牌

Windows 的 用户账户控制(UAC) 机制在用户执行需要管理员权限的操作时提供了额外的安全保护。当用户登录时,系统通常会创建两个令牌:一个是标准的用户令牌,另一个是具有完全管理员权限的令牌。在默认情况下,UAC 会限制标准令牌的权限,只有在用户明确同意时,系统才会使用具有管理员权限的令牌执行高权限操作。

UAC 和令牌的关系

  1. UAC 提升令牌:
    当用户尝试以管理员身份运行程序时,UAC 会创建一个具有更高权限的“提升令牌”(Elevated Token)。这个令牌会包含管理员权限。没有 UAC 提升的情况下,普通用户登录时会使用一个“标准令牌”(Standard Token),其权限会受到限制。

    • 标准令牌:包含用户的基本权限。
    • 提升令牌:包括用户的基本权限和管理员权限。只有当用户明确同意提升权限(通过 UAC 提示)时,系统才会为进程生成这个令牌。
  2. UAC 限制令牌权限:
    即使用户是管理员,UAC 仍然会限制其令牌的权限,以减少对系统造成不必要的风险。例如,管理员登录时默认会生成一个带有有限权限的标准令牌,这个令牌不允许直接修改系统设置或执行敏感操作。只有当程序请求提升并且用户同意时,UAC 才会为其生成一个提升令牌。

  3. UAC 控制令牌的使用:
    每当用户启动程序时,UAC 会决定是否允许该程序获取管理员权限。如果允许,UAC 会提供一个提升令牌,该令牌在执行时会授予管理员权限;如果不允许,程序只能使用标准令牌,受限于普通用户的权限。

示例:UAC 和令牌的流程

  1. 普通用户登录:
    用户登录时,系统为用户创建一个标准令牌,限制其权限。

  2. 程序请求提升权限:
    当程序尝试以管理员权限运行时,UAC 会弹出提示,询问用户是否允许提升权限。如果用户同意,UAC 会为该程序创建一个提升令牌。

  3. 提升令牌执行:
    程序在获得提升令牌后,可以执行需要管理员权限的操作。此时,程序会使用包含管理员权限的令牌,而非普通的标准令牌。

  4. 令牌恢复:
    在某些情况下(例如,程序关闭),系统会恢复用户的标准令牌,继续执行普通权限的操作。

八、令牌窃取与安全问题

1. 令牌窃取

攻击者可能会尝试窃取高权限的进程令牌,利用窃取的令牌来提升自己的权限。这类攻击通常被称为“令牌劫持”或“令牌盗用”。通过获得系统或管理员级别的令牌,攻击者能够绕过常规的权限控制,从而获得未经授权的访问。

2. 令牌操作的审计

为了防止恶意行为,系统管理员可以启用审计日志,记录关于令牌操作的所有事件。通过审计令牌的创建、修改及访问记录,管理员可以检测潜在的安全问题,及时响应权限滥用或安全威胁。

九、总结

进程令牌在 Windows 操作系统的安全模型中发挥着至关重要的作用。它不仅决定了进程对资源的访问权限,还影响了系统的安全控制和权限管理。通过合理的令牌管理,Windows 可以确保不同进程的安全性,防止未授权操作的发生。同时,令牌的窃取和滥用可能会导致严重的安全漏洞,因此在实际应用中,开发人员和系统管理员需要特别关注令牌的管理、审计与安全性。

相关文章:

进程令牌:Windows 安全架构中的关键元素

一、进程令牌概述 进程令牌(Process Token)是 Windows 操作系统中一个重要的安全机制,它包含了与进程安全上下文相关的详细信息。每个进程在执行时都会关联一个进程令牌,令牌用于确定该进程可以访问哪些资源以及能执行哪些操作。…...

基于springboot的超时代停车场管理平台(源码+文档)

大家好我是风歌,曾担任某大厂java架构师,如今专注java毕设领域。今天要和大家聊的是一款基于springboot的超时代停车场管理平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于Spring Boot的超时代停车场…...

缓存穿透、缓存击穿、缓存雪崩的区别与解决方案

1. 缓存穿透(Cache Penetration) 定义:大量请求查询 数据库中不存在的数据,导致请求绕过缓存直接访问数据库,造成数据库压力过大。 场景: 恶意攻击:例如用不存在的用户ID频繁请求。 业务误操作…...

箭头函数的this指向谁

先看1个重要原则: 由Vue管理的函数,一定不要写箭头函数,箭头函数的this就不再是Vue实例了 箭头函数的 this 指向在定义时确定,继承自外层作用域(即定义时的上下文)的 this,且无法通过 call、app…...

【愚公系列】《Python网络爬虫从入门到精通》012-字符串处理

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...

【Python】01-基础

目录 1、命令行简介1.1 命令行结构1.2 常用dos指令 2、环境变量2.1 查看2.2 添加2.3 修改2.4 删除 3、path环境变量4、进制5、文本文件和字符集6、Sublime使用 1、命令行简介 命令行就是文本交互页面,通过命令行可以使用指令来操作计算机 1.1 命令行结构 版本及版…...

Java-DFS(深度优先搜索)

原理 深度优先搜索的基本思路是从一个节点开始,依次访问它的每一个邻居节点,直到达到一个没有未被访问的邻居的节点为止。这个过程可以使用递归或者栈来实现。其特点是尽可能深入每一个分支,然后再回溯。 DFS算法常用于解决以下类型的问题&…...

AI大模型编程能力对比:DeepseekClaudeGemini

在当今快速发展的技术领域,人工智能(AI)模型在编程和数据处理方面的应用越来越广泛。不同的AI模型因其独特的设计理念和技术优势,适用于不同的编程任务和场景。 本文将对三种主流的AI模型——DeepSeek v3、Gemini Flash 2.0 和 C…...

用C++实现点到三角形最小距离的计算

1、全部代码 #include <iostream> #include <cmath> #include <array> #include <algorithm>// 二维点结构体 struct Point2D {double x, y;Point2D(double x 0, double y 0) : x(x), y(y) {} };// 计算点到线段的最小距离 double pointToSegmen…...

解决前后端日期传输因时区差异导致日期少一天的问题

前端处理 1. 发送日期字符串而非时间戳 在前端使用日期选择器&#xff08;如 el-date-picker&#xff09;获取日期后&#xff0c;将日期转换为特定格式的字符串&#xff08;如 YYYY-MM-DD&#xff09;发送给后端&#xff0c;避免直接发送带有时区信息的时间戳或日期对象。这样…...

mmsegmentation自己的数据集+不同网络的config配对

比如说我们要用这个网络&#xff1a; 我们发现他内部继承了很多类&#xff0c;要想配对我们的数据集&#xff0c;就要进行父类的修改。 ../_base_/models/deeplabv3_unet_s5-d16.py, ../_base_/datasets/drive.py,../_base_/default_runtime.py, ../_base_/schedules/schedule…...

Golang官方编程指南

文章目录 1. Golang 官方编程指南2. Golang 标准库API文档 1. Golang 官方编程指南 Golang 官方网站&#xff1a;https://go.dev/ 点击下一步&#xff0c;查看官方手册怎么用 https://tour.go-zh.org/welcome/1 手册中的内容比较简单 go语言是以包的形式化管理函数的 搜索包名…...

ram的使用——初始化很重要

背景 ram是非常常用的ip&#xff0c;前人的经验告诉我们&#xff0c;如果不对ram进行初始化直接读写&#xff0c;不定态在实际上板时会出现不可预知的问题。 我们需要对ram进行初始化写0操作&#xff0c;代码如下。需要注意&#xff0c;复位释放时立马写入可能存在复位抖动的…...

doris:最佳实践

异步物化视图使用原则​ 时效性考虑&#xff1a; 异步物化视图通常用于对数据时效性要求不高的场景&#xff0c;一般是 T1 的数据。如果时效性要求高&#xff0c;应考虑使用同步物化视图。 加速效果与一致性考虑&#xff1a; 在查询加速场景&#xff0c;创建物化视图时&#x…...

[创业之路-299]:图解金融体系结构

一、金融体系结构 1.1 概述 金融体系结构是一个国家以行政的、法律的形式和运用经济规律确定的金融系统结构&#xff0c;以及构成这个系统的各种类型的银行和非银行金融机构的职能作用和相互关系。以下是对金融体系结构的详细分析&#xff1a; 1、金融体系的构成要素 现代金…...

RL--2

强化学习当中最难的两个点是&#xff1a; 1.reward delay&#xff1b; 2.agent的行为会影响到之后看到的东西&#xff0c;所以agent要学会探索世界&#xff1b; 关于强化学习的不同类型&#xff0c;可以分为以下三种&#xff1a; 一种是policy based&#xff1a;可以理解为它是…...

[JVM篇]分代垃圾回收

分代垃圾回收 分代收集法是目前大部分 JVM 所采用的方法&#xff0c;其核心思想是根据对象存活的不同生命周期将内存划分为不同的域&#xff0c;一般情况下将 GC 堆划分为老生代(Tenured/Old Generation)和新生代(Young Generation)。老生代的特点是每次垃圾回收时只有少量对象…...

Dify本地安装

目录 方式一docker安装&#xff1a; 方式二源码安装&#xff1a; Dify本地安装可以用docker方式&#xff0c;和源码编译方式。 先到云厂商平台申请一台Centos系统云主机&#xff0c;网络选择海外&#xff0c;需要公网IP&#xff0c;再按一下流程操作&#xff1a; 方式一doc…...

python | 两招解决第三方库安装难点

前言 python 被广泛应用的原因之一&#xff0c;便是拥有大量的第三方库&#xff0c;涵盖 web 开发、数据分析和机器学习等多个方面。 对于多数初学者来说&#xff0c;如何成功安装 python 第三方库成为了一大难点&#xff0c;总是因各种原因导致安装失败。 本文以自身经验&a…...

stm32mp15x 之 M4 使用 canfd

目录 序配置添加注坑参考 序 在使用 stm32mp15x 系列时&#xff0c;M4 有不少的坑&#xff0c;这里简单聊聊使用 canfd 时遇到的一些问题。 配置 这里使用 PLL4R 为 100M&#xff0c;用于 CANFD 的时钟 canfd 速率配置成 1M &#xff0c;5M&#xff0c;其中数据传输速率为 5M…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...