反病毒產品開發人員必需在實驗室運行惡意代碼,才能找到并建立惡意代碼的識別信息(簽名)。如果無法運行惡意代碼,將發生什么情況呢?
傳統反病毒產品的開發者需要以下前提才能順利開發反病毒產品:
·能夠在實驗室運行惡意代碼。
·能夠自動對惡意代碼進行分析。
如果沒有這樣的前提,會怎么樣呢?
為什么必需要這兩個前提?
傳統反病毒軟件的客戶端需要不斷將截獲的代碼與數據庫中保存的惡意代碼識別標志進行比對,才能發現惡意代碼。建立惡意代碼識別標志的數據庫需要對惡意代碼進行分析。如果無法對惡意代碼進行分析,無法獲取惡意代碼的特征,反病毒軟件就沒有用武之地了。
另一個問題是,如今網絡犯罪分子活動猖獗,每天新出現的惡意代碼超過5萬個。而對惡意代碼進行分析是一個勞動密集型的工作,因此反病毒軟件廠商將分析流程進行了自動化設計,以便能夠提高分析速度,讓惡意代碼特征數據庫保持最新。
如果無法對惡意代碼樣本進行自動化分析,新出現的惡意代碼數量將會迅速讓反病毒軟件廠商的惡意代碼特征庫與時代脫節。
壞消息
“我們經過技術測算,如果惡意代碼在地下大范圍擴散,將會對自動化惡意代碼分析帶來致命的打擊,惡意代碼分析將變得毫無效率和實用性。”
以上言論摘自喬治亞理工學院信息安全中心的Chengyu Song和Paul Royal所作的論文。在論文結尾,他們是這樣總結的:“Flashback使用被感染系統的獨特硬件特征(UUID)作為密鑰的方法,意味著惡意代碼編造者已經開始通過本文所述的方法保護自身代碼了。”
我想大家可能還記得Flashback。它是蘋果Mac系統上第一款真正的惡意代碼。更重要的是,它使用了具有開創性的加密技術。
德州大學的Daryl Ashley在自己的文章中解釋了Flashback 惡意代碼是如何利用被感染電腦硬件UUID(Universally Unique Identifier)將其自身部分加密的細節。雖然加密技術并不新,但是將加密技術與特定電腦的特征結合用來模糊或偽裝惡意代碼,就很新鮮了。
基于主機標示的加密
這種代碼模糊技術被稱作基于主機標示加密(Host Identity-based Encryption,HIE)。它與音像行業預防CD拷貝的技術類似,然我們看看它是如何工作的:
首先使用某種手段,讓惡意代碼下載器(loader)能夠成功進入電腦。接下來,下載器會收集該主機的特定硬件信息,利用收集來的信息創建一個加密密鑰,并用這個密鑰修改和加密遠端的惡意代碼主程序。
接下來就是下載被加密后的惡意代碼主程序。
然后下載器會重新收集相同的硬件信息,并生成相同的密鑰。這是該程序的奇怪之處。接下來下載器會用密鑰解密惡意代碼主程序,進行安裝并實施犯罪活動。
開始我覺得先加密再解密有些多余,但是仔細想想,又覺得這是個避免觸發任何報警的絕妙方法。更重要的是,在安裝過程中,如果惡意代碼被任何反病毒程序截獲,也沒有什么關系。
因為反病毒軟件所截獲的惡意代碼,只是針對該主機的惡意代碼,換一臺主機,這個代碼就失效了,因為代碼無法被正確解密。這就意味著,那些依靠逆向工程還原代碼的專家,必須先想辦法對代碼進行正確解密。Song 和 Royal在論文中對HIE的優勢進行了總結:
使用了先進的加密技術。就算反病毒專家知道密鑰是如何生成的,也不會影響該惡意代碼的保護效果。除非專家們能生成同樣的密鑰,否則無法解密惡意代碼樣本。
任意兩個惡意代碼樣本使用的是不同的密鑰,這意味著就算成功分析了一個代碼樣本,對于另一個代碼樣本的分析,也沒有任何幫助。
生成密鑰需要主機的哪些信息?
研究人員發現,收集主機的哪些信息用來生成密鑰,完全是惡意代碼開發者決定的。為了驗證他們的這一觀點,他們使用了一下硬件ID進行測試:
Environment Block: 當信息收集進程創建后,Windows存儲環境信息會進入該進程的地址空間。在我們的設計中,我們使用了進程擁有者的用戶名,計算機名以及CPU編碼。由于代碼可以直接讀取環境塊中的信息,因此這些信息獲取起來很容易。
MAC address:網卡的MAC地址可以通過GetAdaptersInfo API函數獲取。
Graphics Processing Unit (GPU) 信息: GPU的信息可以通過IDirect3D9Ex接口的GetAdapterIdentifier方法得到。在我們的設計中,我們使用了設備描述。
User Security Identifier (SID): 所使用的進程令牌。通過GetTokenInformation API可以獲取當前進程擁有者的SID。在Windows域中,該代碼是唯一的。
更多壞消息
如果以上信息還不算壞的話,我們可以看看今年初Dancho Danchev為WebRoot寫的一篇博客。其中他指出惡意代碼制造者一直在努力隱藏惡意代碼,以下是兩個例子:
Fully Undetectable cryptors: 設計用來掩蓋惡意代碼的工具,防止電腦中的安全軟件檢測到惡意代碼。其原理是不斷改變cryptor直到惡意代碼無法被反病毒程序發現為止。
Server-side polymorphism: 惡意代碼每運行一次就改變一些。這種改變是受服務器端控制的,防止被安全軟件廠商研究出代碼改變方法。
隱藏與反隱藏
在我閱讀論文的時候,我想這兩個研究人員是不是給我們提供了應對方案呢?果然他們在論文后面提供了兩點建議:
直接在被感染的肉雞上分析惡意代碼。
收集主機和網絡環境信息,并在受控的實驗室環境將這些環境完全復制出來。
總結
我并不想危言聳聽,但是我們必須意識到其中的危險信號?;贖IE技術的惡意軟件,比如Flashback 正在四處傳播。另外我要強調的是,正如我在之前很多文章中提到的,對終端用戶進行安全教育,阻斷惡意代碼進入電腦的第一步,是最關鍵的。