windows的访问控制机制

一、基本概念:

1、A访问B,A就是访问的主体,B就是访问的客体。A的令牌和B的安全描述符共同决定A是否可以问B。

  访问的主体的进程。因为线程没有自己的权限,而是来源于线程所属于的进程。一个进程中的所有线程都具有同样权限,因此可以把进程的权限看作访问的主体。

  访问的客体是安全对象,所有被访问的对象都具有安全描述,包括文件、注册表、事件(Evnet)、互斥(Mutex)、管道等。

 

2、进程-----访问令牌

  访问令牌:是操作系统专门表示用户的权限的数据结构。有两部组成,一个是令牌所表示的用户(如:用户标识符SID)及用户组等,另一个部分是“权限”(privilege)

  备注:权限是一个列表,每种取限是列表中一项。权限列表存在于进程的访问令牌中。

3、对象-----安全描述符

  安全描述符:是安全属性(SECURITY_ATTRIBUTES结构体)的表示形式,其包括访问控制列表(ACL)。

  访问控制列表有两种:一种是选择访问控制列表(discretionary access control list,DACL),另一种是系统访问控制列表(system access control list,SACL)。DACL决定了用户和用户组能否访问这个对象,SACL控制了尝试访问安全对象的检测信息的继承关系(这个我也不太清楚)。

  备注:DACL是访问控制的常用信息,DACL中包括一个访问控制入口(AccessControlEntries,ACE)列表。ACE表明了用户是否能进行操作以及能进行哪种操作。系统在进行访问控制检测时,会依次检测DACL中的ACE,直到被允许或被拒绝因此在列表前端的ACE优于列表后端的ACE。

二、具体对应的操作

1、进程访问安全对象时,只会用到SID,与进程的权限无关。

2、进程进行特殊操作时,用到的是权限,例如:如关闭系统、修改系统时间、加载设备驱动等。

3、创建进程相关API

  (1)CreateProcess(),该函数所创建的进程使用的访问令牌是当前登录用户的访问令牌。

  (2)CreateProcessAsUser()和CreateProcessWithTokenW()等,可以指定用户令牌,需要使用LogonUser()登录用户,通过LogonUser()函数的返回值得到用户令牌。

 

posted @ 2016-05-30 15:27  verbs  阅读(3905)  评论(0编辑  收藏  举报