Windows访问控制 -- SID

news2024/10/5 19:21:39

Windows访问控制是一个比较大的题目,因此计划用一系列的文章简单谈一下这个。本篇是开篇,介绍SID。

Windows访问控制定义

Windows访问控制的含义可以参考MSDN的描述:Access control refers to security features that control who can access resources in the operating system. Applications call access control functions to set who can access specific resources or control access to resources provided by the application Access Control (Authorization) 。从上述的描述中,我们可以看出访问控制主要是Windows提供了一个机制用来控制谁可以访问特定的资源,因此本系列所描述的访问控制大部分是对于资源(或者说是安全对象)的访问控制。
考虑资源访问控制这句话,我们需要考察四个点:

  1. 资源的定义;
  2. 资源的属主;
  3. 资源的受访问权限如何定义;
  4. 用户或者说是进程(线程)如何获取获取对资源的访问权限。

另外我们之所以说本系列所描述的访问控制大部分是对于资源(或者说是安全对象)的访问控制,是因为在实际的编码过程中,执行系统管理任务也是访问控制模型的一部分,也就是特权(priviledge),而这块内容也会在后续的文章中讲到。
熟悉Linux的同学会发现关于资源属主、SID,特权在Linux中也有类似的概念,后续我写Linux访问控制时会再说明对比。

资源定义

资源或者更准确的名称可以叫安全对象(secure object),我个人的理解时创建时可以使用安全描述符(security description)控制访问权限的的对象。例如文件、进程、线程、信号量等内核对象。
但是我个人觉得除了这些内核对象,窗口等用户对象也可以算作资源的一种。基于以下两个原因:

  1. Windows本身提供了一些安全机制保证这些用户对象的安全性,例如无法跨session访问;
  2. Windwos提供了一些API(UIPI)来供开发者加强这些对象的安全性,如果控制窗口是否可以接受低完整性进程的窗口消息。

所以在本系列中我也会大致介绍用户对象的一些安全函数及机制。

SID的含义及格式

SID在MSDN中的定义如下:A security identifier is used to uniquely identify a security principal or security group. Security principals can represent any entity that can be authenticated by the operating system, such as a user account, a computer account, or a thread or process that runs in the security context of a user or computer account.What are security identifiers?
可以看出SID在系统中唯一地标识了某个安全实体或者安全组,也就是说我们的用户账户,用户组等都有一个SID关联,并且这个SID至少能保证在当前系统中是唯一的。
Windows中资源的属主概念是通过SID实现的,因为SID可以唯一地标识某个安全实体。
打开CMD,执行 whoami /all,可以看到当前你正在登录使用的账户的SID及组信息,以下是在我计算机中的输出:
whoami 输出

whoami /all的输出包含三部分:用户名及SID,用户所属的组及当前账户的特权。
根据MSDN的描述,SID的组成格式为 S-R-X-Y1-Y2-Yn-1-Yn,其中S代表当前串为SID,R代表SID版本(revision level),X代表权限级别,Y1,Y2…Yn子权限级别。以上图中几个SID为例:

S-1-5-21-304837936-1571026108-1873824453-1001

  1. 1代表版本,目前SID所有的版本应该都是1;
  2. 21代表权限级别,通用的权限级别如下图:在这里插入图片描述
    SID中的5即NT Authority;
  3. 21-304837936-1571026108-1873824453-1001即子权限级别:
    a. 21-304837936-1571026108-1873824453是domain 标识符,唯一地标识当前系统的domain;
    b. 1001是RID(relative ID),表示当前domain中的相对ID,类似相对路径的概念;
    c. 21是Win预定义的值,查看 winnt.h 我们可以看到 #define SECURITY_NT_NON_UNIQUE (0x00000015L),这个值的含义是SID值通过最后添加的RID值而变得唯一。这个很好理解,你尝试在你机器中创建几个账户就会发现,所有账户的SID大部分字段都相同,只有RID在变化,这也就是NON_UNIQUE的含义;
    d. 查看winnt.h,可以看到如下定义:#define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (3L),也就是说在21(NON_UNIQUE)的情况下,子权限的数量为3(去除21这个权限级别),也就是SID串中的 304837936-1571026108-1873824453,这三个数值为随机数,在系统首次被安装后生成;
    e. 用户自己创建的账户据说RID是从1000开始,但是我测试的所有机器都是1001开始,有点疑惑。
    接下来我们看看当前账户所属某个组的SID的分析:
    BUILTIN\Administrators 别名 S-1-5-32-544 只用于拒绝的组
    组名是 BUILTIN\Administrators ,标识其为内建的管理员组;
    S-1-5的含义不变,32的定义为 SECURITY_BUILTIN_DOMAIN_RID,也就是内建组;544定义为
    DOMAIN_ALIAS_RID_ADMINS,就也是管理员组。所以当前SID代表内建的SID。
    当时当前组的最后一部分为 只用于拒绝的组,这是因为我在执行whoami时没有打开UAC,所以当前用户是不具备管理员权限的,当打开UAC再执行命令就会看到 启用的组。这个设计是基于安全的考虑,即某个用户是管理员组内的,但是却不具备管理员权限。
    以上对whoami输出的简单分析,我们可以察觉,某个用户所具备的权限是基于其属于哪些组及特权决定的,单一的账户SID只是一个标识符,不具备任何魔力。

