天天看點

惡意代碼檢測技術的演化

在本文中我們讨論了識别惡意代碼的各種方法,它們彼此間在功能上(以及時間上)的聯系,它們的技術以及特點。從一個方面講,這裡寫到的許多技術和原理實際上并不僅僅可以用在反病毒方面,還可以用在計算機安全系統裡更為廣泛的環境下。從另一方面講,有很多技術,它們确實重要,但隻用在反病毒方面,如脫殼和流特征檢測,對這樣的技術本文沒有讨論。

引言

最初的搜尋惡意程式的技術是基于特征碼的。特征碼是一段能唯一确定惡意程式的一段代碼。随着病毒的演化,病毒檢測技術也日益複雜。這些先進的技術——各種啟發式分析和行為分析——都可以統稱為非特征檢測技術。

盡管從标題看本文似乎涉及到了所有的惡意代碼檢測技術,但實際上本文主要聚焦與非特征檢測技術——關于特征掃描技術已經沒什麼可說的了,這種技術很直覺,也很原始。目前,使用者對非特征檢測技術都還比較陌生。在“啟發式”、“主動檢測”、“行為檢測”、“HIPS”這些名稱背後的到底是些什麼呢?這些技術彼此間有什麼關系呢?它們又有什麼有缺點呢?給出這些問題的答案就是本文的目的。另外,本文和前一篇《惡意程式自保護技術的演化》一樣,目的就是系統地總結并最為客觀地研究一些惡意程式及其防禦上的

一些特别的問題。本文預期的讀者是對反病毒技術有基本的認識但不是這個惡意程式防禦領域專家的人。

惡意程式防禦系統模型

首先我們來看下惡意代碼搜尋技術。為此,我使用以下模型。

在任何防禦系統中都有兩個元件:技術元件和分析元件。在子產品層面或算法層面上,這兩個元件的區分倒不一定明顯,而在功能層面上,它們卻有着顯著的差別。

技術元件是用某些算法為分析元件提供分析資料的程式的集合。例如,檔案位元組代碼,檔案中的文本字元串,程式獨有的行為或行為序列。

分析元件是做出判決的系統。它是一個算法,分析送出給它的資料并給出某些判定結果。根據這些結果和安全政策,反病毒軟體(或其它安全軟體)會采取相應的行動:通知使用者,詢問處理方式,将檔案隔離,阻斷未認證的程式行為等等。

舉個例子。我們來看一下經典的基于特征碼檢測的防禦惡意程式的方法。對這種方法來說,技術元件就是擷取檔案系統、檔案數量及内容等資訊的系統,而分析元件就僅僅是一個比較位元組序列的操作。也就是說,簡單說來,分析元件的輸入就是檔案代碼,而輸出就是判定結果——檔案是否有害。

在這種模型架構下,任何防禦系統都可以表示成一個“複數”——兩個獨立對象的聯合體:技術元件與分析元件。用這種觀點來分析技術,我們很容易看出它們的關系和它們的優缺點。特别地,借助于這個模型我們可以很容易地解決技術定義中的歧義。例如,後面會證明,“啟發式”,作為一種判定的方法,隻是應該歸在分析元件中,而不是一種獨立的技術。而HIPS (Host Intrusion Prevention System),隻是一種技術元件,是一種搜集資料的方法。由此得出結論,這些術語,首先形式上彼此不沖突,第二,不能完整地刻畫它們所描述的技術。說到啟發式,我們可以不确定啟發式分析所用到的資料,而說到HIPS系統,我們可以不知道它的判定标準。

關于這些技術的更為詳細的資訊将在相應的章節裡讨論,現在我們來看惡意代碼搜尋技術原理本身:技術的——資訊收集手段,和分析的——資訊處理手段。

技術元件

構成惡意程式檢測系統的技術元件收集用于分析的資料。

