C#/ .Net Web浏览器是否容易受到攻击?

时间:2009-03-30 07:36:14

标签: c# .net clr buffer-overflow exploit

说.Net平台更安全是否正确,因为CLR防止缓冲区溢出攻击?

假设在托管操作系统中运行了一个Web浏览器(例如CosmosSharpOSSingularity),攻击者在技术上可以将IL代码注入应用程序?

我是否必须担心在非托管应用程序中无法进行的攻击?

2 个答案:

答案 0 :(得分:7)

在大多数情况下,你是对的。使用安全类型系统(不仅仅是.NET或Java)的应用程序不允许应用程序违反这些约束。

缓冲区溢出和许多其他远程代码漏洞发生,因为这些语言和运行时的约束不提供检查,并且不能保证程序不会像在内存中执行任意代码那样。安全系统验证代码不受这些影响。

(作为旁注,C#仍然可以执行不安全的操作并将其自身设置为执行任意代码。这只是相当麻烦且不太可能在实际应用程序中使用。)

您将在托管浏览器中看到的安全漏洞是,如果它允许使用CLR作为安全环境加载任意代码。虽然CLR生成的代码(即应用程序的JIT'd)是安全的,但加载器和验证器本身通常用较低的语言编写。有一些(我认为2 for .NET?)安全漏洞,恶意形成的程序集可能会迫使实际的CLR执行任意代码。然而,这些是相对罕见的问题,表面积远小于其他情况。

所以,是的,一个完全安全的托管浏览器本身不会成为这些特定漏洞的牺牲品。但这也意味着你必须以类似的方式编写和执行你的插件(Flash?)。最后,还有其他可以针对的安全漏洞,但通常它们不会像您在非托管应用程序中发现的那样严重。例如,跨站点脚本仍然是一个问题。但至少你不会“查看文件可以执行仲裁代码”类型的问题。

答案 1 :(得分:2)

CLR(和JVM)可以防范许多常见攻击,但这并不能消除所有威胁。 CLR或任何库可能包含允许利用漏洞的错误。应用程序错误也可能允许利用漏洞。 SQL注入是由于应用程序中缺少输入验证而可能发生攻击的示例。