MS14-072: .NET Remoting权限提升漏洞
今天微软发布了针对.NET Framework的MS14-072更新,解决了.NET Remoting功能中的一个权限提升(EOP)漏洞。此更新修复了.NET Remoting中的一个特定问题,该问题允许特制的远程端点利用此漏洞。
什么是.NET Remoting?
.NET Remoting是.NET Framework中的一个层,用于促进应用程序域(AppDomains)之间的通信。这使得托管对象能够跨AppDomain、进程或机器边界进行通信。对象可以通过引用跨这些边界传递。当对这些对象调用方法时,控制权再次跨边界传递,在对象起源的边界内执行。有关更多详细信息,请参考.NET Remoting。
这种技术的典型用法是.NET Remoting服务通过引用将对象返回给客户端。当客户端调用这些对象的方法时,代码在服务器上执行。类似地,客户端可以通过引用将对象传递给服务,当该服务调用该对象的方法时,代码在客户端上执行。
使用WCF替代.NET Remoting
.NET Remoting是一种遗留技术,本质上比WCF安全性低。它无法在客户端/服务器边界保持信任级别的隔离,允许特制的消息利用引用对象的使用来实现权限提升。它还使用遗留的序列化技术,使服务器容易受到拒绝服务攻击。因此,我们建议基于.NET Remoting的分布式应用程序开发人员考虑将其代码移植到更安全的Windows Communication Foundation(WCF)。
.NET Remoting中的边界透明性使得不受信任的远程端点可能控制.NET Remoting服务。由于服务通常以完全权限执行,这允许具有较低权限的远程端点使用.NET Remoting服务公开的功能提升自身权限。在完全受信任的环境中,这通常不是问题。但如果.NET Remoting服务暴露给不受信任的远程端点,这就会成为一个问题,因为它跨越了安全边界。
阅读有关.NET Remoting工作原理的更多信息,了解为什么我们建议远离它。
Windows Communication Foundation(WCF)统一编程模型设计用于与不可信端点通信时保持健壮性。在许多情况下,迁移到更新、更受支持的技术可能是一个小任务。MSDN文章《如何:将托管代码.NET Remoting迁移到WCF》提供了许多示例和代码示例,以帮助简化此过渡过程。
保护.NET Remoting服务
迁移到新技术需要时间,在此期间,以下是一些使.NET Remoting服务更安全的步骤:
-
在注册通道时设置ensureSecurity标志为true: 如果远程处理系统确定通道实现了ISecurableChannel,这将启用加密和数字签名。
-
始终验证客户端并加密通信流: 默认情况下没有身份验证或加密,开发人员必须显式执行此操作。
-
将.NET Remoting服务的权限级别保持在所需的最低限度,以避免大的安全边界。
-
Swamy Gangadhara (MSRC) & Ron Cain (.NET)