這兩天逛了幾個(gè)國(guó)內(nèi)知名的反病毒的論壇或是版塊,不知道是各位同行沒(méi)有興趣討論還是為什么。
病毒分析報(bào)告看到了不少,可是難道我們真正需要的只是一個(gè)答案?一份報(bào)告嗎?或許我們更需要的是如何提高自身的分析能力。我們都想有更高的收入,但對(duì)于一個(gè)公司來(lái)說(shuō),付出更高的回報(bào)也許不是問(wèn)題,前提是員工能創(chuàng)造更大的價(jià)值,怎樣才能讓自己的逆向能力合法的轉(zhuǎn)化為更高的回報(bào)呢?也許這個(gè)帖子能有些幫助
先聲明一下,都是些個(gè)人看法,歡迎有興趣的朋友討論,權(quán)當(dāng)拋磚引玉了
通常情況下,病毒分析需求可以歸為以下3類(lèi):
1. 練手
2. 快速響應(yīng)
3. 深度分析
針對(duì)不同的緣由,我們分析的入手點(diǎn)及側(cè)重點(diǎn)又會(huì)有所不同
先從練手開(kāi)始。為什么要練手?純愛(ài)好的不在此文討論范圍呢。如果是工作需要,或是為將來(lái)的工作做準(zhǔn)備,第一個(gè)該考慮的問(wèn)題是“選材”。
不是每個(gè)樣本都適合用來(lái)練手的,如果要我來(lái)推薦,我會(huì)選以下幾種樣本。
下載器類(lèi)的木馬(Downloader),原因很簡(jiǎn)單,普及。這類(lèi)型的木馬會(huì)在日常工作重復(fù)出現(xiàn),雖然大多數(shù)情況下都不需要做完整的白盒分析,但這會(huì)是一個(gè)好的開(kāi)始。
機(jī)器人類(lèi)的后臺(tái)木馬(Bot),這類(lèi)型的木馬通常都是受利益驅(qū)動(dòng)的,會(huì)有越來(lái)越多的專(zhuān)業(yè)開(kāi)發(fā)者加入此類(lèi)木馬的開(kāi)發(fā),所以有可能是最復(fù)雜也是最不能回避的一類(lèi)威脅。
信息收集類(lèi)的木馬(Infostealer),這類(lèi)型的木馬同樣可能是受利益驅(qū)動(dòng)的,但相對(duì)而言,前者可能造成的后續(xù)危害更大,不過(guò)此類(lèi)威脅也不能忽視,例如盜竊銀行網(wǎng)游帳號(hào)的,或自動(dòng)轉(zhuǎn)賬等等。
網(wǎng)絡(luò)蠕蟲(chóng)(Worm),worm可能有很多種傳播方式,郵件,im, p2p,文件共享,usb等等,單純從練手的角度考慮,每種類(lèi)型的最好都接觸一次。
文件感染型病毒(File infector virus),同上,病毒感染和傳播也可能有多種途徑,但是。。。。個(gè)人以為最多拿一個(gè)樣本熟悉一下就夠了。為什么?因?yàn)橄∩伲斜匾獮椴坏?%的潛在問(wèn)題花費(fèi)大量時(shí)間去準(zhǔn)備嗎?個(gè)人認(rèn)為是不值得的,做好其他99%的工作,剩下那1%完全可以在工作中積累和彌補(bǔ)
還有一類(lèi)非常重要,但至少在練手初期不推薦的木馬,rootkit。。。沒(méi)必要在剛開(kāi)始的時(shí)候折騰自己,至于對(duì)于其他諸如MBR,BIOS,各種算法等等的作為愛(ài)好研究一下還好,但如果浪費(fèi)很多精力用來(lái)練手。。。不劃算
個(gè)人以為接下來(lái)該考慮的問(wèn)題是“怎么練”。
對(duì)于以工作為目的的病毒分析而言,最重要的是什么?答案很簡(jiǎn)單,快
你需要快速的識(shí)別提交的樣本是否是病毒,是哪一類(lèi)病毒,應(yīng)該做什么類(lèi)型的檢測(cè)或是修復(fù)等等
所以對(duì)于“怎么練”這個(gè)問(wèn)題,要做的第一件事是快速識(shí)別,而對(duì)于快速識(shí)別來(lái)說(shuō),沒(méi)有什么比在虛擬機(jī)或是專(zhuān)用的病毒測(cè)試機(jī)器上運(yùn)行它更快了,當(dāng)然運(yùn)行+監(jiān)視結(jié)果不是個(gè)100%準(zhǔn)確的辦法,可能有的威脅需要條件觸發(fā)等等。魚(yú)和熊掌不可得兼,重要的是在最短的時(shí)間內(nèi)盡可能多的作出響應(yīng)。除此之外也還有一些可以考慮的手段,例如觀(guān)察字符串,調(diào)用的API等等?焖僮R(shí)別雖然看起來(lái)并不是什么技術(shù)含量很高的步驟,但必不可少。
接下來(lái)這步不是這里能多做討論的,怎么加,加什么類(lèi)型的檢測(cè)與修復(fù)代碼,這一步不同公司有不同的引擎,有針對(duì)有選擇的練習(xí)可以事半功倍
回到大多數(shù)朋友口中的逆向或者說(shuō)白盒分析來(lái),怎么鍛煉出色的逆向病毒能力呢?
除了毅力+細(xì)心之外,我想提幾個(gè)需要注意的問(wèn)題。
為什么要逆向病毒。逆向病毒和逆向其他類(lèi)型的程序完全不同,你需要的是熟悉了解病毒的各種機(jī)制,然后有針對(duì)性的做修復(fù)或是給客戶(hù)提供建議如何預(yù)防。
這里首先要提出來(lái)的是“殼的問(wèn)題”。
熟悉越多的殼,對(duì)你的工作會(huì)越有幫助,但如果哪位朋友為了分析病毒去學(xué)習(xí)脫殼,那就有些南轅北轍了。為什么?因?yàn)槲覀儾恍枰粋(gè)脫完殼后還可以運(yùn)行的病毒,如果能脫殼當(dāng)然好,但即便不能,我們也不是不能分析了。
1. 運(yùn)行 2.選擇合適的斷點(diǎn) 3.掛起可能存在的反調(diào)試監(jiān)控線(xiàn)程 4. 然后掛上去調(diào)試,或是把運(yùn)行的程序從內(nèi)存中dump出來(lái)靜態(tài)分析等等,方法可能有很多,最重要的是怎樣快,就怎樣好。另一方面,幾乎所有的高危威脅,都不會(huì)只用公開(kāi)的殼,所以過(guò)于在意怎么脫殼不見(jiàn)得會(huì)有多少幫助
在殼之后,我想問(wèn)的是“靜態(tài)”還是“動(dòng)態(tài)”?這不是一個(gè)有100%答案的問(wèn)題,具體問(wèn)題具體分析,但原則上來(lái)說(shuō),能靜態(tài)搞定的,沒(méi)必要?jiǎng)討B(tài)調(diào)試。靜態(tài)不容易理解的,再試著調(diào)試。
接下來(lái)的問(wèn)題是一些新入行朋友常糾結(jié)的“F7的問(wèn)題”。步入Step into是必需的,但看到call就Step into絕對(duì)不是個(gè)好習(xí)慣。一個(gè)出色的逆向工程師最與眾不同的是會(huì)選擇什么時(shí)候F8(Step over)什么時(shí)候F9(Run),以及在需要的時(shí)候Alt+F7(load script),有時(shí)候某個(gè)函數(shù)看起來(lái)很復(fù)雜,步入分析可能要很久,但如果學(xué)會(huì)猜測(cè)+驗(yàn)證,也許一個(gè)簡(jiǎn)單的F8就搞定了。我們不需要知道每個(gè)函數(shù)是怎么實(shí)現(xiàn)的,我們只需要知道病毒想干什么,會(huì)干什么。這個(gè)猜測(cè)不是一天兩天能練出來(lái)的,但如果你試著堅(jiān)持下去,慢慢的會(huì)感受到它的妙處
除此之外,不要過(guò)度依賴(lài)于某個(gè)工具或是插件,常見(jiàn)的工具病毒作者也知道,如果有針對(duì)的做了處理,部分過(guò)度依賴(lài)工具的朋友沒(méi)準(zhǔn)就被忽悠進(jìn)去了
最后再聊兩句深度分析。深度分析通常會(huì)消耗掉非?捎^(guān)的時(shí)間,如果不是客戶(hù)需求,或是某一類(lèi)非常活躍的威脅,不值得。深度分析也并不僅僅包括逆向,甚至可能會(huì)包含地下網(wǎng)絡(luò)的追蹤與調(diào)查,域名與服務(wù)器的分析,等等,有技術(shù)相關(guān)的,也有不相關(guān)的。本文不討論其他內(nèi)容,對(duì)于完整的逆向分析而言,除了上面提到過(guò)的之外,還有以下幾點(diǎn)建議:
1. 在條件允許的情況下,不妨找一些同一家族的早期變種用于參考,這些早期變種或許可以幫助你更好的理解正在分析的新變種。例如Spyeye, 近期版本Spyeye不再直接使用字符串比較,而是不可逆的校驗(yàn)碼,換句話(huà)說(shuō),如果沒(méi)有原始字符串,要理解起來(lái)還真會(huì)浪費(fèi)一些時(shí)間
2. 不是每個(gè)病毒都可以完美脫殼后再分析的。例如Zeus,Zeus解密使用到的一個(gè)密鑰是基于原始文件第三節(jié)的虛擬地址計(jì)算出來(lái)的,無(wú)論多完美的脫殼,這個(gè)值肯定會(huì)變。
3. 對(duì)于復(fù)雜的惡意代碼,如果靜態(tài)分析或完整的動(dòng)態(tài)調(diào)試都不太容易的話(huà),試著Ctrl+N單調(diào)某一個(gè)函數(shù)未嘗不是個(gè)辦法。
4. 有時(shí)間的話(huà),用常見(jiàn)的編譯器(例如VC,Delphi,VB等)編譯一些程序逆來(lái)玩,這樣可以熟悉一些常見(jiàn)的編譯器函數(shù),例如strlen。
5. 有時(shí)間的話(huà),熟悉熟悉各類(lèi)加密解密,壓縮算法, 撞上的時(shí)候會(huì)省不少時(shí)間。
6. 善用google和baidu,參考別人的分析報(bào)告并不是什么壞事,但不要依賴(lài),最后的報(bào)告必須是基于自己的分析。
7. Olly確實(shí)比其他調(diào)試器強(qiáng)大,但是如果你的IDA能搞定呢?別忘了IDA隨時(shí)可以添加備注,一個(gè)好的IDB對(duì)于以后的工作或許也有幫助,所以在允許的時(shí)候,我更推薦IDA
就先到這里吧,希望對(duì)各位熱愛(ài)反病毒的朋友能有所幫助,也歡迎大家討論或提出更多的問(wèn)題和建議,:)