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