病毒與引擎的變遷
簡單特征碼
80年代末期,基于個人電腦病毒的誕生,隨即就有了清除病毒的工具──反病毒軟件。這一時期,病毒所使用的技術還比較簡單,從而檢測相對容易,最廣泛使用的就是特征碼匹配的方法。
特征碼是什么呢?比如說,“如果在第1034字節處是下面的內容:0xec , 0x99, 0x80,0x99,就表示是大麻病毒?!边@就是特征碼,一串表明病毒自身特征的十六進制的字串。特征碼一般都選得很長,有時可達數十字節,一般也會選取多個,以保證正確判斷。殺毒軟件通過利用特征串,可以非常容易的查出病毒。
廣譜特征
為了躲避殺毒軟件的查殺,電腦病毒開始進化。病毒為了躲避殺毒軟件的查殺,逐漸演變為變形的形式,每感染一次,就對自身變一次形,通過對自身的變形來躲避查殺。這樣一來,同一種病毒的變種病毒大量增加,甚至可以到達天文數字的量級。大量的變形病毒不同形態之間甚至可以做到沒有超過三個連續字節是相同的。
為了對付這種情況,首先特征碼的獲取不可能再是簡單的取出一段代碼來,而是分段的,中間可以包含任意的內容(也就是增加了一些不參加比較的“掩碼字節”,在出現“掩碼字節”的地方,出現什么內容都不參加比較)。這就是曾經提出的廣譜特征碼的概念。這個技術在一段時間內,對于處理某些變形的病毒提供了一種方法,但是也使誤報率大大增加,所以采用廣譜特征碼的技術目前已不能有效的對新病毒進行查殺,并且還可能把正規程序當作病毒誤報給用戶。
啟發式掃描
為了對付病毒的不斷變化和對未知病毒的研究,啟發式掃描方式出現了。啟發式掃描是通過分析指令出現的順序,或特定組合情況等常見病毒的標準特征來決定文件是否感染未知病毒。因為病毒要達到感染和破壞的目的,通常的行為都會有一定的特征,例如非常規讀寫文件,終結自身,非常規切入零環等等。所以可以根據掃描特定的行為或多種行為的組合來判斷一個程序是否是病毒。
這種啟發式掃描比起靜態的特征碼掃描要先進的多,可以達到一定的未知病毒處理能力,但還是會有不準確的時候。特別是因為無法確定一定是病毒,而不可能做未知病毒殺毒。
行為判定
針對變形病毒、未知病毒等復雜的病毒情況,極少數殺毒軟件采用了虛擬機技術,達到了對未知病毒良好的查殺效果。它實際上是一種可控的,由軟件模擬出來的程序虛擬運行環境,就像我們看的電影《黑客帝國》一樣。在這一環境中虛擬執行的程序,就像生活在母體(Matrix)中的人,不論好壞,其一切行為都是受到建筑師(architect)控制的。雖然病毒通過各種方式來躲避殺毒軟件,但是當它運行在虛擬機中時,它并不知道自己的一切行為都在被虛擬機所監控,所以當它在虛擬機中脫去偽裝進行傳染時,就會被虛擬機所發現,如此一來,利用虛擬機技術就可以發現大部分的變形病毒和大量的未知病毒。
引擎技術對比
各種引擎技術相比,虛擬機就像是一個偵探,可以根據對人的行為識別犯罪活動;啟發式掃描就像是警察,看你身上攜帶了槍支而懷疑你;廣譜特征是拿著照片追查已知的罪犯,但是會注意是否帶了假發或者墨鏡來逃避檢查;而特征碼識別就只是通過對人的外貌來判斷。
簡單總結一下各種引擎技術的優缺點:
特征碼技術 | 靜態廣譜特征掃描技術 | 啟發式掃描技術(靜態掃描+未知特征) | 行為判定技術 |
速度快,準確率高 | 可以檢測部分變形病毒 | 誤報率低,能檢測變形病毒和病毒變種 | 基于強大而完整的虛擬機技術能夠對未知病毒進行判別,對標準病毒準確率高 |
不能對付變形病毒或加密病毒 | 誤報率高 | 對未知病毒的檢測能力較低 | 實現難度大,速度慢 |
解壓縮與去殼
病毒隱藏自身的方法還有加殼和壓縮兩種方法。加殼是通過一系列的數學運算,將可執行程序或動態鏈接文件的編碼進行改變,以達到縮小程序體積或加密程序編碼的目的。通常常見的加殼工具有UPX、ASPack等。病毒通過使用不同種類或者版本的加殼軟件,對自身進行加殼,使得殺毒軟件無法發現真正的病毒體,以逃避查殺。并且由于加殼的工具種類很多,同一個工具也存在不同的版本。為了檢測已加殼的病毒,就必須要針對不同種類不同版本的殼編寫脫殼程序才可以發現殼內隱藏的真正病毒體。所以,殺毒軟件對病毒的查殺能力也在一定程度上取決于他自身的脫殼能力。
壓縮是普通用戶日常經常使用的減小文件體積的方法,常見的工具軟件有WinZip、WinRAR等。病毒有時候會隱藏在壓縮包內部,如果一個殺毒軟件沒有解壓縮的能力就不可能查殺壓縮包內的病毒。同時,如果殺毒軟件不具備相應格式的壓縮能力,在查殺病毒后就不能復原壓縮包,導致壓縮包破壞??梢?,殺毒軟件要想做到對病毒的全面捕獲與查殺,脫殼解壓能力也是至關重要的。
[1]