惡意軟件是一種招人恨的代碼,因為它們專干壞事,如泄漏個人隱私、造成數據丟失,等等。而殺毒軟件公司則不斷想辦法檢測并阻止惡意軟件。如此一來,貓和老鼠的大戲從此開演了。一般來說,殺毒軟件要想防御某種惡意軟件需要經過以下過程:收集到樣本,分析樣本,升級病毒庫,之后殺毒軟件才能夠識別該惡意軟件。而反檢測技術,就是在惡意軟件的分析階段設置障礙,讓分析人員無法或難以對惡意代碼進行分析,這主要包括兩類技術,一種是反調試技術,一種是反仿真技術,或叫做反虛擬執行技術。
無論是處于分析惡意軟件的目的,還是防止軟件被分析的目的,了解惡意軟件常用的反檢測手段都是很有必要的,而本文的目的就是在于,向讀者們介紹目前的反調試和反仿真技術,并提供代碼樣本,以供讀者在識別惡意代碼時作為練手之用。
一、引言
病毒作者使用反調試與反仿真技術的目的在于為逆向分析惡意軟件制造障礙,理想的情況下是使得逆向工程師無法分析惡意軟件,退一步講即使可以分析也會讓分析過程更為緩慢。當病毒在一個仿真器或調試器中運行時,這些技術會使逆向工程過程變得舉步維艱,他們企圖以此逃避檢查。惡意代碼可以利用多種不同的方法來“忽悠”動態檢測和其他如仿真器和調試器之類的分析機制,通常情況下每種病毒都會采用其中的一種甚至多種。
對于這些病毒作者用于使對病毒的逆向過程變緩的方法,本文將分別進行講解,并為它們提供了示例。本文會概述各種反調試與反仿真技術,以使得讀者對它們有所了解。下面我們開始介紹反仿真技術。
二、反仿真技術
仿真器為人們提供了一個受限制的環境(即安裝在主機操作系統之上的操作系統的映像),我們可以在這個環境中動態地分析程序。例如,一臺運行Linux操作系統的機器可以在其虛擬機上安裝并運行Windows XP系統。一個仿真器也將包括對CPU和內存的仿真,以及其它硬件的仿真,還有控制器的仿真。這為我們提供了一種安全的方式來動態地分析程序,因為這種環境下,無論做什么都不會對底層的操作系統造成損害。
然而,這一系統也有其缺點。首先,花在仿真上的時間越多,在對目標程序進行實際分析之前所必須等待的時間也就相應越長。其次,仿真過程是緩慢的,因為不僅對目標程序實施監控需要開銷,而且對操作系統和硬件進行仿真同樣也需要開銷。QEMU,一種硬件和操作系統仿真器,其仿真出來的硬件比物理硬件的速度有四分之一到十分之一之間的下降,軟件在其上運行的速度只是在內存管理單元上運行時的二分之一。同時,因為QEMU不具備任何動態監控功能,這會進一步降低速度。最后一個缺點是,惡意軟件可以利用各種反仿真技術來“忽悠”模擬器,這些技術分為三類:比耐力型、比智力型以及過度擴展模擬器。
三、跟模擬器比耐力
因為仿真的代價較高,所以模擬器通常只運行代碼的前幾百條指令來檢測惡意軟件,后面的指令通常不予理會。在英特爾的X86系統上,人們普遍相信,只要運行1000條指令便足以檢測出惡意代碼,同時還能保持較短的運行時間。如果在這段時間內沒有運行被視為惡意的指令,那么模擬器就不會再將該代碼作為惡意軟件而繼續檢查。跟模擬器比耐力的方法有很多,如基于特定概率的感染技術,在運行惡意代碼之前先將良性代碼運行特定的時間,或通過入口點迷惑技術來達到目的。
1.概率式感染
一些惡意軟件的惡意代碼并不是每次都會執行,而是按照一定的概率發作。例如,某病毒在運行時執行惡意代碼的概率是10%,這就意味著,模擬器將其運行若干次,才有可能檢測到惡意代碼。
2.運行良性代碼
有的惡意軟件會在每次啟動時先運行良性代碼,并且良性代碼運行一段時間后,才開始運行惡意代碼。這樣做的目的是讓模擬器運行指定數量的指令,讓它覺得該代碼在這段時間內沒有做惡意的事情。等危險期過后,它就會露出本來面目:感染并危害系統。
3.入口點迷惑技術
入口點迷惑技術(EPO)是一種將附帶的惡意代碼放到一個文件的特定的部分的方法。惡意軟件不會一上來就執行惡意代碼,相反,它能查找對ExitProcess()API函數的調用,然后用一個跳至惡意代碼的轉移指令來覆蓋這些調用。用這種方法,代碼將在可執行文件的出口處,而非入口處運行。它還可以尋找一個特定的代碼序列,然后用惡意代碼本身或跳至惡意代碼的轉移指令來覆蓋之。所以,入口點迷惑技術后,能夠使病毒在將代碼拷貝至新的位置之后、實際覆蓋它之前運行惡意代碼。
| 共3頁: 1 [2] [3] 下一頁 | |||||
|


