Windows 权限管理

来源:互联网 发布:手机有淘宝助理吗 编辑:程序博客网 时间:2024/06/08 05:32

Windows 权限管理

基础概念

管理员用户是被授予高特权(安全令牌)的账户。
标准用户是被授予标准权限(筛选令牌)的账户。

用户与权限

在windows vista之前,用户登录,就会创建一个安全令牌(security token),当代码试图访问受保护的安全资源时,os会出示这个安全令牌。从包括windows资源管理器在内的第一个进程开始,这个令牌会与新建的所有进程关联。在windows vista及之后,用户登录,若是使用管理员登录,则会创建两个令牌,一个是安全令牌,一个是筛选令牌。筛选令牌只被授予标准用户的权限。从包括windows资源管理器在内的第一个进程开始,这个令牌会与系统代表最终用户启动的所有新进程关联。

UAC

标准权限的应用程序如何访问需要高权限的受限资源?
可以要求os提升权限,但权限只能在进程边界提升。也就是一旦进程启动后,就不能提升权限,进程在启动时,它会与当前登录用户的筛选令牌进行关联。
应用程序提升权限方式
右键run as Admininstrator,若是管理员用户,则提升权限确认对话框。若是标准用户,则登录凭证对话框,要求输入具有提升权限的账户的登录凭证。

提升权限确认对话框的三种类型:

  • 蓝色横幅,应用程序是系统的一部分
  • 灰色横幅,应用程序进行了签名
  • 橙色横幅,应用程序没有签名
进程提升权限方式

自动提升

  1. manifest嵌入到可执行文件的资源中 (优先级高)
  2. manifest保存到可执行文件的目录中,名称与可执行文件相同,扩展名为.manifest
    除通过xml manifest来明确设置所需的权限,os也会只能判断一个程序是不是安装程序,若是,则提升权限对话框/登录凭证对话框,若不是安装程序,则由最终用户自行决定是否以管理员身份启动进程(属性->兼容性)。
手动提升
ShellExecuteEx函数

权限上下文

如何判断应用程序是否已管理员身份运行?
如何判断使用的提升权限(安全令牌),还是使用标准权限(筛选令牌)?

  1. 先判断进程使用的令牌是否是筛选令牌GetTokenInformation
  2. 在判断进程运行的用户身份是否是管理员
    若是安全令牌(未筛选令牌,权限被成功提升),IsUserAnAdmin函数判断是否管理员用户。
    若是筛选令牌,先获取安全令牌的相关信息看是否包含管理员的SID。

windows 完整性机制

安全描述符SID
访问控制列表ACL
系统访问控制列表SACL
在sacl中新增了强制标签的访问控制项ACE,来为受保护的资源分配一个完整性级别(integrity level)。默认没有ACE的安全对象,os默认其拥有Medium完整性级别。
每一个进程都有一个基于其安全令牌的完整性级别
完整性级别的比较在ACL之前(进程的完整性级别与内核对象的完整性级别)

级别 示例 低 IE 中 默认使用中信任级别,并使用一个筛选过的令牌 高 若应用程序使用提升后的权限启动,则以高信任级别来运行 系统 Local System或Local Service的身份运行的进程,才能获得这个信任级别

tools: AccessChk,可以列出访问文件、文件夹、注册表项等各种资源所需的完整性级别。

用户界面特权隔离UIPI

原创粉丝点击