個人總結系列36防毒軟體調研

2021-03-10 05:40:55 字數 5072 閱讀 1040

總體來說,防毒軟體的工作流程是:採集樣本(使用者舉報、防毒廠商共享)->病毒分析工程師擷取特徵碼->特徵碼加入特徵庫->使用者公升級特徵庫。特徵庫匹配是查殺已知病毒很有效的一項技術,也是防毒引擎賴以工作的基礎(掃瞄、監控都需要呼叫特徵庫),一直被防毒軟體沿用下來,國內外無數反病毒工作者為擷取病毒特徵碼付出了巨大努力,所有特徵碼都需要嚴格的測試和比對,否則極易造成誤傷。

所謂特徵碼,就是防毒軟體從病毒樣本中提取的不超過64位元組且能獨一無二地代表病毒特徵的十六進製制**。主要有單一特徵碼、多重特徵碼和復合特徵碼這三種型別。特徵碼提取的思路是:

首先獲取乙個病毒程式的長度,根據樣本長度可將檔案分為若干份(分段的方法在很大程度上避免了採用單一特徵碼誤報病毒現象的發生,也可以避免特徵碼過於集中造成的誤報),每份選取16b或32b的特徵串,若該資訊是通用資訊,即很多檔案該位置都是一樣的資訊,那麼捨棄,調整偏移量後重新選取;若為全零的位元組,則也要調整偏移後重新選取。最後,將選取出來的幾段特徵碼及它們的偏移量存入病毒庫,標示出病毒的名稱即可。在掃瞄病毒時,防毒軟體將目標檔案通過模式匹配演算法與病毒庫中的特徵碼進行比對,以確定是否染毒。

特徵碼的定位單一特徵碼掃瞄,就是從病毒樣本中提取連續的能標示此病毒的若干個位元組。其好處在於開銷小,便於公升級和維護病毒庫。但這種技術容易導致誤查誤殺,目前已較少使用。

對於多重特徵碼,可在單一特徵碼掃瞄的基礎上進一步提取不連續的若干段特徵碼,僅當待檢測檔案完全符合這多段特徵碼時才報警。這樣可以減少誤殺率,提高查殺的準確度,因此成為多數防毒軟體的首選技術。掃瞄復合特徵碼時,首先仍從病毒樣本中提取多段特徵碼(假定為n段)。

與多重特徵碼不同的是,它不需要完全符合所有多段特徵碼才查殺病毒,而是選取乙個種子m(一般取m=2),當符合這多段中的任意m段才查殺病毒。

加殼與脫殼

所謂加殼,是一種通過一系列數**算,將可執行程式檔案或動態鏈結庫檔案的編碼進行改變,以達到縮小檔案體積或加密程式編碼的目的。當被加殼的程式執行時,外殼程式先被執行,然後由這個外殼程式負責將使用者原有的程式在記憶體中解壓縮,並把控制權交還給脫殼後的真正程式。一切操作自動完成,使用者不知道也無需知道殼程式是如何執行的。

一般情況下,加殼程式和未加殼程式的執行結果是一樣的。

目前防毒軟體主要依靠特徵碼技術查殺病毒,由於加殼軟體會對原始檔進行壓縮、變形,使加密前後的特徵碼完全不同,因此造成防毒軟體對這類病毒查殺效果不佳。對於加殼後的同乙個病毒來說,脫殼能力不強的防毒軟體需要新增兩條不同的特徵記錄來標識這種病毒。如果黑客換一種加殼演算法,則對於這些防毒軟體來說又是一種新的病毒,必須新增新的特徵記錄才能夠查殺。

這樣就大大提高了防毒軟體對系統資源的占用,同時降低了其查殺病毒的能力。

脫殼指將木馬的偽裝卸除,使其特徵碼被暴露出來,從而使防毒引擎能夠根據其特徵碼對木馬進行查殺。脫殼主要有兩種方法:靜態脫殼和動態脫殼。

第一種,是靜態脫殼。靜態脫殼是指找出加殼軟體的加殼演算法,寫出逆向演算法,就像壓縮和解壓縮一樣。由於目前很多「殼」均帶有加密、變形的特點,每次加殼生成的**都不一樣。

靜態脫殼對此無能為力,但由於其技術門檻較低,仍然被一些防毒軟體所使用。

第二種,是動態脫殼。由於加殼的程式執行時必須還原成原始形態,即加殼程式會在執行時自行脫掉「馬甲」。比如抓取(dump)記憶體中的映象,再重構成標準的執行檔案。

相比靜態脫殼方法,這種脫殼方法對自行加密、變形的殼處理效果更好。

動態脫殼技術的關鍵在於必須得到病毒體解密後的明文,而得到明文產生的時機就是病毒自身解密**解密的完畢。目前有兩種方法可以跟蹤控制病毒的每一步執行,並能夠在病毒迴圈解密結束後從記憶體中讀出病毒體明文。一種是單步和斷點跟蹤法,和目前一些程式偵錯程式相類似;另一種方法當然就是虛擬執行法。

