windows安全对象学习

xiaoxiao2021-02-28  123

(此处为转载)对于操作者(例如进程) 访问令牌,权限,用户标识 进程的权限继承自创建进程用户和用户所属的用户组(表明权限可以继承)。 而每个用户有专门的数据结构来表示权限-访问令牌(Access token) 访问令牌包含两个部分: 1.令牌所表示的用户,包括用户标识符(SID),用户所属的用户组 2.权限(Privilege) 令牌用来访问安全对象,权限用来表示进程是否能够进行特定的系统操作,如关闭系统,修改系统时间,加载驱动等。 对于安全对象有: 访问控制列表ACL,这是每个对象都有的一个列表 DACL和SACL构成了整个存取控制列表Access Control List,简称ACL,ACL中的每一项,我们叫做ACE ACL包含两种表: 1.选择访问控制列表(DACL),该列表决定了用户或用户组是否能访问这个对象 DACL表又包含了一张ACE的表,ACE表明了用户(通过用户SID或用户组SID)是否能进行操作以及能进行哪种操作, 例如:1ACE win7user read,2ACE groupA write,3ACE everyone read(ACE有顺序关系,顺序很重要) 2.系统访问控制列表(SACL),控制了尝试访问安全对象的检测信息的继承关系 用户或用户组SID (此处为转载)所谓SID就是每次当我们创建一个用户或一个组的时候,系统会分配给改用户或组一个唯一SID, 当你重新安装系统后,也会得到一个唯一的SID。SID是唯一的,不随用户的删除而分配到另外的用户使用。 SID永远都是唯一的SIF是由计算机名、当前时间、当前用户态线程的CPU耗费时间的总和三个参数决定以保证它的唯一性。 例:   S-1-5-21-1763234323-3212657521-1234321321-500 (经常在注册表中看见这样的路径) typedef struct _SECURITY_DESCRIPTOR {   UCHAR  Revision;   UCHAR  Sbz1;   SECURITY_DESCRIPTOR_CONTROL  Control;   PSID  Owner; //OwnerSid,用户Sid   PSID  Group; //GroupSid,用户组Sid   PACL  Sacl;     //SACL,系统访问控制列表(SACL),控制了尝试访问安全对象的检测信息的继承关系   PACL  Dacl;    //DACL,选择访问控制列表(DACL),该列表决定了用户或用户组是否能访问这个对象 } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR; typedef struct _ACL {     BYTE  AclRevision;     BYTE  Sbz1;     WORD   AclSize;     WORD   AceCount;     WORD   Sbz2; } ACL;

typedef ACL *PACL;

涉及的API一般有

SetSecurityInfo,SetFileSecurity,SetNamedSecurityInfo,ZwSetSecurityObject,SetKernelObjectSecurity

api中有些参数为直接使用要设置安全对象的名称,有些通过handle值进行设置。

通过handle获取对象名称或者类型:

handle值->handle表->object地址->object header->对象类型,名称

转载请注明原文地址: https://www.6miu.com/read-66114.html

最新回复(0)