分类:
2010-07-20 15:57:54
标准属性标题?
安全描述符可总结如下:
成份 | 描述 | ||
---|---|---|---|
Header | 到不同结构的偏移量 | ||
Audit ACL | ACE | SID | 审计 ACL的ACEs |
Permissions ACL | ACE | SID | 许可 ACL的 ACEs |
ACE | SID | ||
ACE | SID | ||
SID (User) | 对象的所有者 | ||
SID (Group) |
安全描述符对于阻止未经授权访问文件的情况是必要手段。它存储以下信息:
就像在 中定义的,此属性没有上下限。
偏移量 | 大小 | 描述 |
---|---|---|
0x00 | 1 | 标题 1 |
0x01 | 1 | 标题 2 |
0x02 | 1 | 标题 3 |
0x03 | 1 | 标题 4 |
0x04 | 4 | 到用户 SID的偏移量 |
0x08 | 4 | 到群组 SID的偏移量 |
0x0C | 4 | ACL 审计 |
0x10 | 4 | ACL 许可 |
标题域可能是某些标记,没有任何说明。
标题1好像总是0x01
标题2好像总是0x00
标题3是0x04 或 0x14,如果是0x04 那么无审计信息;如果是0x14则有审计信息。
标题4好像总是0x80
这里有4个偏移量域。如果标题域里有4比特(位),那么所有4个偏移量都在用。
如果有3比特(位)则3个偏移量在用。 巧合?
偏移量 | 大小 | 描述 |
---|---|---|
0x00 | 1 | ACL 修订 |
0x01 | 1 | 填料 (0x00) |
0x02 | 2 | ACL 大小 |
0x04 | 2 | ACE 计数 |
0x06 | 2 | 填料 (0x0000) |
访问控制列表(ACL)包含一个或更多的ACE。
ACL修订在我的机子上是0x02。
WIN32 API建议0x01 和 0x06包含为形成队列的0x00填料。
偏移量 | 大小 | 描述 |
---|---|---|
0x00 | 1 | 类型 |
0x01 | 1 | 标记 |
0x02 | 2 | 大小 |
0x04 | 4 | 访问屏蔽 |
0x08 | V | SID |
现在执行的类型(在NT里):
值 | 描述 |
---|---|
0x00 | 访问许可 |
0x01 | 访问拒绝 |
0x02 | 系统审计 |
标记是一个比特域。标记可能的值取决于类型值。当应用到一个目录时,访问许可和 访问拒绝可以标记为
值 | 描述 |
---|---|
0x01 | 对象延续的 ACE |
0x02 | 容器延续的 ACE |
0x04 | 不传播 '延续的 ACE' |
0x08 | 只延续 ACE |
如果类型是系统审计,那么标记可为
值 | 描述 |
---|---|
0x40 | 成功审计 |
0x80 | 失败审计 |
访问屏蔽 / 权利 是一个比特域,列举了所有 (不)允许的动作。
比特 (范围) | 含义 | 描述 / 例子 |
---|---|---|
0 - 15 | 对象特定的访问权 | 读数据, 执行, 增补数据 |
16 - 22 | 标准访问权 | 删除, 写 ACL, 写所有者 |
23 | 可以访问安全 ACL | |
24 - 27 | 保留的 | |
28 | 一般的所有 (读, 写, 执行) | 所有下面的 |
29 | 一般执行 | 所有需要执行一个程序的事 |
30 | 一般写 | 所有需要写入一个文件的事 |
31 | 一般读 | 所有需要读取文件的事 |
一个典型的SID看起来象:S-1-5-21-646518322-1873620750-619646970-1110
它由'S-p-q-r-s-t-u-v'组成。
S | 安全 |
p | 修订号 (当前是1) |
q | NT 著作权. 这个数值分为6个字节 (48 比特 数字)。 |
r - v | NT 子著作权 (在这里可以有多个) |
磁盘上的SID存为:
S-1-5-21-646518322-1873620750-619646970-1110
十六进制形式为:
S-1-5-15-26891632-6fad2f0e-24ef0ffa-456 (5 个子著作权)
0x00 | 01 | 05 | 00 | 00 | 00 | 00 | 00 | 05 |
0x08 | 15 | 00 | 00 | 00 | 32 | 16 | 89 | 26 |
0x10 | 0e | 2f | ad | 6f | fa | 0f | ef | 24 |
0x18 | 56 | 04 | 00 | 00 |
这是一个可变长度的结构。可以更多或更少,子著作权使结构更大或更小。
标记 | 描述 |
---|---|
0x0001 | 默认所有者 |
0x0002 | 默认群组 |
0x0004 | 当前的DACL |
0x0008 | 默认的DACL |
0x0010 | 当前的SACL |
0x0020 | 默认的 SACL |
0x0100 | 要求自动延续的DACL |
0x0200 | 要求自动延续的SACL |
0x0400 | 自动延续的DACL |
0x0800 | 自动延续的SACL |
0x1000 | DACL 保护 |
0x2000 | SACL 保护 |
0x4000 | RM 控制有效 |
0x8000 | 自相关的 |
在设置时,这个布尔数学系统的标记用所有者域指示SID所指向的, 是由一个默认的机构提供,而不是由安全描述符的初始供给者明确地提供。 这也许会影响SID关于所有者延续的处理。
在设置时,这个布尔数学系统的标记用所有者域指示SID所指向的, 是由一个默认的机构提供,而不是由安全描述符的初始供给者明确地提供。 这也许会影响SID关于初始群组的处理。
在设置时,这个布尔数学系统的标记指示包含一个ACL目录的安全描述符。 如果此标记已经设置且安全标识符的DACL域是零,那么就明确说明了一个无效的ACL。
在设置时,这个布尔数学系统的标记用所有者域指示SID所指向的, 是由一个默认的机构提供,而不是由安全描述符的初始供给者明确地提供。 这也许会影响ACL关于一个ACL延续的处理。如果没有设置DACL当前标记则可忽略此标记。
在设置时,这个布尔数学系统的标记指示包含一个由SACL域指向的系统ACL的安全描述符。 如果此标记已经设置且安全描述符的SACL域为零,则指定了一个空(但是存在)的ACL。
在设置时,这个布尔数学系统的标记用所有者域指示SID所指向的, 是由一个默认的机构提供,而不是由安全描述符的初始供给者明确地提供。 这也许会影响ACL关于一个ACL延续的处理。如果设置了当前SACL,则此标记可忽略。
在设置时,这个布尔数学系统的标记指示安全描述符是自相关形式。 在这种形式中,安全描述符的所有域在内存中是连续的,所有指针域表示为从安全描述符开始的偏移量。
SID结构是一个可变长度结构,用于唯一地识别用户或群组。 SID代表安全描述符。 SID的标准原文表示法为:S-R-I-S-S... 这里: - 第一个“S”是文字符,确定下面的数字是一个SID。 - R 是SID的修订水平,表示为一个数字序列,可为十进制或十六进制 如果是后者,由“0x”做前缀)。 - I 是48比特的著作权标识符,表示为和上面的R相同的数字。 - S... 是一个或更多的子著作权值,表示为和上面的R相同的数字。 SID实例; 范围自相关SID,在WINDOWS NT/2K上有本地的管理群组: S-1-5-32-544 转化到SID为: 修订本 = 1, 子著作权数 = 2, 著作权标识符 = {0,0,0,0,0,5}, NT的安全著作权 子著作权[0] = 32, SECURITY_BUILTIN_DOMAIN_RID 子著作权[1] = 544 DOMAIN_ALIAS_RID_ADMINS ACE类型: ACCESS_MIN_MS_ACE_TYPE = 0 ACCESS_ALLOWED_ACE_TYPE = 0 ACCESS_DENIED_ACE_TYPE = 1 SYSTEM_AUDIT_ACE_TYPE = 2 SYSTEM_ALARM_ACE_TYPE = 3 不在win2k下执行. ACCESS_MAX_MS_V2_ACE_TYPE = 3 ACCESS_ALLOWED_COMPOUND_ACE_TYPE = 4 ACCESS_MAX_MS_V3_ACE_TYPE = 4 下面只在WIN2K环境里 ACCESS_MIN_MS_OBJECT_ACE_TYPE = 5 ACCESS_ALLOWED_OBJECT_ACE_TYPE = 5 ACCESS_DENIED_OBJECT_ACE_TYPE = 6 SYSTEM_AUDIT_OBJECT_ACE_TYPE = 7 SYSTEM_ALARM_OBJECT_ACE_TYPE = 8 ACCESS_MAX_MS_OBJECT_ACE_TYPE = 8 ACCESS_MAX_MS_V4_ACE_TYPE = 8 下面这个只针对WINNT和2K ACCESS_MAX_MS_ACE_TYPE = 8 用于审计和延续的ACE标记(8比特): SUCCESSFUL_ACCESS_ACE_FLAG只用于系统审计和警告ACE类型来指示 为访问成功产生一个信息(在WINDOWS里)。 FAILED_ACCESS_ACE_FLAG只用于系统审计和警告ACE类型来指示为访 问失败产生一个信息(在WINDOWS里)。 延续标记: OBJECT_INHERIT_ACE = 0x01 CONTAINER_INHERIT_ACE = 0x02 NO_PROPAGATE_INHERIT_ACE = 0x04 INHERIT_ONLY_ACE = 0x08 INHERITED_ACE = 0x10 Win2k only VALID_INHERIT_FLAGS = 0x1f 审计标记: SUCCESSFUL_ACCESS_ACE_FLAG = 0x40 FAILED_ACCESS_ACE_FLAG = 0x80 访问标准权利的定义 标准权利: 删除 = 0x00010000 读取控制 = 0x00020000 DAC写入 = 0x00040000 所有者写入 = 0x00080000 同步 = 0x00100000 要求的标准权利 = 0x000f0000 标准权利读取 = 0x00020000 标准权利写入 = 0x00020000 标准权利执行 = 0x00020000 所有标准权利 = 0x001f0000 访问系统ACL和最大允许访问类型 访问系统安全 = 0x01000000 最大允许 = 0x02000000 一般权利: 所有一般的 = 0x10000000 一般执行 = 0x20000000 一般写入 = 0x40000000 一般读取 = 0x80000000 对象ACE标记(32比特): ACE当前对象类型 = 1 ACE当前延续对象类型 = 2 ACL常数 当前修订本: ACL修订本 = 2 ACL_REVISION_DS = 4 修订本历史: ACL_REVISION1 = 1 MIN_ACL_REVISION = 2 ACL_REVISION2 = 2 ACL_REVISION3 = 3 ACL_REVISION4 = 4 MAX_ACL_REVISION = 4 绝对安全描述符不包含所有者和群组SID,在安全描述符里也没有SACL和DACL ACL。 作为替代,它包含到内存里哪些结构的指针。显然,绝对安全描述符只用于在内存 中安全描述符的表示法。在磁盘上,使用一个自相关的安全描述符。 属性:安全描述符(0x50).一个标准的自相关安全描述符。 注意:总是常驻的。 注意:在NTFS3.0+中不用,因为安全描述符存储在文件安全里并且正确的描述符使用 标准信息属性中的安全标识符. 在NTFS3.0+中,所有的安全描述符存储在文件安全里.只存储每个唯一的安全描述符。 文件安全包含非未命名数据属性,例如,它有零长度。但是它包含两个索引($SDH 和 $SII) 和一个命名的数据流($SDS). 每个唯一的安全描述符分配了一个唯一的安全标识符(安全验证,不要和SID混淆)。 安全验证对于NTFS卷来说是唯一的,用作一个到$SII的索引,它指出了安全验证到安 全描述符在$SDS数据流里的存储位置。$SII索引由安全验证升序分类。 一个简单的杂乱信号是从每个安全描述符计算的,这个杂乱信号用作到$SDH索引的一 个索引,它指出了安全描述符杂乱信号到安全描述符在$SDS数据流里的存储位置。此$SDH 索引由安全描述符杂乱信号分类且存储在一个B+子目录结构里。当搜索$SDH时(想确定是 否已经有一个新的安全描述符存在于$SDS数据流里),如果发现了一个匹配的杂乱信号, 但是安全描述符不匹配,就要继续在$SDH索引中的搜索,寻找下一个匹配的杂乱信号。 当发现一个精确的匹配时,就会从$SDH索引项读取在$SDS属性里安全描述符所对应的安全 验证,并存储在应用安全描述符的文件/目录的标准信息属性里。标准信息属性存在于 所有低级的MFT记录里(例如在所有文件和目录里)。 如果没发现匹配,则阿全描述符被分配了一个新的唯一安全验证并添加到$SDS数据属性。那 么,涉及到$SDS数据属性中的安全描述符的条目则被添加到$SDH 和 $SII索引。 注意:条目从不会被从文件安全里删除,即使没有任何事涉及到此条目。 $SDS数据流包含安全描述符,以16字节边界排列,由安全验证在一个B+子目录结构里分类。 安全描述符不能超过256k字节边界(此限制是由WINDOWS 缓存管理器强加的)。每个安全描述 符包含在一个SDS条目结构里。而且,每个安全描述符在$SDS流里以一个0x40000字节(256k字 节,WINDOWS缓存管理器的最大值)的固定偏移量距离存储两次。例如,如果一个SDS条目指定 了一个0x51d0的偏移量,那么安全描述符的第一个拷贝在$SDS数据流的偏移量0x51d0处,第二 个拷贝在偏移量0x451d0处。 $SII索引,整理类型是COLLATION_NTOFS_ULONG。 $SDH索引,整理规则是COLLATION_NTOFS_SECURITY_HASH。