trustee(受托人)
一个ACE使用的用户账户、组或登录会话。ACE属于ACL,ACE有一个SID来标识一个trustee。
当前登录会话的SID是logon SID,用于在注销前准许或拒绝访问权限很方便。
TRUSTEE结构见TRUSTEE_A (accctrl.h) - Win32 apps | Microsoft Docs
这个结构准许使用名称字符串或SID来标识一个trustee。
如果使用名称,通过TRUSTEE创建ACE时,需要通过名称确定对应的SID。BuildTrusteeWithSid and BuildTrusteeWithName函数通过名称或SID转换成对应的TRUSTEE结构。
BuildTrusteeWithObjectsAndSid and BuildTrusteeWithObjectsAndName函数通过ACE转换成对应的TRUSTEE结构。
TRUSTEE结构的ptstrName成员是OBJECTS_AND_NAME or OBJECTS_AND_SID的指针。这些指针提供和ACE所属对象有关的信息。
SID简介
是长度可变的,标识trustee的唯一值。
每个账户有一个授权者分配的唯一SID,存在安全数据库中。用户登录时,系统从数据库获得SID并放在用户的访问令牌中。
使用场景:
安全描述符中标识对象的拥有者,安全描述符中标识首要组
ACE中标识本条目的trustee
访问令牌中标识用户属于的用户或组
有一些代表固定用户或组的SID:Well-known SIDs - Win32 apps | Microsoft Docs
操作SID的函数列表:Security Identifiers - Win32 apps | Microsoft Docs
SID构成
SID值既包含SID相关的信息也包含唯一标识trustee的信息。组成结构包括:
- SID结构版本
- 48比特的值标识产生SID的授权者(identifier authority)
- 可变数量的子授权(subauthority)者或RID(relative identifier),RID唯一标识产生SID的授权者有关的trustee
- identifier authority和subauthority确保没有相同的SID。
- SID遵循的模式是:S-R-IA-SA-SA-RID:
- 字母S指明这是一个SID标识符,它将数字标记为一个SID。
- R代表Revision(修订),Windows生成的所有SID都使用修订级别 1.
- IA代表颁发机构。在Widnwos中,几乎所有SID都指定NT机构作为颁发机构,它的ID编号为5.但是,代表已知组和账户的SID例外。
- SA代表一个子机构。SA指定特殊的组或职能。例如、21表明SID由一个域控制器或者一台单机颁发。随后的一长串数字(1683771068-12213551888-624655398)就是颁发SID的那个域或机器的SA。
- RID是指相对ID(RID)、是SA所指派的一个惟一的、顺序的编号、代表一个安全主体(比如一个用户、计算机或组)
查看SID
开始-运行-regedt32-HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin\Aliases\Members,找到本地的域的代码,展开后,得到的就是本地帐号的所有SID列表。
其中很多值都是固定的,比如第一个000001F4(16进制),换算成十进制是500,说明是系统建立的内置管理员帐号administrator,000001F5换算成10进制是501,也就是GUEST帐号了,详细的参照后面的列表。
这一项默认是system可以完全控制,这也就是为什么要获得这个需要一个System的Cmd的Shell的原因了,当然如果权限足够的话你可以把你要添加的帐号添加进去。
或者使用Support Tools的Reg工具:
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
还有一种方法可以获得SID和用户名称的对应关系:
1. Regedt32:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion \ProfileList
2. 这个时候可以在左侧的窗口看到SID的值,可以在右侧的窗口中ProfileImagePath看到不同的SID关联的用户名,
比如%SystemDrive%\Documents and Settings\Administrator.momo这个对应的就是本地机器的管理员SID
%SystemDrive%\Documents and Settings\Administrator.domain这个就是对应域的管理员的帐户
另外微软的ResourceKit里面也提供了工具getsid,sysinternals的工具包里面也有Psgetsid,其实感觉原理都是读取注册表的值罢了,就是省了一些事情。