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