有关于一次windows权限方面的一次学习
由于最近需要使用windows的Local Group Policy的API,重新梳理一些有关windows权限的只是,这样需要理解一些关键概念,这些概念之间的关联联系形成了一张网络图。必须理解才能真正理解新东西的知识体系。
以前对这些东西都是一知半解的,什么安全描述符,安全对象等等都不太明白。
1.关键名词概念解释
- 安全对象------带有安全描述符的对象,比如文件对象,目录对象,命名管道对象,匿名管道对象,进程对象,线程对象,访问令牌,注册表键,windows服务等。
- 访问控制列表(ACL)-----与一个对象关联的安全属性列表,该列表描述了这个对象的安全访问控制的属性。这个对象一般就是win32 的安全对象,可以是一个文件,一个进程,
- 一个事件(Event),或其他带有安全描述符的对象。一个ACL是由多个访问控制项(ACE)组成的,windows有两种类型的ACL,分别是任意访问控制列表(discretionary ACL)和系统控制访问列表(system ACL)
- 访问控制项(ACE)-------多个ACE组成了一个ACL,可以把它想象成一个数组里面的元素。一个ACE包含了一组访问权限(execute, write,read等)和一个安全ID(SID), 这个ID标识了这组访问权限是允许,是拒绝,还是需要受到检查才能访问。比如,一个文件对象一个ACL列表中的其中一项就标记了这个文件不可写或者不可读。至于有哪些权限,可以看这里: https://msdn.microsoft.com/en-us/library/windows/desktop/aa374902(v=vs.85).aspx
- 访问令牌(Access Token)------是一个与一个进程或线程关联的对象,它描述了进程或线程的安全上下文。令牌中包含了与用户账户关联的进程或线程的标识和权限,当一个用户登录系统时,系统首先校验用户账户的密码(正确的密码存储在windows系统的安全数据库中),如果通过登陆成功,系统会生成与这个用户账户关联的访问令牌,之后这个用户执行启动的每个进程或线程都会复制这个访问令牌作为自己的令牌。令牌标识了用户,用户所属的组,以及用户的权限。系统用这个令牌来控制访问安全对象,还有控制限制用户的系统相关的操作。访问令牌本身也是安全对象,因为需要控制它是否可读写等等。关于令牌更详细的请看:https://msdn.microsoft.com/en-us/library/windows/desktop/aa374909(v=vs.85).aspx
- 任意访问控制列表(DACL)-----对对象持有者控制访问对象,并标明特定的用户,特定的组是否能持有对象。简单一句话就是说,定义哪个用户,或哪个用户所属的组访问该对象的权限。举个例子,当一个进程试图访问一个安全对象的时候,系统就检查检查该安全对象的DACL的每个ACE项,逐个与该进程的访问令牌作对比,来决定是否授权访问给进程。如果一个安全对象没有DACL,系统就会授予该对象的所有访问权限给任何用户,如果一个安全对象有DACL,但是DACL里面没有ACE,那么系统会拒绝对该对象的任何访问。
- 系统访问控制列表(SACL)-----使系统管理员对一个安全对象的所有访问都以日志记录访问的备份,可以简单理解为,访问记录的一个表。暂时不用深入理解。
- 登陆会话(logon session)----登陆会话开始于用户登录电脑的那一刻,所有进程在登陆会话中都有一个同样的primary访问令牌,该令牌中的信息主要包括,用户的SID,登陆的ID,还有登陆SID
- 登陆SID(logon SID)------登陆会话的安全描述ID,该ID直到用户注销前都有效。在登陆后,SID都是唯一的,不同的登陆会话就有不同的登陆SID,计算机启动时,可能会重置一组登陆SID,可以从访问令牌中检索登陆SID,调用GetTokenInformation函数
2.知识体系图

