有关于一次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
随机推荐
- Twitter雪花算法 SnowFlake算法 的java实现
概述 SnowFlake算法是Twitter设计的一个可以在分布式系统中生成唯一的ID的算法,它可以满足Twitter每秒上万条消息ID分配的请求,这些消息ID是唯一的且有大致的递增顺序. 原理 Sn ...
- Unicode与JavaScript详解 [很好的文章转]
上个月,我做了一次分享,详细介绍了Unicode字符集,以及JavaScript语言对它的支持.下面就是这次分享的讲稿. 一.Unicode是什么? Unicode源于一个很简单的想法:将全世界所有的 ...
- javaScript:让文本框内的最后一个文字的后面获得焦点
//当失去交点以后 让文本框内的文字获得焦点 并且光标移到最后一个字后面 function myfocus(myid) { if(isNav){ document.getElementById(myi ...
- windows 查看动态连接库和静态连接库的方法
在window下查看动态库的导出函数可以用vs自带的Dependenc工具: 查看静态库的信息要用命令行来实现: dumpbin /LINKERMEMBER Test.lib > ...
- ueditor插入自定义内容和样式
UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点 通过UEditor提供的API接口可以很方便的读写操作内容并设置编辑器里的样式 页 ...
- GIT 使用cherry-pick 重演其他分支的提交
在使用Git时是否会遇到这样的问题: 你正在使用Git进行版本控制,某天你接着昨天的工作了提交了N个提交,结果在合并远程分支的时候才发现原来你在工作之前没有注意到你要提交的分支状态 结果导致你本来要提 ...
- [RxJS] Build your own RxJS
JavaScript has multiple APIs that use callback functions that all do nearly the same thing with slig ...
- 使用Snap.svg类库实现的抖动式的幻灯播放效果
在线演示 本地下载 这个幻灯中,使用了SVG来生成具有动画弧度的幻灯背景效果,如果你在项目中能够支持现代浏览器的话,尝试一下这个效果吧,很赞! 想了解基础使用,观看这个轻视频吧:Snap.svg处理和 ...
- Android Toast 使用总结
本文内容 环境 演示 Toast 使用 环境 Windows 2008 R2 64 位 Eclipse ADT V22.6.2,Android 4.4.3 三星 SM-G3508,Android OS ...
- redis-dev
redis install by centos -------------------------------------------------------------------------- ...