Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1296350
  • 博文数量: 436
  • 博客积分: 7854
  • 博客等级: 少将
  • 技术积分: 3225
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-18 16:30
文章分类

全部博文(436)

文章存档

2013年(2)

2012年(56)

2011年(70)

2010年(308)

分类:

2010-07-20 15:57:54

概述

标准属性标题?

安全描述符可总结如下:

  • 一个标题(也许是标记)后面跟着一两个ACL和两个SID。
  • 第一个ACL包含审计信息并且可能没有。
  • 第二个ACL包含许可(谁可以做)。
  • 每个ACL包含至少一个ACE。
  • 每个ACE包含一个SID。
  • 最后两个SID指出对象的所有者(用户和群组)。
成份 描述
Header 到不同结构的偏移量
Audit ACL ACE SID 审计 ACL的ACEs
Permissions ACL ACE SID 许可 ACL的 ACEs
ACE SID
ACE SID
SID (User) 对象的所有者
SID (Group)

安全描述符对于阻止未经授权访问文件的情况是必要手段。它存储以下信息:

  • 文件所有者
  • 所有者对其它用户的许可
  • 需要记录的动作(审计)

属性结构

注意

大小

就像在 中定义的,此属性没有上下限。

其它信息

流的结构

问题

  • 目录的ACE如何传递?
  • 如何把ACE装入一个正常的UNIX文件系统?
  • 如何把文件许可加入PAM或SMB?
  • 能用NT鉴定吗?为什么?

需要做的

  • 判断哪种规格,特性和权利涉及哪种文件系统活动,例如,FILE_APPEND_DATA允许用户扩展一个 文件而是创建一个文件。
  • 看是否填充零并且标记域做了标记。
  • 试试一般的读/写/执行/全部标记。

标题

偏移量 大小 描述
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个偏移量在用。 巧合?

ACL

偏移量 大小 描述
0x00 1 ACL 修订
0x01 1 填料 (0x00)
0x02 2 ACL 大小
0x04 2 ACE 计数
0x06 2 填料 (0x0000)

访问控制列表(ACL)包含一个或更多的ACE。
ACL修订在我的机子上是0x02。
WIN32 API建议0x01 和 0x06包含为形成队列的0x00填料。

ACE

偏移量 大小 描述
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 (安全标识符)

一个典型的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关于初始群组的处理。

当前DACL

在设置时,这个布尔数学系统的标记指示包含一个ACL目录的安全描述符。 如果此标记已经设置且安全标识符的DACL域是零,那么就明确说明了一个无效的ACL。

默认的DACL

在设置时,这个布尔数学系统的标记用所有者域指示SID所指向的, 是由一个默认的机构提供,而不是由安全描述符的初始供给者明确地提供。 这也许会影响ACL关于一个ACL延续的处理。如果没有设置DACL当前标记则可忽略此标记。

当前SACL

在设置时,这个布尔数学系统的标记指示包含一个由SACL域指向的系统ACL的安全描述符。 如果此标记已经设置且安全描述符的SACL域为零,则指定了一个空(但是存在)的ACL。

默认的SACL

在设置时,这个布尔数学系统的标记用所有者域指示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。
阅读(1125) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~