惡意程式,首先是具有一定内容的檔案,其次是在作業系統中進行的一組行為,第三,是作業系統中作用效果的集合。是以對惡意程式的識别可以從不同的層面上進行:通過位元組序列,通過行為,通過對作業系統的影響等等。

一般來講,要使惡意程式現形可以通過以下方法:

   1. 将檔案作為位元組序列處理。

   2. 模拟程式代碼。

   3. 在沙箱中運作程式(sandbox)(以及其它類似的虛拟技術)。

   4. 監視系統事件。

   5. 搜尋系統異常。

上面的方法是按處理代碼時抽象級别由低到高排列的。這裡抽象級别的意思就是我們用什麼樣的角度來看可執行程式:作為原始的數字對象(位元組串),作為行為(位元組串的結果,更為抽象)施動者或是作為對作業系統産生的效果(行為的結果,進一步抽象)的集合。反病毒技術大概就是按照這個向量來發展的:處理檔案本身,根據檔案處理事件,根據事件處理檔案,處理環境本身——是以給出的清單很自然地按時間順序排列下來。

要強調的是,上面列出的獨立技術有幾種,惡意程式資料收集技術的連續發展過程就有幾個階段。從一種技術發展過渡到另一種技術基本上都是漸進的。例如,對模拟來說,如果技術的實作隻将檔案作為位元組序列,那麼它就接近于簡單的檔案處理;如果完整地虛拟了系統函數,那它又接近于虛拟技術。

我們來詳細地看一下這些方法。

1. 檔案掃描

最早出現的反病毒軟體都是将檔案視為位元組序列的。然而,我們卻很難稱之為分析技術。它僅僅是将位元組序列和已知的特征做比較。但我們現在感興趣的是這種技術的技術元件:

在搜尋惡意程式過程中,資料被傳遞到判定元件,而這資料是從檔案中抽取出的一個具有某種形式的有序位元組序列。

這種方法的特點在于,反病毒軟體隻處理程式的位元組碼,而不關心它的行為。盡管方法比較老舊,但并沒有過時,直到現在還用在所有現在的反病毒軟體中,隻是它已經不再是唯一的,甚至不再是主要的方法了,隻是衆多技術中的一種而已。

2. 模拟

模拟技術從程度上來說處于把程式視為位元組序列的技術和把程式視為行為序列的技術之間。

虛拟機将程式位元組代碼劃分為指令,并在虛拟的計算機環境中執行每一條指令。這樣就可以監視程式的行為,不會像在真實環境中執行惡意程式那樣會威脅作業系統和使用者資料。

在抽象層級中模拟器位于中層。是以虛拟機的特點大緻可以歸結為:虛拟機仍然和檔案打交道,但是所分析的實際上已經是事件了。虛拟機已經用在了許多反病毒軟體中,主要是用作底層的檔案引擎或高層引擎(沙箱、系統監視)的一種輔助。

3. 虛拟化: 沙箱

虛拟化技術使用了沙箱,是模拟技術的一種邏輯延伸。使用沙箱技術時,惡意程式已經是在真實的環境中運作了,隻不過是被嚴格控制起來了。

沙箱這個名稱就已經很好地反映了虛拟化的本質。通常意義上的沙箱就是封閉的環境,小孩子們可以在裡面安全地玩耍。如果做個類比,把作業系統比作現實世界的話,那麼扮演愛玩的孩子角色的就是惡意程式了,而這時封閉的環境就成了一組在作業系統中活動的準則。這些準則可以阻止惡意程式修改系統資料庫,利用部分模拟技術提供有限的檔案系統操作支援。例如,在沙箱中啟動的程式會得到系統系統資料庫的一個副本,這樣這個程式對系統資料庫做的修改不會影響到作業系統的正常工作。這樣,我們可以虛拟出任何一個程式與環境的接觸點:檔案系統,系統資料庫。

