天天看點

一個 PC上的 “ WormHole ” 漏洞

作者:韋偉

最近安全界關注的焦點WormHole實際是一類不安全的開發習慣所導緻的,在PC上類似問題也毫不罕見,隻不過很多風險被微軟預設自帶的防火牆緩解了。

我們前幾個月發現了一個聯想電腦的漏洞,和WormHole非常類似:影響上億使用者、通路一個端口發送一條指令就可以讓目标系統下載下傳一個程式并執行。

聯想公司已于2015年9月29日修複了該漏洞。玄武實驗室和電腦管家合作,也向使用者推送了相關安全更新。在修複前,該漏洞存在于所有使用預裝Windows系統的ThinkPad、ThinkCentre、ThinkStation以及Lenovo V/B/K/E系列電腦。

聯想ThinkVantage System Update軟體用于幫助使用者從聯想的伺服器中直接下載下傳并安裝軟體、驅動、BIOS的更新,極大的簡化了使用者更新系統的難度和工作量。其被預設預裝在聯想的多款産品中。

Lenovo System Update可根據不同的網絡環境及配置通過多種方式下載下傳軟體及更新,其中一種方式為通過檔案共享下載下傳,而UNCServer.exe則是完成此功能的主程式, UNCServer.exe随System Update主程式啟動,并建立本地服務端等待主程式連接配接。在早期版本中,甚至System Update主程式退出後,UNCServer.exe也仍然保持運作狀态。

在System Update的5.6.0.34版本中,UNCServer.exe通過.NET的Remoting機制,通過TCP伺服器提供多種功能。

.NET Remoting發展自DCOM,是一項比較老的.NET分布式處理技術。它序列化服務端的對象和資料并導出,用戶端通過HTTP、TCP、IPC信道跨越程序邊界實作對服務端對象的引用。然而Remoting的序列化機制會隐式導出對象所有的方法和屬性,用戶端一旦獲得服務端導出的對象引用,即可調用服務端對象提供的所有方法。是以Remoting機制容易引入安全漏洞,且不建議将Remoting服務終端導出給不受信任的用戶端。

UNCServer導出的Connector對象提供Connect、DownloadBean、IsFileExist、IsFolderExist、GetFilesInFolder、GetSubFolder、QueryFile、LaunchIE功能。用戶端可以連接配接并擷取其引出對象,進行檔案下載下傳、應用程式執行等操作。

其中LaunchIE并未對參數進行任何驗證,可以用來啟動任意程序,其實作代碼如下:

同時,雖然System Update在防火牆政策中隻添加了UNCServer的出站規則,但由于UNCServer缺少必要的配置,使其綁定在0.0.0.0:20050上。是以在缺乏防火牆保護的情況下,任何機器都可與其建立連接配接,最終使用其提供的DownloadBean和LaunchIE功能實作遠端下載下傳程式并執行。

UNCServer建立服務端信道并導出對象的代碼如下:

聯想在2015/9/29日放出的System Update 5.7.0.13修複了包括此問題在内的多個漏洞。其重新實作了LaunchIE、LaunchHelp功能,對其建立程序的參數進行了驗證。并加強了服務端的配置,使其綁定在127.0.0.1:20050,阻止了遠端請求。修複後的部分代碼如下:

Remoting作為上一代的.NET分布式處理技術,由于設計時的安全缺陷早已被微軟的WCF技術取代。如果應用程式仍在使用Remoting技術進行分布式處理或通信,應意識到其潛在的安全問題,稍有不當則可能引入安全漏洞。