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