模拟技術與虛拟化技術之間的界線可能并不寬,但卻很明顯。前一種技術為程式的執行提供了環境(這樣工作的程序就包含了被執行的程式并完全控制了程式的運作)。對後一種技術來說,作為運作環境的已經是真實的作業系統了,而這種技術就是用來控制程式與作業系統間的互動,這就是它和前一種技術的差别所在。

這樣,前面所述的這些基于虛拟技術的防禦手段的處理對象已經不再是檔案,而是程式的行為——但還不是系統。

反病毒軟體不會主動使用“沙箱”以及虛拟機這類的方法,主要是因為這些實作方法的程式需要占用大量的資源。帶有沙箱的反病毒程式在程式啟動和開始執行之間會有一個延時(成功識别出惡意程式的情況——即在惡意程式啟動和反病毒軟體檢測到惡意程式并給出資訊之間的延時),是以可以通過這一點判斷反病毒程式是否有沙箱。目前硬體虛拟化方面的研究正在積極進行之中,這種情形不久就會改善。

目前隻有幾個防病毒軟體使用了“沙箱”引擎。

4. 系統事件監控

系統事件監控是一種更為抽象的為暴露惡意程式而搜集資訊的方法。如果說虛拟機或沙箱是觀察每一個獨立的程式的話,監控器則是通過監視作業系統和運作的程式中産生的所有事件來觀察所有程式。

從技術上說,這種資訊搜集的方法是通過挂鈎作業系統函數來實作的。挂鈎了某些系統函數調用後,挂鈎函數就得到了某個确定程式在系統中進行某個确定行為的資訊。作為功能的延伸,監控器會收集這些行為的統計資訊并将它傳給分析元件處理。

這種技術目前發展最為迅速。在某些較好的反病毒軟體中,它已經成為了一種元件,占據了基礎性低位,成為了一個獨立的工具,專門用來監控系統(成為“HIPS工具”,“HIPS”就是像Prevx、CyberHawk這類的程式)。由于任何防禦都可以被繞過,是以這種搜尋惡意程式的方法并非是最有前途的。在真實環境中運作程式所帶來的威脅會大大降低防禦的效果。

5. 搜尋系統異常

這是搜集可能被感染的系統中資訊的最為抽象的方法。我這裡首先是把它作為前面技術的一種自然延伸和抽象的極限而提出來的。

這種方法建立在以下前提之上:

作業系統和運作于其上的程式是一個完整的系統;

作業系統有内在的“系統狀态”;

如果在作業系統中執行了惡意代碼,則系統的狀态就是“非健康的”,這種狀态和系統中沒有惡意代碼時的“健康狀态”是不同的。

從這些狀态入手,将系統狀态與标準狀态(用作“系統健康”狀态的标準狀态)做對比或單獨分析狀态參數,我們就能評價系統的狀況(進而能夠判斷系統中是否可能有惡意程式)。

為了有效地用分析異常的方法來檢測惡意代碼,分析系統必須足夠強大——比如用專家系統或神經網絡。這就引出了許多問題:如何定義“健康狀态”,它和“非健康狀态”的差別在哪裡,有哪些離散的參數可供跟蹤以及如何進行分析。由于這種複雜性,目前這種方法用得還很少。它的源頭可以從某些anti-rootkit工具中找到。這些工具要麼将系統狀态和标準系統狀态做對比(已過時的PatchFinder、Kaspersky Inspector),要麼比較單獨的參數(GMER, Rootkit Unhooker)。

有趣的比喻

前面“沙箱”部分做的孩子的比喻,還可以這樣延伸:虛拟機就像個保姆,時刻照看着孩子,不讓他有不良的行為;系統事件監控則像個私塾老師,監督着一群孩子;而搜尋系統異常技術則給予了孩子們充分的自由,隻是會在操行日志裡給它們打分。這樣打比方的話,那檔案的位元組分析就隻是對孩子的設計,更确切的說就是在準父母的性格裡尋找不安分的成分。

而且,就像孩子一樣,技術也是在成長和發展的。

分析元件

