有关于一次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
随机推荐
- iOS开发-UIScreenEdgePanGestureRecognizer实战
UIScreenEdgePanGestureRecognizer名字很长,而且关于其文档也是少的的可怜,苹果官方给的唯一的一个属性是edges,文档中的解释是这样的: A UIScreenEdgePa ...
- laravel 5.5 整合 jwt 报错Method Tymon\JWTAuth\Commands\JWTGenerateCommand::handle() does not exist解决
今天介绍一个在laravel5.5新版本整合jwt 执行 php artisan jwt:generate 再生成密钥时报的一个错误 Method Tymon\JWTAuth\Commands\JW ...
- MongoDB 通过配置文件启动
mongod启动命令需指定一些参数启动服务,我们通过配置文件的方式配置这些参数加载配置. ./bin/mongod --config ./conf/mongodb.conf(或./bin/mongod ...
- Win10系统80端口被系统进程占用
一.问题 有系统需要用到80端口,为了方便,但是发现80端口被占用,执行netstat -ano 发现80端口竟然被一个System process占用了,当然这个是不能被杀掉的 二.解决问题 在网上 ...
- extjs_08_界面布局
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWRhbV93enM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- 【Python】使用geopy由地址找经纬度等信息
代码: from geopy.geocoders import Nominatim geolocator = Nominatim() location = geolocator.geocode(&qu ...
- HDU1069(还是dp基础)
今天不想说太多废话-由于等下要写自己主动提交机. 不知道能不能成功呢? 题目的意思就是,一个猴子,在叠砖头 ...以下的要严格大于上面的.求叠起来最高能到多少- n非常少,n^2算法毫无压力-话说dp ...
- SpringMVC框架使用注解执行定时任务(转)
首先要配置我们的SpringMVC文件 xmlns 加下面的内容: xmlns:task="http://www.springframework.org/schema/task" ...
- Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解
Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解 一.Jquery遍历筛选数组 1.jquery grep()筛选遍历数组 $().ready( function(){ v ...
- LintCode: Identical Binary Tree
C++ /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; ...