反射会带来啥风险? (中等信任度)

Posted

技术标签:

【中文标题】反射会带来啥风险? (中等信任度)【英文标题】:What risk does Reflection pose? (Medium Trust)反射会带来什么风险? (中等信任度) 【发布时间】:2010-11-12 18:05:20 【问题描述】:

对于许多流行的 Web 应用程序来说,cause a lot of problems 似乎在中等信任托管环境中缺乏反射。

为什么在 Medium Trust 中默认禁用 ReflectionPermission? 反射在共享托管环境中会带来哪些风险?

随机参考见MSDN: How to use Medium Trust in ASP.NET 2.0

【问题讨论】:

【参考方案1】:

Reflection 允许恶意代码检查各种机密:与其说是知识产权(当然也如此),不如说是应该是私密且安全的数据,例如连接字符串、密码、银行账户数据等。

当然,许多程序会通过更容易受到攻击的向量公开这些数据,但没有理由增加应用程序的攻击面。

编辑了一些来自 cmets 的对话:

真正的风险可能是不受限制的文件系统访问,这可能将反射变成真正的危险。如果一个坏演员可以将程序集(或编译成程序集的东西)放入您的虚拟目录,如果他们有反射权限,您就有麻烦了。 (当然,如果发生这种情况,还有其他潜在问题,但这不应该忽视这个特定的漏洞。)

在更难预防的共享托管环境中,尽管这当然不是不可能的。也许值得将此问题交叉发布到ServerFault,看看那里的好人有什么要说的。

【讨论】:

我不完全明白这是如何工作的。例如,在共享宿主环境中,我将如何访问另一个客户的程序集?如何使用反射来检查私有属性和方法的内容? 如果您(例如)正在运行一个网站项目,而不是一个 Web 应用程序项目,并且您为用户提供了一种将文件上传到您的站点的方法,他们可以上传一个 ASPX 页面,在调用时编译 - 如果使用反射来读取应用程序的状态,则可能会访问连接字符串等。这是一种微乎其微的可能性,但仍然有一个可能性,因此您的链接中的“可能”。不要忘记,一些主机并不总是运行“普通”中等信任环境,而是自定义哪些功能可用和不可用。 Ben 打败了我。我再补充一点:在共享主机环境中,您继承了(部分)在您的服务器上运行的其他应用程序的安全漏洞,因此您的其他客户甚至不必是恶意的就可以构成危险你,只是疏忽。 完全信任是正确的,因为这涉及不受限制的 FileIOPermission(这反过来又会启用各种反射恶作剧) - 但可能是启用反射(否则在 MediumTrust 中运行)是合适的.这取决于托管公司对其共享托管服务器的安全策略有多严格。如果服务器上的不同客户真的相互保护,那可能是合理的。然而... ... 共享服务器上的另一个应用程序存在允许入侵者访问文件系统并因此冒充您正在调用的某个程序集的漏洞仍然存在危险。然后,当您调用该程序集时,它可能会进行反射性恶作剧。【参考方案2】:

我从未发现用户可以使用反射来做任何“坏事”。 人们会被吓跑,因为您可以调用标记为私有或受保护的方法,但据我所见,它们都不会带来任何真正的风险。

最有可能的是,这至少在一定程度上是一种销售技巧,可以让您为(半)专用托管服务 :)

【讨论】:

【参考方案3】:

我找到了有关此主题的以下 MSDN 文章:

Security Considerations for Reflection

本文呼应杰夫的回答:

反射提供了以下能力 获取有关类型的信息和 成员,并访问成员。 访问非公共成员可以 造成安全风险。所以, 访问非公共成员的代码 需要 ReflectionPermission 与 适当的标志。

但是,我不认为可以在客户的托管帐户之间利用这种风险。看来这只会带来个人风险。例如,使用反射,我可以在托管环境中探索自己的程序集。但是,其他客户无法使用反射来探索 my 程序集。他们只能探索他们的程序集。

这可能会给涉及多个开发团队的单个 Web 应用程序带来问题。一个开发团队可以使用反射来探索另一个开发团队的程序集。

但是,对于共享主机环境来说,这种情况很少见。大多数共享托管网站都包含一个非常小的团队,他们可以完全访问所有代码。换句话说,没有秘密。只要该程序集不受其他共享托管客户的影响,就不是问题。

启用反射不会对大多数共享托管 Web 应用程序造成任何风险:

<IPermission class="ReflectionPermission" version="1" Flags="RestrictedMemberAccess"/>

如果我错了,请纠正我。

【讨论】:

如果对 Web 应用程序的访问受到威胁,则可以使用反射来探索数据库连接字符串和其他敏感信息。这是一个权衡。应用程序自身受到保护有多重要? 说实话,这给我留下了更多问题。尽管 +1 您确认存在安全问题并提供了很好的参考。我很不同意你在攻击场景上的看法,虽然我没有更好的,所以我不能说脏话。

以上是关于反射会带来啥风险? (中等信任度)的主要内容,如果未能解决你的问题,请参考以下文章

中等信任的匿名类型,使用反射而不是表达式

中等信任的 LDAP

可以在中等信任环境中运行 C++ dll 吗?

.NET 4.0 中等信任级别和 MYSQL 连接

NHibernate 2.1.2 中等信任度

如何自动化测试中等信任代码