病毒判定算法的複雜度可以是完全任意的。反病毒軟體的分析系統大緻可以分成三種,而在這三者中間可能還有許多中間變體。

簡單比較

通過将單一對象與已有樣本做比較而得出結論。比較的結果是排中的(即隻有“是”或着“不是”)。一個例子就是用嚴格确定的字元序列去識别惡意程式。更高層次點的例子就是通過行為比較而發現可疑程式行為(比如向系統資料庫關鍵部位或自啟動檔案夾中寫入)。

2. 複合比較

将一個或幾個對象與相應樣本做比較而得出結果。比較的模式可以是可伸縮的,而比較的結果是一個機率。例如,使用幾條位元組特征中的一條來識别惡意代碼,而這幾條位元組特征都是非嚴格的(每一個單獨位元組序列都是不确定的)。另一個更高層次點的例子就是通過幾個惡意程式用到的并且用一定的參數非順序調用的API函數來識别惡意代碼。

3. 專家系統

通過對資料進行複雜的分析而得出結果。這可能會是個自身帶有人工智能成分的系統。比如說:不使用嚴格給定的一組參數,而是從整體上多方面評估所有參數,考慮它們的潛在惡意性的權重并計算出總體結果。

技術的本質 — 什麼是什麼

我們現在來看這些惡意程式搜尋具體技術的基礎是些什麼樣的算法。

一般開發新技術的廠商都會給他們的新技術起一個全新的、獨特的名字(例如Kaspersky Antivirus的“主動防禦”,Panda的TruPrevent,F-Secure的DeepGuard)。這種做法是很正确的,因為這樣可以避免使用者受狹義術語的影響而對新技術有先入為主的錯覺。然而,在用通俗的、技術味不濃的語言描述新技術時,使用像“啟發式”、“虛拟機”、“沙箱”、“行為阻斷”這樣含義廣泛的術語就不可避免了。

到這裡,術語意義上的分歧開始出現了。這些術語都是沒有嚴格定義的(理想狀況下,一條術語的意義應該是單一的)。對于一條術語,這個人的了解可能是這樣的,而那個人可能又有另外的了解。而且,術語作者為它賦予的清晰易懂的意義經常和專家們所了解的含義不同。這就解釋了一個現象,即在反病毒軟體廠商的網站上充斥着大量技術術語,但卻找不到有關這種技術本質的資訊。

例如,某些反病毒廠商稱自己的産品裝備了HIPS、“主動技術”或“非特征碼技術”。如果使用者将HIPS了解為有一個程式監控系統事件并分析是否存在惡意代碼,那他就有可能被騙。實際上,靠這些術語,反病毒廠商可以掩蓋所有他們想掩蓋的資訊——比如,裝備有“啟發式”系統的“虛拟機”引擎。還有一種情形經常會遇到,就是将某種技術描述為“啟發式”的,但卻沒有任何更為詳盡的資訊。

需要強調的是,我們不是說反病毒廠商有意要欺騙使用者——很有可能寫那些描述的人自己都不明白那些術語的意思。我們隻是說,那些對技術的描述都是給使用者看的,而使用者可能并不了解這些技術到底是什麼東西,再有就是提醒使用者在靠這些描述選購反病毒軟體的時候應謹慎。

我們來詳細看一下這些反病毒領域中的流行名詞。

“特征碼檢測”的歧義最小:無論怎麼說,從技術角度講它都是和檔案位元組代碼打交道的,而從分析角度講它用的就是最初級的資料處理方法,一般就是簡單比較。這種技術最為古老,但卻最為可靠,是以盡管它有個最大的缺點,需要更新病毒庫,但是直到今天各個反病毒軟體仍都在使用。

前面清單中的“虛拟機”、“沙箱”也沒什麼其它的解釋方法。用于它們的分析元件的算法複雜度也可以是任意的,從簡單比較到專家系統。

