在Active Directory中存储私有“八位字符串”;什么是默认安全?

时间:2010-09-16 05:59:42

标签: security active-directory ldap windows-server-2008 acl

我实际上是在Active Directory中的任何OctetString属性中存储私钥(Hash)。

我的问题是,默认情况下哪个属性是安全的,并且保留私有数据是有意义的?此值应被视为类似于密码,即使管理员也不应该访问(如果可能),就像当前的AD密码一样。

以下是Windows 2008R2 + Exchange 2010域上默认启用的属性列表的开头。

alt text

更新

有没有人知道Octet String属性默认情况下不向域中的所有用户公开“读取”权限?我不想公开存储我的哈希,并允许某人根据哈希构建彩虹表。

3 个答案:

答案 0 :(得分:3)

以下是支持我提问的家伙的答案......非常有趣:

Active Directory中的默认权限使经过身份验证的用户具有对所有属性的全面读取权限。这使得很难引入一个应该受到保护而不被所有人阅读的新属性。

为了缓解这种情况,Windows 2003 SP1引入了一种将属性标记为CONFIDENTIAL的方法。通过修改模式中属性的searchFlags值来实现此功能。 SearchFlags包含表示属性的各种属性的多个位。例如。位1表示属性已编制​​索引。新位128(第7位)将属性指定为机密。

注意:您不能在基础架构属性(从“顶层”派生的属性,如common-name)上设置此标志。您可以通过使用LDP查看对象并检查对象的systemFlags属性来确定对象是否是基础架构对象。如果是第10位,则它是基础模式对象。

当目录服务执行读取访问检查时,它会检查机密属性。如果有,则除了READ_PROPERTY访问之外,目录服务还将要求对属性或其属性集进行CONTROL_ACCESS访问。

默认情况下,只有管理员具有对所有对象的CONTROL_ACCESS访问权限。因此,只有管理员才能阅读机密属性。用户可以自由地将此权限委托给他们想要的任何特定组。这可以使用DSACLs工具,脚本或LDP的R2 ADAM版本完成。在撰写本文时,无法使用ACL UI编辑器来分配这些权限。

标记属性的过程保密并添加需要查看属性的用户有3个步骤

1.确定标记机密的属性,或添加标记机密的属性。

2.将其保密

3.向Control_Access权限授予正确的用户权限,以便他们可以查看属性。

有关详细信息和分步说明,请参阅以下文章:

922836如何在Windows Server 2003 Service Pack 1中将属性标记为机密

http://support.microsoft.com/default.aspx?scid=kb;EN-US;922836

答案 1 :(得分:1)

使用OctetString语法的属性或其他方式(如DirectoryString)实际上并不重要。从安全角度来看,重要的是分配给包含您的属性的条目的条目或分支的安全描述符。换句话说,二进制属性值几乎不会使您的系统更安全,除非为目录树分配了适当的安全性。

您不能拥有与 unicodePwd 属性类似的安全性,因为it's kind of special。虽然您可以分配一个安全描述符,即使管理员也禁止访问您的属性值,但您无法禁止管理员更改安全描述符并最终获取对该值的访问权限。

答案 2 :(得分:0)

除非你完全计划将自己锁定到AD,否则我建议只使用Octet String属性添加Aux类并使用它。 (即,并非所有其他模式可能具有相同语法的相同属性。只需使用destinationIndicator进行操作.SunOne和eDirectory具有不同的模式语法。)

然后我会加密属性的内容,因为否则很难保证数据的隐私。