天天看點

病毒分析流程總結

        前段時間拜讀了《惡意代碼分析實戰》一書,算是對整個病毒分析的流程和常用方法有個大緻的了解,現在總結一下,也算是給自己做的一個筆記。

        首先,病毒分析師必須具備以下知識:程式設計、彙編/反彙編、逆向分析、PE檔案結構以及一些常用行為分析軟體。下面開啟我們的旅程。

        一、在一個已經感染了病毒的機器上如何找到病毒檔案?

               找到病毒才能對其分析,找到病毒檔案就是就是分析的第一步,一般來講,病毒運作必然會建立一個程序,而這個程序就是我們找到他的突破口,一個打開的程序,可以通過任務管理器右鍵打開檔案所在位置來找到其映像檔案的位址,這樣就能找到病毒檔案了

               但是,現在的病毒越來越精明了,你可能會遇到一個病毒将其自身的程序隐藏了,一般來講,隐藏程序的方式就是“脫鍊”,在PEB(程序環境塊)中 有三條連結清單,其中一條連結清單的指向程序,該連結清單的每一個元素代表着每一個程序,如果想對某程序隐藏,那麼進行“脫鍊”(即删除聊表中的一項)即可,不要奇怪,脫鍊操作隻是在連結清單中删除,系統中還是存在該程序的,就好像你用CloseHandle關閉一個程序句柄,但是該程序仍然繼續運作一樣。對于這樣一個隐藏了自己的程序,可以用Rootkit工具,如Xuetr、冰刃等進行檢視,當然可能還有一些暴利查程序的工具也是可以查到的。

               好了,找到了病毒檔案,下面可以對其進行分析了,分析病毒一般是要在虛拟機中運作,如果你不怕死,也可以在自己實體機上跑起。。。

        二、如何通過靜态基礎分析擷取一些相關資訊?

               拿到一個程式,先别着急盲目的跑起,我們先擷取一些基本的資訊,這些東西可能會對你在後面的分析起到很大的作用。

               首先,我們用PEID檢視一些基本資訊,如果沒有殼,也沒有隐藏導入表,那麼你運氣還不錯,快看看導入表吧,一個程式想對你的電腦進行某些操作,那麼它必然會調用系統API,而導入表可以告訴我們這個程式調用了哪些API,我們憑借這些導入函數,可以大緻猜測一下這個程式作了什麼,例如我們看到CopyFile,就可以猜測一些這個程式是不是自我複制了等等。總之,導入表可以告訴我們太多太多的資訊,有經驗的病毒分析人員基本可以憑借導入表就能确定分析方向了。但是,這些隻對沒有加殼和沒有隐藏導入表,并且是正常調用API的病毒有效,如果加了殼,你可以先嘗試脫殼再來檢視導入表,更郁悶的是有些黑客為了隐藏調用函數,使用了GetProcAddress配合函數指針來調用API,這樣的話,導入表就無法對我們提供有效的幫助了。即便如此,這仍然是病毒分析的第一步。

                可以對我們提供有效資訊的不是隻有導入表,檢視字元串也經常會有一些意外收獲,這個時候我們可以使用微軟提供的控制台工具Strings檢視程式的字元串資訊,通過檢視字元串,可以擷取很多提示,比方說看到一個網站我們就可以猜測這是否是一個下載下傳者?看到一個IP我們就可以猜測這是否是一個遠端控制軟體?當然,檢視字元串的前提跟檢視導入表一樣----沒有加殼,否則這些資訊很可能被隐藏了,可以考慮脫殼後再來檢視。

        三、如何确定病毒究竟幹了些什麼?

               這個時候那就需要用到動态基礎分析了,别猶豫,上虛拟機,跑起來看看吧,跑之前我們先要打開一些行為監控軟體,最常用的是微軟提供的Process Monitor,這款軟體功能非常強大,可以監控到系統資料庫、檔案、程序、子產品、網絡、使用者等等等等資訊,用之前先要對其設定一下,按CTRL+L打開過濾對話框,選擇名稱,然後輸入你要分析的病毒的名字,然後添加包含。

               PM監控擷取的資訊太龐大了,不利于我們觀察,我們要對齊進行一些篩選,一般來講,凡是涉及打開、關閉、查詢、枚舉等這一類不會對具體内容進行影響的操作我們将其過濾掉,重點觀察設定、寫入、删除、複制等這些有實際影響的操作,然後可以根據行為來進行分析它究竟幹了些什麼,當然你也需要時刻關注他的程序樹,微軟提供的另一款工具Process Explorer可以很好的做到這一點,注意觀察,看看該程式是否打開了其他子程序,往往很多病毒并不在自己的程序裡做什麼,而是生成另一個檔案或者建立另一個程序來操作。

         四、逆向分析

               對于很多病毒,我們隻需要通過上面的操作來确定他幹了些什麼就可以了,但是有一些情況我們必須對其進行逆向剖析,第一種情況就是感染型病毒,普通的惡意軟體,我們可能隻是需要知道他們幹了些什麼就行了,但是對于感染型病毒,我們還應該知道他們具體感染了宿主程式的哪個部分,這樣才能對被感染程式進行修複,而這些隻有通過逆向分析才能獲得。

               另一種情況就更加的展現了行為分析這種方式的弊端了,那就是有些病毒的惡意行為不是一直都表現出來的,可能需要特殊條件才觸發,比如等個一兩年,再比如一些特定的條件才觸發,這個時候我們也隻能通過逆向分析來對其進行剖析。

               至于逆向分析的方式,有靜态的IDA和動态的OD,一般來講,至于用哪個,那就得結合實際情況了。

        五、脫不掉殼的程式怎麼辦?

               脫不掉殼的情況也分好多種,如果是一般的牆殼,雖然脫不掉,仍然可以用OD動态分析,在一些關鍵的API下斷點,看看他傳了哪些參數猜測一下做了什麼。

               但是對于vmp這樣的虛拟機殼,那就隻能進行動态分析草草了事了,如果vmp恰好又是感染型的呢?如何得知他究竟感染了檔案的哪個部分?解決的方法就是讓他感染一個檔案,分析該檔案感染前和感染後的差別吧。

        總結:以上這些隻是正常的一些分析流程,但是具體分析起來,各種意料不到的情況,曾經面試的時候有人問我,病毒分析師最重要的是什麼,我就回答了倆字"感覺",很多時候是靠感覺猜的,當然這個感覺是建立在知識和經驗的基礎上。另外,在實際的反病毒過程中,經常會碰到反調試和反虛拟機等各種情況,那些都是經驗之談了,這裡不再贅述,寫到這裡也累了,收場吧。。。。

繼續閱讀