而“啟發式”這個詞就有點朦胧了。奧日科夫俄語詞典上的定義是:“啟發——檢測未知病毒的所有研究方法”。啟發式首先是一種分析元件,而不是一種有着嚴格定義的技術。

離開了具體的上下文的話,那就會很像是用一種不确定的技術去解決一個不明了的問題。

在反病毒技術發展的初期,“啟發式”剛開始使用的時候,它還是一種完全确定的技術——通過某種可變位元組模式來識别病毒的技術,也就是說它是檔案處理型技術元件和複雜比較型分析元件構成的一種系統。而現在“啟發式”的含義已經變得更為廣泛,成了“搜尋未知惡意程式”的技術。換句話說,說到“啟發式檢測”,廠商就會暗示它是一種防禦系統,這種系統的分析元件會進行模糊搜尋來尋找解決辦法(可能是用“複雜分析”或“專家系統”的分析元件)。用啟發式的話,反病毒技術的基礎——即為後續分析搜集資訊的方法——可以任意,從檔案處理到事件或作業系統狀态的處理都可以使用。

“行為檢測”、“主動檢測”這類的名稱也沒什麼确定的定義。他們包含的技術很廣泛——從啟發式到系統事件監控。

反病毒技術描述中經常會用到HIPS這個詞,但不總是能用得恰當。盡管這個縮寫詞(Host Intrusion Prevention System)并沒有反映出技術的本質,但在反病毒方面它的含義是明确的:HIPS是一種基于系統事件監控的防禦技術。它可以搭配任意的分析元件——從對單一的可疑事件的處理到對一系列的程式行為的複雜分析。這樣,在反病毒軟體的描述中,用HIPS就可以掩蓋一些事實。比如它隻保護了幾個關鍵的系統資料庫項,還是在通路某個目錄時會進行提示,還是會對程式行為進行更複雜的分析,還是使用了基于系統事件監控的其它技術。

惡意代碼檢測技術的優缺點

如果我們不是單一的看某一種惡意程式防禦技術,而是從整體上來進行研究的話,從本文模型的觀點看,有以下方面。

技術元件有以下屬性:對系統資源的利用(其結果就是程式運作的快慢)、安全和防護。

“系統資源”就是在為系統提供連續或周期性保護并保證系統快速運作的同時所使用的處理器時間片和記憶體。模拟技術運作起來很慢,無論它是如何實作的:每一條被模拟的指令都會在人工環境中被分成幾條指令。虛拟化技術也是一樣。系統事件監控也一樣會拖慢系統,但其程度則依賴于實作。檔案檢測和系統異常搜尋就完全依賴于實作了。

“安全”反映了惡意程式識别過程中作業系統和使用者資料的危險程度。惡意代碼在作業系統中執行後,這種危險總是存在的。系統事件監控技術要等惡意程式運作起來後才能檢測得到,而模拟技術和檔案掃描技術在惡意代碼執行前就可以檢測到。

“防護”這一項反映了技術的脆弱性,即惡意代碼能在多大程度上幹擾識别過程。要對抗檔案檢測是很簡單的:檔案加殼就不錯,或者使用多态,或者用rootkit技術隐藏檔案。對抗模拟技術就要困難一些了,但也是可以的——可以在惡意程式的代碼中嵌入虛拟機檢測處理的代碼。但要在系統監控下隐藏就很困難了——因為要隐藏行為是不太可能的。

結論:一般說來,防禦技術的抽象層次越低,它的安全性就越好,但越容易被繞過。

分析元件有以下屬性:主動性(是否依賴于反病毒軟體的更新頻率)、誤報率和使用者參與程度。

主動性反映的是對專家們尚未拿到的新未知惡意程式的檢測能力。舉個例子,像特征碼檢測這類最簡單的分析類型技術(“簡單比較”)的主動性就最差:用這種技術隻能檢測到已知的惡意程式。随着分析系統複雜度的提高,它的主動性也随之增強。和主動性直接相關的還有一個屬性,那就是更新的頻率。例如,病毒庫就需要頻繁地更新,更複雜的啟發式系統保持有效狀态的時限就要長一些,而專家分析系統則可以做到數月不更新都能很好地工作。

