1.     安全隐患

1.1. 目录服务相关

1.       通过监听授权用户的操作,对授权用户所访问数据的非授权访问
2.       物理拦截授权用户对资源的连接和会话,直接访问资源
3.       非授权修改、删除数据、安全设置和其他配置
4.         引导客户连接到一个伪服务器上,提供欺骗性服务
5.         越权使用资源

1.2. 其他隐患

6.         基于网络对LDAP服务器的攻击,包括:操作系统、端口、进程和运行在服务器上的服务,从而达到对目录资源的访问。具体可通过病毒、蠕虫、木马等实现
7.       通过物理访问服务器资源攻击主机:操作系统、文件、目录或外围设备。这将影响资源的可用性、完整性和机密性
8.       从内部直接攻击提供目录服务的后台数据库

2.     安全对策

上面所提到的安全隐患,其中与目录相关地部分可以由LDAP协议和支持LDAP协议的目录服务器解决,其他隐患必须通过提过防病毒软件、放火墙等辅助手段解决。LDAP协议和支持LDAP协议的目录服务器自身能解决的安全性问题是从两方面进行解决的:身份鉴别和授权

2.1. 身份鉴别

2.1.1.    用户身份绑定

在用户连接LDAP服务器时需要进行绑定操作(ldap_bind & ldap_bind_s),用户向服务器提供用于一个绑定的DN,该DN就是用户的身份。因此,LDAP通过绑定用户身份来鉴别用户身份,主要有两种方式:

1.          密码+DN(Distinguished name)

密码存储在数据库中,格式可以是明文,也可以是HASH,当前主流的LDAP服务器都支持HASH。

2.          SASL : Simple Authentication and Security Layer

2.1.2.    SASL ( LDAP V3)

目前定义了以下SASL安全机制:
1.          CRAM-MD5(Challenge-Response Authentication Mechanism), 使用MD5算法,基于挑战—相应模式的安全机制,前提是客户和服务端事先持有共享的秘密
2.          DIGEST-MD5,CRAM-MD5的扩展,在应用层加入了完整性保护,需要第三方服务器鉴别身份信息
3.          External,通过外部信息验证客户身份,如IPSEC、TSL、SSL(636端口)
4.          Kerberos v4 and v5
5.          S/Key,
6.          Generic Security Service Application Program Interface (GSSAPI),
7.          Keyd-Hashing 
不管选择哪一种方式,在连接建立之前数据都是明文传输的,都可能被篡改。

2.2. 授权

对用户的授权方式和授权的安全性取决于具体应用的实现,在LDAP V3中没有任何定义。目录服务器有一下共同点:

1.          访问目录的用户最终都将映射为该系统的内部用户,如:Windows 将LDAP用户映射为系统用户
2.          服务器(Windows, Netscape, Notes,Novell)对资源的访问授权都由该服务器所定义的ACL确定

 不同的是:ACL的实现方式不同

因此,我们举例说明目录服务器实现授权的方式。

2.2.1.    iPlanet的目录授权

ACL储存在DIT中(Directory Information Tree )
ACL由一系列的ACI(Access Control Instruction)组成
ACI通过树形继承,也就是说,子节点继承父节点的ACI
ACI 语法: <target><permission><bind rules>

ACI举例:
dn: o=My Co.,Ltd.
changetype: modify
add: aci
aci: (targetattr = "*")(version 3.0; acl "Suitespot Adminstrators Group"; allow
(all) groupdn = "ldap:///cn=Administrators,o=My Co.,Ltd.";)

一旦用户的身份得到鉴别后,目录根据该节点定义的ACI来判定用户对该资源的访问权限。如上例,cn=Administrators,o=My Co.,Ltd.有所有权限。

3.     总结

通过以上分析,可以得到下面的结论:
¨         身份鉴别问题由LDAP协议解决,其中SSL+证书方式比较完善,也得到主流目录服务器的支持。
¨         授权问题可以由具体的目录服务器实现 

因此可以确定:只有授权用户对目录进行已授权的操作

4.     遗留问题

4.1. 对授权用户的信任

在现实的应用中存在这样一个问题:是否授权用户的就是完全被信任?例如,公安系统的系统管理员,如果他拥有对ACL的修改权限,有存在恶意修改ACL的动机。基于目前的机制,这种安全隐患无法消除。

因此,如果管理员是不可信的,将产生新的安全隐患

4.2. 审计

目前的LDAP协议和目录服务器不提供审计功能

4.3. 解决办法

可以参照属性证书的思路,对权限信息的完整性进行保护。这里举iPlanet的例子来说明。 

我们曾经谈到过iPlanet中ACI的语法如下:  <target><permission><bind rules>。我们可以加入ACI的完整性信息:使用该组织的单位证书对target+permission+bind rules签名,把这个签名放在ACI的末尾,形如:<target><permission><bind rules><signature of unit>

在验证完签名后,再对用户进行授权。注意:这种方式对效率的影响有待论证

5.     参考资料

RFC2251        Lightweight Directory Access Protocol (v3)
RFC2829        Authentication Methods for LDAP
RFC2617    Digrest-MD5 applies the HTTP Digest Access Authentication