其他

我们可以打开任务管理器,查看当前系统中运行的进程及对应的账户,以下是我机器中部分进程及账户:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
除了我的用户账户(81337)以后,还有Local Service,Network Service, System三个账户也在运行。这三个账户属于内建账户,查看MSDN我们可以看到:
在这里插入图片描述
同样我们打开注册表,定位到 HKEY_USER目录,可以看到
在这里插入图片描述
也就是说所有正在运行的账户都加载了对应账户注册表。这些账户注册表所在的位置可以查看:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist,以下是我机器中的部分数据:
在这里插入图片描述
另外之所以要创建这么多内建SID的原因也是基于安全的考虑,可以最小化地定制其权限,也就是定制其所属的组及特权,防止权限的滥用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/148661.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java集合容器介绍

Java 容器分为 Collection 和 Map 两大类,其下又有很多子类,如下所示: Collection接口:单列数据,定义了存取一组对象的方法的集合 1、List:元素有序(指的是存储时,与存放顺序保持一致)、可重复的…

【Docker】(四)使用volume持久化Docker容器中的Redis数据

1.前言 本系列文章记录了从0开始学习Docker的过程,Docker系列历史文章: (一)基本概念与安装使用 (二)如何使用Docker发布一个SpringBoot服务 (三)使用registry远程镜像仓库管理镜像…

[ 数据结构 ] 赫夫曼编码--------数据、文件压缩解压

0 引出 如上图:给定字符串按定长编码处理,最终对应二进制长度为359 思考:如何压缩,将359有效降低? ----回顾:赫夫曼树 1 数据压缩 拿到数据(字符串)的第一反应,虽然知道应该也像上面一样转为字节数组,但就不知道该怎么办了?统计数组中各字节使用的次数,将次数作为权值,字节…

2023.1.8 学习周报

文章目录摘要文献阅读1.题目2.摘要3.介绍4.论文主要贡献5.相关工作5.1 序列感知的推荐系统5.2 神经注意模型6.模型:ATTREC6.1 序列推荐6.2 基于Self-Attention的用户短期兴趣建模6.3 用户长期兴趣建模6.4 模型学习7.实验7.1 数据集7.2 评估指标7.3 模型比较7.4 实验…

SSO单点登录实例详解(前端传Code授权登录)

什么是 SSO(单点登录) SSO 英文全称 Single Sign On,单点登录。SSO 是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 单点登录流程 单点登录大致流程如下所示: 单点登录详细流程&#x…

【自学C++】C++变量初始化

C变量初始化 C变量初始化教程 变量 的初始化就是在定义变量的同时,给变量设置一个初始值,在 C 中,如果定义变量没有初始化,那么变量有可能会被赋值也有可能不会赋值。 如果是定义的 全局变量 或者 静态变量,未初始化…

2022年语音合成(TTS)和语音识别(ASR)年度总结

