Windows ACL Model 基本概述
基本概念
- SID:Secure Identifier(安全标识符),每个用户和账户组都有一个唯一的SID(通常情况下唯一)。它是标识用户、用户组和计算机账户唯一的号码,
-
Access Token:与特定的windows账户关联,账户环境下启动的所有进程都会获得该令牌的副本,进程中的线程默认获得这个令牌。由关联账户的SID、当前登录账户所属组的SID列表、受限制的SID列表、当前登录账户与所属组的Privilege列表组成。
-
Account SID
- Group SID
- logon SID
- privileges administrator 授权给user的特权,
-
- Security Descriptor:安全描述符,与被访问对象关联。由对象所有者的SID、group SID、DACL、SACL组成。DACL描述允许或拒绝特定用户或组的某些访问权限,它包含零个或多个访问控制实体(ACE,Access Control Entry)
- owner SID
- primary group SID
- DACL
discretionary access control list. -
SACL
- system ACL (SACL). SACL 主要包括为访问尝试生成系统监控报告的权限。每个SACE都包括一个trustee,一个权限集合, 以及一个flag结合来表示访问成功和访问失事件,哪些需要被记录,或者全部记录。所有的监听消息最终都写入event-log
The system writes audit messages to the security event log. For information about accessing the records in a security event log, see Event Logging.
-
ACE 访问控制实体,用于指定特定用户/组的访问权限
- user or group SID
- Access Mask object 访问权限
- ACE Flag 是否让子目录继承
- ACE Type Allow or Deny
windows 访问控制的基本流程
- 当用户登录系统成功后, 系统会为用户生成一个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中查询,若命中且类型符合则可以访问;以上两步后还没命中那么访问拒绝
ACE
order of ACE
The following steps describe the preferred order:
- 显式ACE在继承ACE之前
- 对于显式ACE denyACE 在 allowACE 之前
- 继承的ACE按照继承树的倒序排列。先父节点ACE,再祖先节点ACE。
- 对于同一层的ACE,denyACE在AllowACE 之前
Automatic Propagation of Inheritable ACEs
The system uses the following rules when propagating inherited ACEs to child objects:
- 如果子对象没有DACL,子对象直接继承ACE
- 如果子对象有空DACL, 子对象直接继承ACE
- 如果从父对象删除可继承ACE, 删除自对象继承的该ACE副本
- 如果自动删除造成自对象的DACL为空, 保留空DACL
空DACL和没有DACL的区别在于,空DACL没有任何权限, 没有DACL表示允许任何操作。
ACE inheritance flag(待分析)
父 ACE flag | 对子ACL 的影响 | |
---|---|---|
OBJECT_INHERIT_ACE | 只有子文件继承 | |
CONTAINER_INHERIT_ACE | 只有子目录继承 | |
CONTAINER_INHERIT_ACE and OBJECT_INHERIT_ACE | 子目录和自文件都继承 | |
No inheritance flags | 不继承 | . |
Access mask
- access mask 和权限的对应关系
- Generic Access Rights, 所有securable object 通用权限
Constant | Generic meaning |
---|---|
GENERIC_ALL All | possible access rights |
GENERIC_EXECUTE | Execute access |
GENERIC_READ | Read access |
GENERIC_WRITE | Write access |
- Standard Access right,大多数securable object 通用权限
Constant | Meaning |
---|---|
DELETE | The right to delete the object. |
READ_CONTROL | The right to read the information in the object's security descriptor, not including the information in the system access control list (SACL). |
SYNCHRONIZE | The right to use the object for synchronization. This enables a thread to wait until the object is in the signaled state. Some object types do not support this access right. |
WRITE_DAC | The right to modify the discretionary access control list (DACL) in the object's security descriptor. |
WRITE_OWNER | The right to change the owner in the object's security descriptor. |