一个基于C#/.Net的网页浏览器是否容易受到攻击?

4

.Net平台因CLR防范缓冲区溢出攻击而更安全,这种说法正确吗?

假设在托管操作系统(如Cosmos, SharpOSSingularity)中运行Web浏览器,攻击者是否有可能向应用程序注入IL代码?

我需要担心在非托管应用程序中不可能发生的攻击吗?

2个回答

7
大体上来说,你是正确的。带有安全类型系统的应用程序(不仅限于.NET或Java)不允许应用程序违反这些约束。
缓冲区溢出和许多其他远程代码漏洞之所以会发生,是因为那些语言和运行时中的约束没有提供检查,并且不能保证程序不会执行类似在内存中执行任意代码的操作。安全系统验证代码是否不会受到这些影响。
(顺带一提,C#仍然可以执行不安全的操作并设置自身以执行任意代码。只是相当繁琐并且不太可能在实际应用程序中使用。)
在托管浏览器中看到的安全漏洞将是如果它允许加载任意代码,使用CLR作为安全环境。虽然CLR生成的代码(即应用程序的JIT'd)将是安全的,但加载器和验证器本身通常是用较低级别的语言编写的。曾经有过一些(我认为.NET有2个?)安全漏洞,其中恶意形式的程序集可以强制实际的CLR执行任意代码。但是,这些问题相对较少,并且表面积远比否则要小得多。
因此,完全安全的托管浏览器本身不会落入那些特定漏洞的陷阱。但这也意味着你必须以类似的方式编写和执行插件(例如Flash)。最后,还有其他可以被针对的安全漏洞,但通常它们将比未受管理的应用程序中发现的问题更不严重。例如跨站点脚本攻击仍将是一个问题。但至少你不会遇到“查看文档可执行任意代码”类型的问题。

2

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


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