这些变更可能会影响一些应用程序。尤其是如果应用程序需会仰赖以往所有人都具备远程访问权限的预设状况,因为 SP2 可能会停用未经验证的远程访问。SP2 应该会启用大多数COM 客户端案例,包括COM 客户端传送本机参考至远程服务器的常见状况,使客户端转换成服务器。SP2应该会启用所有的本机案例,而不必修改软件或操作系统。
如果用作COM 服务器,且会需要支持由非管理性COM 客户端执行远程启用功能,则您就应该考虑那是否为最佳状态。这种情况下就必须变更此功能的预设状态。如果需要支持未验证的远程呼叫,也应该考虑那是否为最佳状态。同样这种情况下必须变更此功能的预设状态。
注意以下注册表键,它们包含了在这种情况下的ACL:
ACL的键值类型为REG_BINARY,它记录了访问计算机上的COM类和对象的权限信息,以下是权限数据代表的值的具体列表:
这些ACL权限值均可由通常的安全进程所建立。需要注意的是,COM_RIGHTS_EXECUTE权限必须设定,否则COM对象的ACL权限将因为缺少这个基本执行权限而处于无效状态。
细化COM权限
COM服务器应用程序有两类权限,启动权限和访问权限。启动权限是在激活COM服务时授权审核的控制,它在注册表中定义为安全描述。访问权限是在访问COM服务时的授权审核的控制,它定义为由COM体系通过CoInitializeSecurity API提供或在注册表中定义的安全描述。COM访问权限的另一个区别是距离。在SP2之前的Windows XP系统中,当用户存取COM 应用程序时,他们有权在本机或远程使用。但COM应用程序无法提供更细化的控制。SP2 细化了COM 权限,让管理员可根据距离的观念,弹性控制计算机的COM权限原则。也就是分为本地和远程。本地的COM消息通过Local Remote Procedure Call(LRPC)协议传输,远程COM消息则通过Remote Procedure Call (RPC)协议,如TCP。因此,当了解了COM访问的来源,有限制的授权远程的访问,可以一定程度上缓和受到网络攻击的风险。
COM激活是指在客户端通过调用CoCreateInstance或其变体得到COM委托界面的行为。激活权限的一个不利方面是,有时为了满足客户端的请求,COM服务必须在启动状态。启动权限声明了被允许启动COM服务器的用户列表,访问权限则声明了被允许激活COM对象或者当COM服务运行时被允许访问的用户列表。
SP2的另一个改变是访问权限和激活权限的分离以反映两个不同的操作,激活权限从以前的访问类权限ACL移到了启动类权限ACL中。当一个 COM界面指针同时相关了激活和启动过程,则激活权限和启动权限逻辑上将属于同一个ACL。这样改变的另一个原因是由于我们通常都在程序中队COM对象的访问权限作代码级的控制,而启动类权限可以在管理单元中方便的设置,把激活权限放在启动类权限ACL中将更有利于管理员对COM对象激活的控制。
权限控制入口(Access Control Entry, ACE)中启动类权限分为4种具体的权限:
本地启动(LL)
远程启动(RL)
本地激活(LA)
远程激活(RA)
访问类权限分为2种具体的权限:
本地访问(LC)
远程访问(RC)
这种COM的安全状态定义可以允许管理员进行更详细的配置。比如可以设置一个COM服务允许本地的所有用户访问,但只有管理员才能远程访问,而只需要对这个COM的安全声明进行配置即可。