下面分別分析單步和斷點跟蹤法和虛擬執行法的技術細節。

除錯脫殼技

單步跟蹤和斷點是實現傳統偵錯程式的最根本技術。單步的工作原理很簡單:當cpu在執行一條指令之前會先檢查標誌暫存器,如果發現其中的陷阱標誌被設定則會在指令執行結束後引發乙個單步陷阱int1h。

至於斷點的設定有軟硬之分,軟體斷點是指偵錯程式用乙個通常是單位元組的斷點指令(cc,即int3h)替換掉欲觸發指令的首位元組,當程式執行至斷點指令處,預設的除錯異常處理**將被呼叫,此時儲存在棧中的段/偏移位址就是斷點指令後一位元組的位址;而硬體斷點的設定則利用了處理器本身的除錯支援,在除錯暫存器(dr0–dr4)中設定觸發指令的線形位址並設定除錯控制暫存器(dr7)中相關的控制位,cpu會在預設指令執行時自動引發除錯異常。而windows本身又提供了一套除錯api,使得除錯跟蹤乙個程式變得非常簡單:偵錯程式本身不用接掛預設的除錯異常處理**,而只須呼叫waitfordebugevent等待系統發來的除錯事件;偵錯程式可利用getthreadcontext掛起被除錯執行緒獲取其上下文,並設定上下文中的標誌暫存器中的陷阱標誌位,最後通過setthreadcontext使設定生效來進行單步除錯;偵錯程式還可通過呼叫兩個功能強大的除錯api-,vc++的偵錯程式就是直接利用這套除錯api寫成的。

因此,可以將以上的除錯技術運用於病毒**的自動解密上。最簡單的做法是:建立待查可執行檔案為偵錯程式的除錯子程序,然後用上述方法對其進行單步跟蹤,每當收到具有exception_single_step異常**的事件時就可以分析該條以單步模式執行的指令,最後當判斷病毒的整個解密過程結束後即可呼叫readproces**emory讀出病毒體明文。

用單步和斷點跟蹤法的唯一一點好處就在於它不用處理每條指令的執行:這意味著它無需編寫大量的特定指令處理函式,因為所有的解密**都交由cpu去執行,偵錯程式不過是在**被單步中斷的間隙得到控制權而已。但這種方法的缺點也是相當明顯的:

其一、容易被病毒覺察到,病毒只須進行簡單的堆疊檢查,或直接呼叫isdebugerpresent就可確定自己正處於被除錯狀態;其

二、由於沒有相應的機器碼分析模組,指令的解碼,執行完全依賴於cpu,所以將導致無法準確地獲取指令執行細節並對其進行有效的控制;其

三、單步和斷點跟蹤法要求待查可執行檔案真實執行,即其將做為系統中乙個真實的程序在自己的位址空間中執行,這當然是病毒掃瞄所不能允許的。很顯然,單步和斷點跟蹤法可以應用在偵錯程式,自動脫殼等方面,但對於查毒卻是不合適的。

動態虛擬機器脫殼技術

對於病毒,如果讓其執行,則使用者計算機就會被病毒感染。因此,一種新的思路被提出,即給病毒構造乙個**的環境,誘騙病毒自己脫掉「馬甲」。並且「虛擬環境」和使用者的計算機隔離,病毒在虛擬機器的操作不會對使用者計算機有任何的影響。

通常,虛擬機器的設計方案可以採取以下三種:自含**虛擬機器(scce),緩衝**虛擬機器(bce),有限**虛擬機器(lce)。

自含**虛擬機器工作起來像乙個真正的cpu。一條指令取自記憶體,由scce解碼,並被傳送到相應的模擬這條指令的例程,下一條指令則繼續這個迴圈。虛擬機會包含乙個例程來對記憶體/暫存器定址運算元進行解碼,然後還會包括乙個用於模擬每個可能在cpu上執行的指令的例程集。

因此,scce的**會變的無比的巨大而且速度也會很慢。然而scce對於乙個先進的反病毒軟體是很有用的。所有指令都在內部被處理,虛擬機器可以對每條指令的動作做出非常詳細的報告,這些報告和啟發式資料以及通用清除模組將相互參照形成乙個有效的反毒系統。

同時,反病毒程式能夠最精確地控制記憶體和埠的訪問,因為它自己處理位址的解碼和計算。

緩衝**虛擬機器是scce的乙個縮略版,因為相對於scce它具有較小的尺寸和更快的執行速度。在bce中,一條指令是從記憶體中取得的,並和乙個特殊指令表相比較。如果不是特殊指令,則它被進行簡單的解碼以求得指令的長度,隨後所有這樣的指令會被匯入到乙個可以通用地模擬所有非特殊指令的小過程中。

而特殊指令(只佔整個指令集的一小部分)則在特定的小處理程式中進行模擬。bce通過將所有非特殊指令用乙個小的通用的處理程式模擬來減少它必須特殊處理的指令條數,這樣一來它削減了自身的大小並提高了執行速度。但這意味著它將不能真正限制對某個記憶體區域、埠等的訪問,同時它也不可能生成如scce提供的同樣全面的報告。

