打开最近下载的项目时,Visual Studio 2013会短暂警告您只能打开来自可靠来源的项目。开放项目有哪些风险?在编译之前,项目是否可以对您的系统造成任何伤害?可能造成的损害是什么?在从“不值得信赖”的资源实际开放项目之前,您是否应该注意哪些指标? (不是我能想到的)
答案 0 :(得分:16)
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模式,否则我会明确指出。