论文统计每月更新一次,主要跟踪语音合成和语音识别的发展状况(很多文章都是在会议后才发出,但不影响统计。统计过程难免存在疏漏,因此统计结果仅供参考。所有文章语音合成领域统计列表请访问http://yqli.tech/page/tts_paper.html&#xff0c…

绝大多数人远远低估了软件开发的难度

给你付钱了,你应该把软件做好! 这个话相当于: 给你付钱了,你应该把月亮摘下来! 趣讲大白话:臣妾做不到 ********** 软件是特殊商品服务 可以说很难有标准 开发的难度取决于需求多少,技术难度&a…

Java Map集合的介绍和使用

什么是Map类型的集合 介绍 1.用于保存具有映射关系的数据(key——value)。 2.Map中的key和value可以是任意的类型的数据。 3.Map中的key值不允许重复。 4.Map中的value值可以重复。 5.一般常用string作为value的key。 6.key和value之间存在一一对…

如何进行地图SDK开发(二)——示例文档

概述 前面的文章文章我们写到了SDK的开发以及ak认证的实现,在本文我们继续讲讲地图SDK开发中的示例文档的实现。 技术点 vue3viteelement-plusmonaco-editor 实现后效果 实现 1. 工程初始化 1.1 搭建工程 搭建工程的过程请参照博文(使用vite搭建vue3项目&…

javaEE初阶 — 线程池

文章目录线程池1 什么是线程池2 标准库中的线程池2.1 什么是工厂模式2.2 如何使用标准库中的线程池完成任务2.3 ThreadPoolExecutor 构造方法的解释3 实现一个线程池线程池 1 什么是线程池 随着并发程度的提高,随着对性能要求标准的提高会发现,好像线程…

[cpp进阶]C++异常

文章目录C语言传统处理错误的方式C异常概念C异常使用异常的抛出和捕获异常的重新抛出异常安全异常规范自定义异常体系C标准库的异常体系异常的优缺点C语言传统处理错误的方式 传统的错误处理机制: 终止程序。assert断言直接终止程序。缺点:过于粗暴&am…

Fiddler抓取手机APP报文

Http协议代理工具有很多,比如Burp Suite、Charles、Jmeter、Fiddler等,它们都可以用来抓取APP报文,其中charles和Burp Suite是收费的,Jmeter主要用来做接口测试,而Fiddler提供了免费版,本文记录一下在Windo…

位运算做加法,桶排序找消失元素,名次与真假表示,杨氏矩阵,字符串左旋(外加两道智力题)

Tips 1. 2. 3. 大小端字节序存储这种顺序只有在放进去暂时存储的时候是这样的,但是一旦我里面的数据需要参与什么运算之类的,会“拿出来”先恢复到原先的位置再参与运算,因此,大小端字节序存储的什么顺序不影响移位运算等等…

【案例教程】CLUE模型构建方法、模型验证及土地利用变化情景预测实践技术

【前沿】:土地利用/土地覆盖数据是生态、环境和气象等领域众多模型的重要输入参数之一。基于遥感影像解译,可获取历史或当前任何一个区域的土地利用/土地覆盖数据,用于评估区域的生态环境变化、评价重大生态工程建设成效等。借助CLUE模型&…

声音产生感知简记

声音产生 人的发音器官包括:肺、气管、声带、喉、咽、鼻腔、口腔、唇。肺部产生的气流冲击声带,产生震动。 声带每开启和闭合一次的时间是基音周期(Pitch period,T),其到数为基音频率(F.=1/T,基频),范围在70-450Hz。基频越高,声音越尖细,如小孩的声音比大人尖,就是…

编译错误2

本文迁移自本人网易博客&#xff0c;写于2015年11月25日&#xff0c;编译错误2 - lysygyy的日志 - 网易博客 (163.com)1、error C2059:语法错误&#xff1a;“<L_TYPE_RAW>”error C2238:意外的标记位于“;”之前.错误代码定位于&#xff1a;BOOL TreeView_GetCheckState…

excel函数公式:常用高频公式应用总结 上篇

公式1&#xff1a;条件计数条件计数在Excel的应用中十分常见&#xff0c;例如统计人员名单中的女性人数&#xff0c;就是条件计数的典型代表。条件计数需要用到COUNTIF函数&#xff0c;函数结构为COUNTIF(统计区域,条件)&#xff0c;在本例第一个公式COUNTIF(B:B,G2)中&#xf…

《栈~~队列~~优先级队列》

目录 前言&#xff1a; 1.stack 1.stack的介绍 2.stack的使用&#xff1a; 3.stack的模拟实现 4.有关stack的oj笔试题 2.queue 1.队列的介绍 2.队列的使用 3.队列的模拟实现 4.有关队列的oj笔试题 3.priority_queue 1.优先级队列的介绍 2.优先级队列的使用 3.优先级队列的模拟实…

挥别2022,坦迎2023。

第一章&#xff1a;CSDN&#xff0c;我来啦&#xff01;第一节&#xff1a;初遇&#xff01;2022-08-13&#xff0c;我和CSDN相遇啦&#xff01;CSDN&#xff0c;你好呀&#xff01;2022年8月13日&#xff0c;是我与你相遇的日子。这是一个值得纪念的时刻。从此之后&#xff0c…