Visual Studio中不值得信任的项目?

时间:2014-03-24 14:16:56

标签: visual-studio visual-studio-2013

打开最近下载的项目时,Visual Studio 2013会短暂警告您只能打开来自可靠来源的项目。开放项目有哪些风险?在编译之前,项目是否可以对您的系统造成任何伤害?可能造成的损害是什么?在从“不值得信赖”的资源实际开放项目之前,您是否应该注意哪些指标? (不是我能想到的)

1 个答案:

答案 0 :(得分:16)

Visual Studio中的攻击面

Visual Studio中有许多攻击媒介。所有这些都是设计的。我们的开发人员希望在构建过程中完全控制我们的系统。不幸的是,当我们说“我想删除构建中的缓存目录的内容”时,这也意味着恶意项目文件几乎可以从任何地方删除任何内容。或者更糟。妥协是“嘿。我们给了你王国的钥匙,但是我们不认识这个项目。你确定要打开这个吗?如果它做了一些愚蠢的话,我们不负责任” 您提到的警告消息。

现在考虑许多开发人员以管理员身份运行Visual Studio。

以下是一些攻击媒介:

制作前和制作后的活动
在最简单的形式中,不受信任的项目可以执行可以删除文件的Pre-Build事件。或者更糟。几乎任何事都可以在Build事件中执行。这是Compile上发生的101件事。

项目开放时的执行
Visual Studio项目文件只不过是大型MSBuild配置。当您打开项目时,Visual Studio会执行一些MSBuild目标,所有这些目标都支持工具。这些目标包括Compile,ResolveAssemblyReferences,ResolveCOMReferences,GetFrameworkPaths和CopyRunEnvironmentFiles。如果存在任何这些目标,则还会执行其中的任务。删除文件,或者更糟。

请参阅http://msdn.microsoft.com/en-us/library/ms171468.aspx

处的'设计时执行'

<强>智能感知
上面提到的工具的一部分包括IntelliSense,它在MSBuild中执行Compile任务;必须执行CSC / VBC才能获得所有IntelliSense功能。由于IntelliSense的性质,此任务会在您工作时重复执行,而不是仅在打开时运行一次的上述机会。

请参阅http://msdn.microsoft.com/en-us/library/ms171468.aspx

上的'Design-Time IntelliSense'

隐藏在MSBuild中的其他地方
您可以在一天中手动执行其他常规MSBuild目标,包括构建,重建,测试和清理。是的,请注意,即使clean是构建目标,因此Clean可以删除的不只是旧的\bin目录。

<强>的NuGet
恶意项目也可能通过NuGet公开系统。尽管Package Restore不是问题,但packages.config可以指定不同的Repository Source。然后,当您安装新的包(例如install-package jquery)时,NuGet将从不受信任的备用包中检索jQuery包,而不是从nuget.org检索。这个恶意的jQuery包可以包含其中的各种其他'Goodies',它们将作为包安装的一部分执行。

这不是NuGet的安全漏洞,因为“你”指定了备用包源;这是设计的,例如公司有自己的内部包存储库。

你能做什么?

在一天结束时,你能做些什么呢?答案实际上是不打开来自不受信任来源的项目。项目的packages.config文件可以在打开之前进行分析,但最重要的是通过MSBuild。除非你非常擅长阅读MSBuild模式,否则我会明确指出。