拒绝服务

当系统以无法处理消息的方式被淹没或处理速度极慢时,将发生拒绝服务。

过多的内存消耗

读取具有大量唯一本地名称、命名空间或前缀的 XML 文档时,可能会出现问题。 如果您使用派生自XmlReader的类,并调用每个项的LocalNamePrefixNamespaceURI属性,则返回的字符串会被添加到NameTable对象中。 由 NameTable 持有的集合永远不会减小大小,从而导致字符串句柄的虚拟“内存泄漏”。

缓解措施包括:

  • NameTable 类派生并实施最大大小配额。 (当 NameTable 已满时,将无法阻止使用或切换 NameTable。)

  • 避免使用所提到的属性,而应尽可能地同时使用MoveToAttribute方法和IsStartElement方法。这些方法不会返回字符串,从而避免了过度填充NameTable集合的问题。

恶意客户端向服务发送过多的许可证请求

如果恶意客户端用过多的许可证请求轰炸服务,则可能会导致服务器使用过多的内存。

缓解:使用以下类的属性 LocalServiceSecuritySettings

  • MaxCachedCookies:控制在 SecurityContextTokenSPNego 协商之后服务器所缓存的有时限的 SSL 的最大数目。

  • IssuedCookieLifetime:控制在 SecurityContextTokensSPNego 协商之后服务器所颁发的 SSL 的生存期。 在此时间期限内,服务器将缓存 SecurityContextToken

  • MaxPendingSessions:控制在服务器上建立但未处理应用程序消息的安全会话的最大数目。 此配额可防止客户端在服务上建立安全对话从而致使服务维护每个客户端的状态,但是从不使用这些状态。

  • InactivityTimeout:定义服务在未从客户端接收应用程序消息的情况下保持安全会话存活的最长时间。 此配额可防止客户端在服务上建立安全对话从而致使服务维护每个客户端的状态,但是从不使用这些状态。

WSDualHttpBinding 或双向自定义绑定要求客户端身份验证

默认情况下, WSDualHttpBinding 已启用安全性。 但是,如果通过将属性ClientCredentialType设置为None禁用客户端身份验证,恶意用户可能会对第三个服务造成拒绝服务攻击。 之所以发生这种情况,是因为恶意客户端可以将服务定向到第三个服务发送消息流。

若要缓解此问题,请不要将属性设置为 None。 请注意,当您创建具有双重消息模式的自定义绑定时,可能会出现这种情况。

可以填充审核事件日志

如果恶意用户知道已启用审核,攻击者可能会发送无效消息,导致写入审核条目。 如果以这种方式填充了审核日志,则审核系统将失败。

若要缓解此问题,请将 SuppressAuditFailure 属性 true 设置为事件查看器的属性,并使用事件查看器的属性来控制审核行为。 有关使用事件查看器查看和管理事件日志的详细信息,请参阅 事件查看器。 有关详细信息,请参阅 审核

IAuthorizationPolicy 的无效实现可能导致服务无响应

在有缺陷的Evaluate接口实现上调用IAuthorizationPolicy方法可能会导致服务变得无响应。

缓解:仅使用受信任的代码。 也就是说,仅使用已编写和测试的代码,或来自受信任的提供程序的代码。 未经深思熟虑,请勿允许在代码中插入对 IAuthorizationPolicy 的不受信任的扩展。 这适用于服务实现中使用的所有扩展。 WCF 不区分使用扩展点插入的应用程序代码和外部代码。

可能需要调整最大 Kerberos 令牌大小

如果客户端属于大量组(大约 900 个,尽管实际数目因组而异),则当消息标头的块超过 64 KB 时,可能会出现问题。 在这种情况下,可以增加 Kerberos 令牌最大大小。 你可能还需要增加最大 WCF 消息大小来容纳较大的 Kerberos 令牌。

自动注册功能会为计算机生成多个具有相同主题名称的证书

自动注册 是 Windows Server 2003 自动注册用户和计算机证书的功能。 当计算机位于启用了该功能的域中时,只要新计算机加入网络,就会自动创建具有客户端身份验证目的的 X.509 证书并将其插入到本地计算机的“个人”证书存储中。 但是,自动注册功能对它在缓存中创建的所有证书使用同一主题名称。

影响在于 WCF 服务可能无法在具有自动注册的域上打开。 之所以发生这种情况,是因为默认服务 X.509 凭据搜索条件可能不明确,因为存在具有计算机的完全限定域名系统(DNS)名称的多个证书。 一个证书源自自动注册;另一个可能是自颁发的证书。

若要缓解此问题,请使用 serviceCredentials< 上>更精确的搜索条件引用要使用的确切证书。 例如,使用 FindByThumbprint 此选项,并按其唯一指纹(哈希)指定证书。

有关自动注册功能的详细信息,请参阅 Windows Server 2003 中的证书自动注册

用于授权的多个备选主题名称中的最后一个

在极少数情况下,当 X.509 证书包含多个备用使用者名称,并且你使用备用使用者名称授权时,授权可能会失败。

使用 ACL 保护配置文件

可以在 CardSpace 颁发的令牌的代码和配置文件中指定必需声明和可选声明。 这会导致在发送到安全令牌服务的 RequestSecurityToken 消息中发出相应的元素。 攻击者可以修改代码或配置以删除所需的声明或可选声明,从而可能让安全令牌服务颁发不允许访问目标服务的令牌。

若要缓解问题:需要访问计算机以修改配置文件。 使用文件访问控制列表(ACL)来保护配置文件。 WCF 要求代码位于应用程序目录或全局程序集缓存中,然后才能允许从配置加载此类代码。 使用目录 ACL 保护目录。

达到服务允许的最大安全会话数

当服务成功对客户端进行身份验证并使用服务建立安全会话时,该服务将跟踪会话,直到客户端取消会话或会话过期。 对于建立的每个会话都将进行计数,直到达到与该服务的同时活动会话的最大数目限制。 达到此限制后,尝试使用该服务创建新会话的客户端将被拒绝,直到一个或多个活动会话过期或客户端取消。 客户端可以有多个服务会话,其中每个会话都计入限制。

注释

在使用有状态会话时,上述内容并不适用。 有关有状态会话的详细信息,请参阅 如何:为安全会话创建安全上下文令牌

若要缓解此问题,请通过设置 SecurityBindingElement 类的属性 SecurityBindingElement 设置会话的最大活动会话数和最大生存期的限制。

另请参阅