**虛擬機器類似用於通用解密的虛擬系統所處的級別。lce實際上並非乙個虛擬機器,因為它並不真正的模擬指令,它只簡單地跟蹤一段**的暫存器內容,也許會提供乙個小的被改動的記憶體位址表,或是呼叫過的中斷等。選擇使用lce而非更大更複雜的系統的原因是,即使只對極少數指令的支援便可以在解密原始加密病毒的路上走很遠,因為病毒僅僅使用了intel指令集的一小部分來加密其主體。

使用lce,原本處理整個intel指令集時的大量花費沒有了,帶來的是速度的巨大增長。當然,這是以不能處理複雜解密程式段為代價的。當需要進行快速檔案掃瞄時lce就變的有用起來,因為乙個小型但像樣的lce可以用來快速檢查執行檔案的可疑行為,反之對每個檔案都使用scce演算法將會導致無法忍受的緩慢。

當然,如果乙個檔案看起來可疑,lce還可以啟動某個scce**對檔案進行全面檢查。

使用虛擬執行法的缺點是它必須在內部處理所有指令的執行:這意味著它需要編寫大量的特定指令處理函式來模擬每種指令的執行效果。用軟體方法模擬cpu並非易事,需要對其機制有足夠的了解,否則模擬效果將與真實執行相去甚遠。

「虛擬機器脫殼」技術已經成為近年來全球安全業界公認的、解決這一問題的最有效利器。但由於編寫虛擬機器系統需要解決虛擬cpu、虛擬周邊硬體裝置、虛擬驅動程式等多個方面的困難。

病毒和正常程式的區別可以體現在許多方面,比較常見的如:通常乙個應用程式在最初的指令,是檢查命令列輸入有無引數項、清屏和儲存原來螢幕顯示等,而病毒程式則沒有會這樣做的,通常它最初的指令是直接寫盤操作、解碼指令,或搜尋某路徑下的可執行程式等相關操作指令序列。啟發式**掃瞄技術就是把這種經驗和知識移植到乙個查病毒軟體中的具體程式體現。

啟發式指的是「自我發現的能力」或「運用某種方式或方法去判定事物的知識和」。乙個運用啟發式掃瞄技術的病毒檢測軟體,實際上就是以特定方式實現的動態高度器或反編譯器,通過對有關指令序列的反編譯逐步理解和確定其蘊藏的真正動機。例如,如果一段程式以如下序列開始:

mov ah ,5/int,13h,即呼叫格式化盤操作的bios指令功能,那麼這段程式就高度可疑值得引起警覺,尤其是假如這段指令之前不存在取得命令列關於執行的引數選項,又沒有要求使用者互動性輸入繼續進行的操作指令時,就可以有把握地認為這是乙個病毒或惡意破壞的程式。

啟發式防毒代表著未來反病毒技術發展的必然趨勢,具備某種人工智慧特點的反毒技術,向我們展示了一種通用的、不需公升級(不依賴於公升級)的病毒檢測技術和產品的可能性。由於諸多傳統技術無法企及的強大優勢,必將得到普遍的應用和迅速的發展。純粹的啟發式**分析技術的應用(不借助任何事先的對於被測目標病毒樣本的研究和了解),已能達到80%以上的病毒檢出率, 而其誤報率極易控制在0.

1%之下,這對於僅僅使用傳統的基於對已知病毒的研究而抽取「特徵字串」的特徵掃瞄技術的查毒軟體來說,是不可想象的,一次質的飛躍。在新病毒,新變種層出不窮,病毒數量不斷激增的今天,這種新技術的產生和應用更具有特殊的重要意義。

個人總結系列 53 Matlab學習總結

matlab是美國mathworks公司出品的商業數學軟體,用於演算法開發 資料視覺化 資料分析以及數值計算的高階技術計算語言和互動式環境。首先簡單介紹一下matlab的主要功能,首先是數值計算和符號計算功能 matlab以矩陣作為資料操作的基本單位,還提供了十分豐富的數值計算函式 其次是繪圖功能 ...

36周總結計畫

第36周 9月5日 9月12日 安勤部 一 上週總結 全部依計畫完成。二 下週計畫 工作重點加粗 1 常態性工作的延續 持續進行,責任人 徐怡 1 日常巡檢工作 2 消防器材維護工作 3 現場營業秩序和安全控管工作 4 召開部門例會 5 營運員工崗前10分鐘安全教育 2 安勤新員工崗上培訓工作。9月...

三國殺個人賽積分規則

此階段選手須將手牌棄至與當前體力值相等,若進入下一階段後由裁判發現選手手牌數多餘當前體力值,該選手須隨機失去相應數量手牌並由裁判視情況予以扣分。回合結束階段 若此階段有可發動的武將技能,選手有10秒的時間決定是否發動。若發動武將技能須宣告所使用的技能。選手在比賽過程中不得做接打 收發簡訊等與比賽無關...