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