誤報率和分析技術的複雜度也是有着直接的關系的。用定死的特征碼或行為序列來識别惡意代碼,如果特征(位元組碼、行為特征或其它)能足夠長,那麼就能唯一地确定惡意程式。特征碼可以識别某一種确定的惡意程式,而不能識别出其它的。若識别算法試圖識别出更多的惡意程式的話,那麼它也會變得更不确定,結果會誤報更多的非惡意程式。

使用者參與度反映了需要使用者參與制定防禦政策和協助做出判定的程度。防禦政策就是例外、白名單的規則,而協助判定就是對分析系統給出的可疑行為進行确認或否定。使用者參與度依賴于實作,而且一般來說,離原始的位元組比較技術越遠的分析技術,其誤報的可能性就越大。當然,誤報可以修正,而這就需要使用者參與了。

結論:分析系統越複雜,功能就越強大,誤報的可能性也越高。誤報需要與使用者互動進行解決。

如果用這種模型來研究某種技術的話,就很容易從理論上評價它的優缺點。例如,帶有複雜分析系統的虛拟機。這種系統非常安全(因為不會啟動被檢查的程式),但是會因為惡意程式使用了反虛拟機技術或是虛拟機本身實作上的缺陷而漏掉某些惡意程式。這種技術有着巨大的潛力,精心實作後會識别出大多數的惡意程式,但速度慢是一個不可避免的問題。

如何選擇非特征碼防禦系統?

目前,在計算機安全領域裡的解決方案大多都是以上某些技術的複合體。在經典的反病毒軟體中,特征碼檢測通常都會和各式各樣的系統事件監控、虛拟機、沙箱一同使用。如何面對自身實際情況選擇惡意代碼防禦系統,最大程度地滿足具體使用者的需求呢?

首先要明白,萬能的、“最好的”解決方案是不存在的。每一種技術都有自己的優缺點。例如,系統事件監控會長期占用處理器時間,但不易被繞過;用某些特殊指令就可以混過虛拟機的檢查,但在用虛拟機檢測惡意代碼時,可以先發制人,使系統不受影響。另一個例子:行為規則越簡單,使用者參與度就越高,這樣就會給使用者提出一大堆問題,而複雜且“安靜”的規則又會有很多誤報。

對技術的選擇就是對具體需求和環境的權衡。比如,在脆弱條件下(沒打更新檔的系統,允許使用浏覽器插件和執行腳本等等)的人,很為自己系統的安全擔心,同時他又有足夠的資源,那他就适合用帶有強大分析元件的“沙箱”類的系統。這種系統能提供最大的安全性,但目前實作這種系統的程式需要占用大量的記憶體和處理器時間,這就會拖慢作業系統。對于既希望能控制關鍵系統事件同時又想免受惡意代碼困擾的專家來說,就可以選用實時監控系統。這種系統運作穩定,又不會拖慢系統,而且要求使用者參與制定規則和例外情況。而系統資源有限,不想自己的機器因總處在監視下而被拖慢,而且想設定簡單規則的使用者可以選擇更簡單的啟發式技術。總之,對于未知惡意程式檢測來說,靠單一的一種技術是不夠的,需要從整體入手。複雜的技術可以為簡單的技術提供補充。

檢測未知代碼的非特征碼系統可以分為兩類。第一類就是獨立的HIPS系統,如Prevx或Cyberhawk。第二類就是反病毒軟體,它們在提高檢測技術有效性的演化中發展到了非特征碼技術階段。兩者的優勢都很明顯:前者的優勢就是專注,進而有無限潛力去完善,而後者在對抗惡意程式的各個方面都有着豐富的經驗。

在選擇反病毒産品的時候建議參考獨立評測的結果和可信使用者的推薦。

繼續閱讀