验证.NET Framework程序集

7

我刚刚浏览了我们的德国VB.NET论坛,发现了一些有趣的东西,让我感到有点头痛。

实际上,使用ReflexIL或其他IL编辑器可以编辑.NET Framework程序集。唯一需要绕过的是程序集的Strong Name签名。在更改程序集IL之后,您必须运行sn.exe -Vr [assemblyname]以跳过强名称验证。然后,您必须清除缓存的本地映像。只需浏览C:\Windows\assembly目录并删除与程序集相关的每个映像。然后重新启动。登录后,运行ngen install [assemblyname]。现在会生成新的本地映像。

这个方法是可行的。我在我的虚拟环境(Windows XP x86)中验证了此过程。现在最让我担心的是,您可以轻松绕过RSACryptoServiceProvider的.NET VerifyHashVerifyData方法。这也实际起作用。我和我的朋友测试并确认了这个问题(请参见屏幕截图)。这很容易。
例如,如果我基于.NET Framework加密类构建许可证系统,则可以在系统范围内绕过该系统,用框架上的每个.NET应用程序。此外,每个人都可以通过挂钩方法来记录和更改我调用的函数的输入。
现在我的问题是:由于这可能是一个巨大的问题,我该怎么办?当然,恶意用户可以编辑我的应用程序,但那不会像在整个系统上做这样糟糕。 我正在考虑一些框架校验和验证,但由于有很多不同的.NET Framework更新,这似乎是不可能的。 有什么解决方案或建议吗?微软是否以某种方式解决了这个问题?

5
请再次执行整个练习,但这次不使用管理员用户名和密码。在威胁分析中,这是一个常见的谬误,当入侵者拥有钥匙时锁门是没有意义的。 - Hans Passant
此外,许可证系统通常是徒劳无功的练习。 - Peter Huene
1个回答

8
如果攻击者已经获得了您计算机的管理员权限(这是您所描述的攻击所必需的),那么您基本上已经输了。攻击者可以规避您所采取的任何措施。
因此,我认为试图防御此类攻击完全是无意义的。如果您必须处理不受信任的、可能被入侵的计算机,那么您就不能信任它们执行任何敏感操作,而必须在自己的服务器或类似设备上进行。

我知道对此事进行任何行动都是毫无意义的。我只是想知道为什么微软会让它变得如此简单。虽然那不是我想要的答案,但好吧。 - nikeee
2
我不理解你的推理方式。你说防止这种攻击没有意义,但你仍然认为微软应该投入资源来处理它? - svick
由于微软可以访问内核、.NET框架和CLR,他们至少可以让它变得更加困难一些。 - nikeee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接