Visual Studio能否避免感染類似XcodeGhost的病毒?

由於VS的體積原因,很多人都不是從官方msdn下載該軟體,之前我下載VS的時候也沒有意識對其進行散列校驗。那麼,VS有沒有可能也被人惡意植入後門,有沒有類似的案例發生?


VS2010以上版本反正是不能裝在XP上面的了。

只要你把VS裝進C:Program Files下面,然後打開UAC,可以保證病毒在修改VS的文件的時候要先徵得你的同意,你可以根據需要來決定是否運行這個病毒。不過就算病毒運行了也不一定會成功的,因為VS的重要的文件都是有簽名的,而且只要你不用命令行改配置,標記為需要簽名的exe將無法載入沒有簽名的dll,而且.net framework的所有文件也是都簽了名的。

當你安裝VS的時候,如果打開了UAC,這個時候VS要是被改了,UAC會變黃告訴你這個程序沒有簽名。如果百度改了VS他會告訴你這個VS是百度發行的。你可以根據需要來決定是否運行這個來歷不明的安裝程序。

總之,在Windows7以及更新的系統,只要你開了UAC,並且正常的軟體都不要給admin許可權運行(VS的話也只有調試那些非得運行在admin的程序才需要用admin來啟動VS),那任何病毒要運行之前都得先經過你的同意。當然了,你總是可以根據具體的需要,來決定是否運行病毒。

不過操作系統總是不可避免的會有漏洞的。所以開了UAC雖然99%的情況下都安全了,但是還有那1%。不過解決方法很簡單,只要你的開發機上只安裝跟開發有關的東西,特別是不安裝任何國產程序的話,那肯定是安全的。當然了,客戶就是上帝,你總是可以根據具體的需要,來決定是否使用admin來安裝三大全家桶的。


在Delphi的那個sysconst.dcu流行的時代,有人做過VC6的類似病毒,原理應該是利用VC6提供的CRT源碼的某些文件,把自己的代碼插入後重新編譯生成靜態的CRT庫文件替代原有vc6 lib目錄下的相應庫文件,C或C++程序靜態編譯後,病毒代碼就被鏈接進去,然後到其他機器上運行時,病毒會在後台試圖以一開始的方法將系統中裝好的VC6感染

嚴格來說,由於現代的vs中仍然提供crt的源代碼,因此仍然有實現這種東西的可能,但是vista以來program files目錄的許可權嚴格化之後,應該可以大大減少安裝好之後的vs的crt靜態庫,或動態庫符號文件被病毒感染這種情況的發生

而且現在vs的安裝包每個文件應該都會校驗吧,除非病毒作者為了重新打包而將此機制破解了

另外,sysconst.dcu病毒流傳也很廣,據說某個老版本的酷狗里都有此病毒。好在此病毒原版沒有危害性模塊,僅攻擊Delphi本身,因此並未掀起波瀾。


答案是,能

XcodeGhost事件本來就是蘋果自己種下的惡果

首先,VS官網(不是MSDN)本來就提供了官方的VS iso下載,而且還附帶了MD5驗證,直接下就好了,速度超快

其次,VS需要安裝大量系統組件,同時破解難度為0,就算以前沒有社區版的時候也不需要破解(旗艦版Key到處都是),所以完全沒有各種「綠色版」「破解版」的生存空間,大家總會傾向於下載官方鏡像

最重要的是,不同於Xcode那與裸奔無異的app包,VS使用的WindowsInstaller安裝器,不管是安裝程序還是整個安裝包全都進行了數字簽名,如果有人想給安裝包塞私貨的話安裝器會直接報錯,而如果修改安裝器的話因為沒有簽名,UAC會直接報警(彈出黃色警告框,並且提示「未知身份的開發者」,正常的提示框是藍色並且顯示為Microsoft發布),如果你非要假定用戶都是關UAC的傻逼,那你直接做個木馬多好,何必非要折騰IDE呢?

歸根結底,XcodeGhost事件發生的根本原因在於蘋果為了強行推廣MacAppStore,非要把原本應該獨立分發的Xcode塞進商店,不提供任何官方的dmg包下載與驗證方式(蘋果開發者官網並沒有提供MD5之類的驗證方式),而OS X本身沒有任何簡單直觀的DMG包完整性驗證機制——蘋果自己提供的驗證方式還是太繁瑣,而且只能驗證一個已經安裝的Xcode,不能對包本身進行驗證。這個問題只可能發生在OS X下——事實上目前除了Xcode之外,中毒的Unity也是OS X版。像Xcode這種開發工具,用MAS分發,說白了其實就是強行裝逼的體現——商店上下載的Xcode在第一次運行的時候一樣需要系統許可權來安裝各種開發工具,根本不可能全程跑在沙盒裡。

Validating Your Version of Xcode

PS:評論區補充了Xcode的官網下載鏈接——但這個鏈接極其難找,在http://developers.apple.com首頁上都看不到,首頁上給你的仍然只有7.1beta的地址和Xcode7跳轉到AppStore的地址(相比之下VisualStudio所有版本的地址直接就在官網上,並且都提供了在線安裝和iso兩種方式,以及MD5)——而且仍然沒有提供MD5驗證。


推薦閱讀:

世界上存在「與規範完全一致」的 C++ 編譯器/解釋器嗎?
編譯器內部是如何處理 C 語言 typedef 關鍵字的?
C++ 中的 std::vector 為什麼可以越界訪問?
以後的C++編譯器有沒有可能使用C#來編寫?
編譯器或解釋器前端對於作用域的處理方法?

TAG:Xcode | MicrosoftVisualStudio | 計算機病毒 | 編譯器 | XcodeGhost |