反虛擬機技術
發表于:2008-07-29來源:作者:點擊數:
標簽:虛擬機技術
任何一個事物都不是盡善盡美,無懈可擊的,虛擬機也不例外。由于反虛擬執行技術的出現,使得虛擬機查毒受到了一定的挑戰。這里介紹幾個比較典型的反虛擬執行技術: 首先是插入特殊指令技術,即在病毒的解密代碼部分人為插入諸如浮點,3DNOW,MMX等特殊指令以
任何一個事物都不是盡善盡美,無懈可擊的,虛擬機也不例外。由于反虛擬執行技術的出現,使得虛擬機查毒受到了一定的挑戰。這里介紹幾個比較典型的反虛擬執行技術:
首先是插入特殊指令技術,即在病毒的解密代碼部分人為插入諸如浮點,3DNOW,MMX等特殊指令以達到反虛擬執行的目的。盡管虛擬機使用軟件技術模擬真正CPU的工作過程,它畢竟不是真正的CPU,由于精力有限,虛擬機的編碼者可能實現對整個Intel指令集的支持,因而當虛擬機遇到其不認識的指令時將會立刻停止工作。但通過對這類病毒代碼的分析和統計,我們發現通常這些特殊指令對于病毒的解密本身沒有發生任何影響,它們的插入僅僅是為了干擾虛擬機的工作,換句話說就是病毒根本不會利用這條隨機的垃圾指令的運算結果。這樣一來,我們可以僅構造一張所有特殊指令對應于不同尋址方式的指令長度表,而不必為每個特殊指令編寫一個專用的模擬函數。有了這張表后,當虛擬機遇到不認識的指令時可以用指令的操作碼索引表格以求得指令的長度,然后將當前模擬的指令指針(EIP)加上指令長度來跳過這條垃圾指令。當然,還有一個更為保險的辦法那就是:得到指令長度后,可以將這條我們不認識的指令放到一個充滿空操作指令(NOP)的緩沖區中,接著我們將跳到緩沖區中去執行,這等于讓真正的CPU幫我們來執行這條指令,最后一步當然是將執行后真實寄存器中的結果放回我們的模擬寄存器中。這虛擬執行和真實執行參半方法的好處在于:即便在特殊指令對于病毒是有意義的,即病毒依賴其返回結果的情況下,虛擬機仍可保證虛擬執行結果的正確。
其次是結構化異常處理技術,即病毒的解密代碼首先設置自己的異常處理函數,然后故意引發一個異常而使程序流程轉向預先設立的異常處理函數。這種流程轉移是 CPU和操作系統相互配合的結果,并且在很大程度上,操作系統在其中起了很大的作用。由于目前的虛擬機僅僅模擬了沒有保護檢查的CPU的工作過程,而對于系統機制沒有進行處理。所以面對引發異常的指令會有兩種結果:其一是某些設計有缺陷的虛擬機無法判斷被模擬指令的合法性,所以模擬這樣的指令將使虛擬機自身執行非法操作而退出;其二虛擬機判斷出被模擬指令屬于非法指令,如試圖向只讀頁面寫入的指令,則立刻停止虛擬執行。通常病毒使用該技術的目的在于將真正循環解密代碼放到異常處理函數后,如此虛擬機將在進入異常處理函數前就停止了工作,從而使解密子有機會逃避虛擬執行。因而一個好的虛擬機應該具備發現和記錄病毒安裝異常過濾函數的操作并在其引發異常時自動將控制轉向異常處理函數的能力。
再次是入口點模糊(EPO)技術,即病毒在不修改宿主原入口點的前提下,通過在宿主代碼體內某處插入跳轉指令來使病毒獲得控制權。通過前面的分析,我們知道虛擬機掃描病毒時出于效率考慮不可能虛擬執行待查文件的所有代碼,通常的做法是:掃描待查文件代碼入口,假如在規定步數中沒有發現解密循環,則由此判定該文件沒有攜帶加密變形病毒。這種技術之所以能起到反虛擬執行的作用在于它正好利用了虛擬機的這個假設:由于病毒是從宿主執行到一半時獲得控制權的,所以虛擬機首先解釋執行的是宿主入口的正常程序,當然在規定步數中不可能發現解密循環,因而產生了漏報。如果虛擬機能增加規定步數的大小,則很有可能隨著病毒插入的跳轉指令跟蹤進入病毒的解密子,但確定規定步數大小實在是件難事:太大則將無謂增加正常程序的檢測時間;太小則容易產生漏報。但我們對此也不必過于擔心,這類病毒由于其編寫技術難度較大所以為數不多。在沒有反匯編和虛擬執行引擎的幫助下,病毒很難在宿主體內定位一條完整指令的開始處來插入跳轉,同時很難保證插入的跳轉指令的深度大于虛擬機的規定步數,并且沒有把握插入的跳轉指令一定會被執行到。
另外還有多線程技術,即病毒在解密部分入口主線程中又啟動了額外的工作線程,并且將真正的循環解密代碼放置于工作線程中運行。由于多線程間切換調度由操作系統負責管理,所以我們的虛擬機只能在假定被執行線程獨占處理器時間,即保證永遠不被搶先,的前提下進行。如此一來,虛擬機對于模擬啟用多線程工作的代碼將很難做到與真實效果一致。多線程和結構化異常處理兩種技術都利用了特定的操作系統機制來達到反虛擬執行的目的,所以在虛擬CPU中加入對特定操作系統機制的支持將是我們今后改進的目標。
最后是元多形技術(MetaPolymorphy),即病毒中并非是多形的解密子加加密的病毒體結構,而整體均采用變形技術。這種病毒整體都在變,沒有所謂“病毒體明文”。當然,其編寫難度是很大的。如果說前幾種反虛擬機技術是利用了虛擬機設計上的缺陷,可以通過代碼改進來彌補的話,那么這種元多形技術卻使虛擬機配合的動態特征碼掃描法徹底失效了,我們必須尋求如行為分析等更先進的方法來解決。
原文轉自:http://www.kjueaiud.com