我在哪里存储Active Directory中的敏感数据?

我基本上存储在Active Directory中的任何OctetString属性的私钥(散列)。

我的问题是,什么属性是默认的安全,并有意义,保持私人数据呢? 这个值应该被认为与密码类似,甚至pipe理员也不应该像当前的AD密码一样访问(如果可能的话)。

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

替代文字

更新:

有谁知道八位字节string属性,不公开“默认情况下,在域中的所有用户的”读取“权限? 我不想公开存储我的哈希,并允许某人build立基于哈希的彩虹表。

在AD中存储数据时大多数人面临的问题是

  • 扩展架构(通常具有公司政治影响)

  • 使用现有属性并编辑权限(导致AD / ACL膨胀,从而增加您的DIT和后续复制大小)

还有一个select…在我看来,最好的select是使用AD的这个鲜为人知的特性来获取现有属性并将其标记为机密。

这里是过程的细节


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

为了缓解这一点,Windows 2003 SP1引入了一种将属性标记为CONFIDENTIAL的方法。 通过修改架构中属性的searchFlags值实现此function。 SearchFlags包含表示属性的各种属性的多个位。 例如,位1意味着属性被索引。 新的第128位(第7位)将该属性指定为机密。

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

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

默认情况下,只有pipe理员拥有对所有对象的CONTROL_ACCESS访问权限。 因此,只有pipe理员才能读取机密属性。 用户可以自由将此权限委托给他们想要的任何特定的组。 这可以通过DSACL工具,脚本或LDP的ADAM版本来完成。 在撰写本文时,不可能使用ACL UI Editor来分配这些权限。

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

  1. 确定要标记“机密”的属性或添加属性以标记“机密”。

  2. 标记为保密

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

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

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

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

为了达到这个目的,您总是可以使用新的字段来扩展Active Directory。

这是一个文档 ,其中包含有关添加新属性和限制属性权限的说明。

这个值应该被认为与密码类似,甚至pipe理员也不应该像当前的AD密码一样访问(如果可能的话)。

这是不正确的,甚至没有错。 密码不存储。 散列存储,域pipe理员可以访问。 事实上,如果你愿意的话,你甚至可以configurationAD将密码存储为可逆encryption。

没有什么可以让ADpipe理域名pipe理员。 如果您删除权限甚至拒绝,域pipe理员可以获得所有权并重新join。与Novell的NDS相反,在这种情况下,OU的pipe理员可以不可撤销地locking更高级别的pipe理员。

您可以做的最好的是使用现有的或新的属性,并限制访问。 您可以保持pipe理员不在,并且您可以启用对属性的审核,以便logging任何访问权限或权限更改。