以上的图应该很直接的说明这些概念是怎样协同工作的了。下面以文本方式讲解工作机制:
系统将每个 ACE 的trustee与线程的访问令牌中标识的trustee进行比较。访问令牌包含标识用户所属的用户和组帐户的安全标识符 (sid)。访问令牌还包含标识当前登录会话的登录 sid。在访问检查过程中, 系统忽略未启用的组 sid。通常, 系统使用请求访问的线程的主访问令牌来访问安全对象。但是, 如果线程模拟另一个用户, 则系统使用线程的模拟令牌。
系统将依次检查DACL中的ACE,直到下列事件发生:
- 访问被拒绝的 ACE 显式拒绝对线程访问令牌中列出的某个trustee所请求的访问权限。
- 一个或多个允许访问的 ACE显式授予在线程访问令牌中它所负责的trustee所有请求的访问权限。
- 所有的 ACE 都已被检查, 并且至少还有一个请求的访问权限未被明确允许, 在这种情况下, 访问被隐式拒绝。
下面看图说话:
对于线程 A, 系统读取ACE, 并立即拒绝访问, 因为拒绝访问的 ACE 适用于线程的访问令牌中的用户。在这种情况下, 系统不检查 ACE 2和ACE 3。对于线程 B, ACE 1不适用, 因此系统将进入 ACE 2, 允许写入访问, 然后进入下一个ACE3, 并且 ACE 3 允许读取和执行访问。
由于系统在明确授予或拒绝请求的访问时会停止检查下一个ACE, 因此 DACL中的 ACL排列 顺序非常重要。请注意, 如果该图片示例中的 ACE 顺序不同, 则系统可能已授予对线程 A的访问权限。
更多的请参考:https://msdn.microsoft.com/en-us/library/windows/desktop/aa379298(v=vs.85).aspx
3.注意事项
不要直接修改ACL的内容,需要通过微软专门提供的API来做,下面有参考资料:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms717798(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/aa446659(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/aa446596(v=vs.85).aspx
references:
http://blog.csdn.net/xbgprogrammer/article/details/16818973
https://msdn.microsoft.com/en-us/library/windows/desktop/aa446683(v=vs.85).aspx
有关于一次windows权限方面的一次学习的更多相关文章
- [ Windows BAT Script ] BAT 脚本获取windows权限
BAT 脚本获取windows权限 @echo off echo I am trying to run as Administrator %1 %2 ver|find "5."&g ...
- Windows权限维持总结
windows权限维持 注册服务 sc create 服务名 binpath= "cmd.exe /k 木马路径" start="auto" obj=" ...
- windows下sqli-labs的搭建及学习(POST篇)
windows下sqli-labs的搭建及学习(GET篇): http://blog.csdn.net/sherlock17/article/details/64454449 Less-11:基于错误 ...
- 新手入门 : Windows Phone 8.1 开发 视频学习地址
本视频资源来自Microsoft Virtual Academy http://www.microsoftvirtualacademy.com/ 下面为视频下载地址! 新手入门 : Windows P ...
- windows权限错误
1.installer "内部错误 2203 C:\WINDOWS\Installer\354787.ipi,-2147287035” 用户的local\Temp目录没有system权限 2 ...
- Windows权限提升基础知识和命令
介绍 这篇文章是介绍window的权限提升,虽然不是一个全面的指南,但会试图覆盖主要的技术,常用的资源列表在文章底部,可供大家参考. window权限提升基础知识 初始信息收集 在开始提权之前,我们需 ...
- Windows权限维持
前言 最近终于不是那么忙了,有时间静下心来学点知识,这篇文章自起稿到发布,用时近三周,其中有近一周的时间在迷茫在焦躁,甚至怀疑.否定自己.网上的表哥们个顶个儿的优秀,于是就给自己很大的压力,所以那一个 ...
- python 添加Windows权限
# -*- coding: utf-8 -*- """ Created on Mon Jan 8 09:09:51 2018 @author: coordinate &q ...
- CVE-2018-8120 Windows权限提升
来源 : bigric3/cve-2018-8120 Detail : cve-2018-8120-analysis-and-exploit 演示图 下载 CVE-2018-8120.zip
随机推荐
- AccessText热键的使用
AccessText可以用于Label与别的控件(常用于TextBox)绑定热键.也可以单独给别的控件设置热键 1.可以在label中使用AccessText 代码: <Label Horizo ...
- Recover Binary Search Tree leetcode java
题目: Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without chan ...
- js获取当前域名、Url、相对路径和参数
用 Javascript 可以单独获取当前域名.Url.相对路径和参数,所谓单独攻取,即域名不包括网页文件的路径和参数.参数不包括域名和网页文件路径,下面分别介绍. 一.js获取当前域名有2种方法 1 ...
- listview加载数据
首先我们需要理清思路:使用ListView显示数据是很方便的,ListVIew的数据之间通过适配器adapter去作为桥梁连接起来.当我们需要使用listview显示大量数据的时候,我们需要使用到分页 ...
- iis 防火墙防止恶意ip攻击
今天发现服务器里,一个IP不停的占用我的网络资源,然后在防火墙里配置,将其禁止访问,网络很快降了下来. 这个恶意的IP是 115.171.60.62
- ERROR: In <declare-styleable> MenuView, unable to find attribute android:preserveIconSpacing
eclipse sdk从低版本号切换到高版本号sdk的时候 v7包会包这个错ERROR: In <declare-styleable> MenuView, unable to fin ...
- ASP入门(十一)-Session小案例
一般来说,在实际开发中,对于 Session 对象使用最多的就是用户登录部分了,这个案例将简单模拟一个用户登录表单.用户是否登录的判断以及用户退出的一系列功能,它一共分了以下几个页面. Login.a ...
- guava 学习笔记 瓜娃(guava)的API快速熟悉使用
1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection API Guava Basic Utilities IO API C ...
- ArcGIS 10.4的0x80040228许可错误
今天,再次遇到这个问题,再忙得把它记录下来! AO/AE程序的许可方式 不管是开发环境是基于ArcObject还是基于ArcEngine,不管运行环境是Desktop还是Runtime(早已改名了为A ...
- ASP.NET Hashtable输出JSON格式数据
最近在开发Windows8 Metro App,使用JavaScript和HTML开发环境.所以操作数据绑定都是使用JSON格式数据.后台使用的是ASP.NET,因为项目相对较小,所有后台没有使用数据 ...