关于windows:UAC实现原理

7次阅读

共计 2350 个字符,预计需要花费 6 分钟才能阅读完成。

UAC 实现原理:

  • 当用户登录零碎胜利后,零碎会为用户生成一个 accessToken。该用户调用的每一个过程都会有一个 AccessToken copy。当过程要拜访某个 securable object 时,零碎会比对 accessToken 领有的权限(previlages 是否能拜访 securable object)
  • 如果平安描述符中不存在 DACL,则零碎会容许线程进行拜访。如果存在 DACL,零碎会程序遍历 DACL 中的每个 ACE,查看 ACE 中的 SID 在线程的 AccessTkoen 中是否存在。以访问者中的 User SID 或 Group SID 作为关键字查问被拜访对象中的 DACL。程序:先查问类型为 DENY 的 ACE,若命中且权限合乎则拜访回绝;未命中再在 ALLOWED 类型的 ACE 中查问,若命中且类型合乎则能够拜访;如果前两步后还没命中那么拜访回绝。

相干概念:
ntoskrnl.exe: ntoskrnl.exe 是 Windows 操作系统的一个重要内核程序文件,外面存储了大量的二进制内核代码,用于调度零碎。
Windows 执行体: Windows 执行体是 ntoskrnl.exe 中的下层(内核是其上层)。
对象管理器(Object Manager): 创立、治理和删除 Windows 执行体对象和抽象数据类型,他们(抽象数据类型)代表了操作系统资源,比方过程、线程和各种同步对象。

环境子系统: 环境子系统是操作系统中名词。环境子系统向应用程序提供环境和应用程序编程接口 (Appplication Programming Interface, API)。Windows 2000/XP 反对三种环境子系统:Win32、POSIX 和 OS/2,其中最重要的环境子系统是 Win32 子系统,其余子系统都要通过 Win32 子系统接管用户的输出和显示输入。环境子系统的作用是将根本的执行体零碎服务的某些子集提供给应用程序。用户应用程序调用零碎服务时必须通过一个或多个子系统动态链接库作为中介才能够实现。
执行体对象: 每个 Windows 环境子系统总是把操作系统的不同风貌出现给它的应用程序。执行体对象和对象服务是环境子系统用于构建其自有版本的对象和其余资源的根底。
平安描述符(Security descriptors): 是平安信息的数据结构(SECURITY_DESCRIPTOR),用于可平安(securable)的 Windows 对象,这些对象能够被惟一名称辨识。平安描述符可用于任何命名对象,包含文件、文件夹、共享、注册表键、过程、线程、命名管道、服务、工作对象以及其余资源。

  • 版本号:创立此描述符的 SRM 平安模型的版本;
  • 标记:一些可选的修饰符,定义了该描述符的行为或特色。表 6.5 列出了这些标记;
  • 所有者 SID:所有者的平安 ID
  • 组 SID:该对象的主组的平安 ID(仅用于 POSIX)
  • 自主访问控制列表(discretionary access control list,DACL):规定了谁能够用什么形式拜访该对象。
  • 零碎访问控制列表 (System Access Control List,SACL) 规定了哪些用户的哪些操作应该被记录到平安审计日志中,以及对象的显式完整性级别。
typedef struct _SECURITY_DESCRIPTOR {  
  UCHAR  Revision;  
  UCHAR  Sbz1;  
  SECURITY_DESCRIPTOR_CONTROL  Control; // 其本身的一些管制位  
  PSID  Owner; //Owner 平安标识符(Security identifiers) 相当于 UUID,标识用户、用户群、计算机帐户  
  PSID  Group; //Group 平安标识符(Security identifiers) 相当于 UUID  
  PACL  Sacl; //(System Access Control List),其指出了在该对象上的一组存取形式(如,读、写、运行等)的存取控制权限细节的列表。PACL  Dacl; //(Discretionary Access Control List),其指出了容许和回绝某用户或用户组的存取控制列表。如果一个对象没有 DACL,那么就是说这个对象是任何人都能够领有齐全的拜访权限。} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;  
  
typedef struct _ACL {  
    BYTE  AclRevision;  
    BYTE  Sbz1;  
    WORD   AclSize;  
    WORD   AceCount;  
    WORD   Sbz2;  
} ACL, *PACL;  

平安标识符 (Security Identifier,SID): 是 Windows 操作系统应用的举世无双的,不变的标识符用于标识用户、用户群、或其余平安主体。
可移植操作系统接口(POSIX): 是 IEEE 为要在各种 UNIX 操作系统上运行软件,而定义 API 的一系列相互关联的规范的总称。
访问控制项(access control entries,ACE):
平安描述符: 蕴含自主决定的访问控制表(DACL),外面蕴含有访问控制项(ACE),因而能够容许或回绝特定用户或用户组的拜访。它们还蕴含一个零碎访问控制列表(SACL)以管制对象拜访申请的日志(logging)。2ACE 能够显式利用于对象,或者从父对象继承。ACE 的程序在 ACL 中很重要,回绝拜访的 ACE 应该比容许拜访的 ACE 更早呈现。平安描述符还蕴含对象所有者。
访问控制列表(access control list,ACL): 访问控制列表 (ACL,access-control list) 是由一个头和零个或多个访问控制项 (ACE, access-control entry) 构造组成的。共有两种类型的 ACL: DACL 和 SACL。在 DACL 中,每一个 ACE 蕴含一个 SID 和一个拜访掩码。


<!– more –>

正文完
 0