2014-03-24 101 views
9

當您打開一個您最近可能下載的項目時,Visual Studio 2013會簡要地警告您只能打開可信來源的項目。開放項目有哪些風險?在編譯之前,項目能否對您的系統造成任何損害,並且可能造成什麼樣的損害?在真正從「不可信」來源開放項目之前,您是否應該瞭解哪些指標? (不,我能想到的)Visual Studio中不可信任的項目?

回答

15

攻擊面Visual Studio中

有Visual Studio中的許多攻擊向量。所有這些都是通過設計。我們的開發人員希望在構建過程中完全控制我們的系統。不幸的是,當我們說「我想刪除構建中的緩存目錄的內容」,這也意味着惡意項目文件可以從幾乎任何地方刪除任何東西。或更糟。妥協是「嘿,我們已經給你王國的鑰匙,但我們不承認這個項目,你確定要打開這個嗎?我們不負責,如果它做了一些愚蠢的事情」警告你提到的消息。

現在考慮許多開發人員以管理員身份運行Visual Studio。

下面是其中一些攻擊媒介:

預處理和後生成事件
在它最簡單的形式,不可信的項目可以執行預生成事件,將刪除文件。或更糟。幾乎任何事情都可以在Build事件中執行。這是編譯時發生的101個事情。在項目打開

處決
Visual Studio項目文件只不過是大的MSBuild配置的更多。當您打開一個項目時,Visual Studio會執行一些MSBuild目標,所有這些目標都支持該工具。這些目標包括Compile,ResolveAssemblyReferences,ResolveCOMReferences,GetFrameworkPaths和CopyRunEnvironmentFiles。如果存在這些目標中的任何一個,則其中的任務也被執行。刪除文件,或更糟。

見:在http://msdn.microsoft.com/en-us/library/ms171468.aspx

智能感知「設計時執行」
上面提到工具的 部分包括智能感知,其內的MSBuild執行Compile任務;必須執行CSC/VBC才能獲得所有智能感知功能。由於智能感知的性質,這項任務在您工作時會重複執行,而不是上面剛開始運行的機會。

請參見:「設計時智能感知」在http://msdn.microsoft.com/en-us/library/ms171468.aspx

在MSBuild的其他地方隱藏
有其他常規的MSBuild目標,你將手動整個一天執行,包括建立一個海洋,重建,測試,和清潔。是的,請記住,即使clean是構建目標,因此Clean可能會刪除的不僅僅是您的舊\bin目錄。

的NuGet
惡意項目也可以經由暴露的NuGet系統。雖然軟件包還原不會成爲問題,但packages.config可以指定不同的存儲庫源。然後,當你安裝一個新的軟件包,比如install-package jquery時,NuGet會從不​​可信的替代品中,而不是從nuget.org中檢索到jQuery軟件包。這個惡意的jQuery包可以包含各種其他'好東西',它將作爲軟件包安裝的一部分來執行。

這不是NuGet的安全漏洞,因爲「你」指定了一個備用包源;這是通過設計,例如擁有自己內部軟件包存儲庫的公司。

你可以做什麼?

在一天結束時,你能做些什麼呢?答案的確是不打開不可信任的項目。該項目的packages.config文件可以在打開之前進行分析,但是大的曝光是通過MSBuild進行的。除非你非常擅長閱讀MSBuild架構,否則我會明確指出。

+0

很好的答案,謝謝!我打算讓問題持續一段時間,看看其他人是否有其他想法,我認爲這是一個有趣的主題。 – Corey