深入解說回避檢測(cè)的惡意軟件的機(jī)制
譯文【51CTO.com快譯】多數(shù)惡意軟件的開發(fā)者,為編寫復(fù)雜的代碼花費(fèi)了很多的時(shí)間與精力。他們的成功,作為威脅長期未被檢測(cè)出,能夠規(guī)避于沙盒的解析、反病毒對(duì)策、以及惡意軟件的解析人員。該文章主要介紹了回避檢測(cè)的惡意軟件的機(jī)制。
惡意軟件若容易被檢測(cè)到的話,便沒有了使數(shù)據(jù)盜取影響最大化的時(shí)間。IT安全市場(chǎng)逐漸成熟,現(xiàn)在的安全對(duì)策工具和應(yīng)用程序的性能都非常高。但是,攻擊者了解安全工具的運(yùn)作并持續(xù)監(jiān)視。另外,企業(yè)和組織也不一定做到最佳的安全級(jí)別。惡意軟件對(duì)策工具沒有及時(shí)更新的情況有很多,也存在因沙盒設(shè)置錯(cuò)誤造成易被檢測(cè)的情況。
惡意軟件自身的防御功能
惡意軟件為了回避檢測(cè)和解析利用了多種機(jī)制。機(jī)制的技術(shù)大致分為以下三大類別。
- 防病毒工具:為了回避病毒對(duì)策、防火墻、保護(hù)環(huán)境的其他工具的檢測(cè)而被使用。
- 防病毒沙盒:進(jìn)行自動(dòng)解析功能的檢測(cè),為回避惡意軟件的動(dòng)向報(bào)告引擎而被使用。
- 反病毒分析:檢測(cè)惡意軟件的解析者,為詐騙而被使用。例如,為了回避反向工程,在檢測(cè)Process Explore、Wireshark等監(jiān)視工具的同時(shí),利用一些過程監(jiān)視的手法、Packer等。
這三類都共同的惡意軟件技術(shù)也有幾個(gè)。使用RunPE等的技術(shù)的話,惡意軟件可以回避病毒對(duì)策軟件、沙盒、以及解析者。
沙盒的回避
沙盒是迅速檢測(cè)惡意軟件的有效工具,但是不適當(dāng)?shù)貥?gòu)成的話,反而會(huì)被惡意軟件簡單地檢測(cè)出來。惡意軟件通常需要實(shí)施以下幾點(diǎn)基本的檢查。
MAC地址的檢測(cè):VMware、VirtualBox等虛擬環(huán)境中已知的MAC地址被使用。該地址是經(jīng)常保存至注冊(cè)表的以下地方
(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0000\NetworkAddress)。惡意軟件可要求registry key 或使用GetAdapterInfo API兩者任選其一的方法檢測(cè)MAC地址。
過程檢測(cè):惡意軟件可檢測(cè)與沙盒相關(guān)聯(lián)的動(dòng)作過程的存在。例如,VmwareService.exe等過程的情況下,使用Create ToolHelp32Snapshot API 抓拍動(dòng)作過程,使API函數(shù)的Process32 First和Process32 Net抓拍的各過程做成一覽表,便于檢測(cè)。
注冊(cè)表的檢測(cè):惡意軟件可檢測(cè)的系統(tǒng)注冊(cè)表項(xiàng)是在虛擬環(huán)境下制作的。以下的注冊(cè)表雖然內(nèi)容并不完整,但是是惡意軟件可能檢測(cè)的注冊(cè)表項(xiàng)一覽。
另外,惡意軟件存在使用以下幾個(gè)高技術(shù)檢測(cè)沙盒的情況。
鉤子(Hook)函數(shù)的檢測(cè):鉤子函數(shù)是改變OS和應(yīng)用程序內(nèi)部函數(shù)行為的基本技術(shù)。沙盒是使用鉤子技術(shù)進(jìn)行樣品舉動(dòng)的變更。例如、在DeleteFile函數(shù)中設(shè)置鉤子,惡意軟件會(huì)試圖刪除被沙盒捕捉的文件。這類函數(shù)被放置于內(nèi)存上(內(nèi)核空間)的特定地方。
惡意軟件也存在通過檢查調(diào)用函數(shù)的地址來檢測(cè)鉤子的情況。例如,被返還的地址不存在內(nèi)核中,表明現(xiàn)在該函數(shù)被掛鉤。
惡意軟件使用硬件的尺寸檢查和特殊命令等其他手法,可檢測(cè)特定的登記。事實(shí)上,這些技巧在機(jī)器上的注冊(cè)是一致化的,在虛擬環(huán)境中需要重新配置。
病毒對(duì)策的回避
病毒對(duì)策工具的基本功能是署名、掃描、探索。
·署名可回避樣品哈希值的變更。這是非常簡單的,只需要變更執(zhí)行文件的1個(gè)字節(jié)便可實(shí)現(xiàn)。
·掃描是制作一個(gè)大的文件,通過仿真器造成混亂來回避。
·探索分析是較復(fù)雜的,但可通過使背后的函數(shù)掛鉤來回避。
惡意軟件為了回避病毒對(duì)策工具的其他方法是工具的無效化或者追加例外情況。多態(tài)病毒代碼的檢測(cè)是特別困難的。
Anti-debug
解析代碼時(shí),惡意軟件解析人員往往需要深入調(diào)查。Anti-debug是回避調(diào)試程序逆向工程的其他技法。使用Windows API的話,比較容易檢測(cè)調(diào)試程序的存在。
IsDebuggerPresent函數(shù):這個(gè)函數(shù)是檢測(cè)PEG(Process Environment Block)結(jié)構(gòu)中的特定狀態(tài)IsDebugged,調(diào)試過程沒有被執(zhí)行的情況下,回復(fù)0;調(diào)試程序未被連接時(shí),回復(fù)0之外的。
FindWindow函數(shù):該函數(shù)能夠從名字和Class來檢索窗口(例如:OllyDbg),也能夠檢測(cè)Wireshark和Process Explorer等工具。
CsrGetProcessId函數(shù):這個(gè)函數(shù)能夠檢索系統(tǒng)進(jìn)程中csrss.exe過程的ID。默認(rèn)過程的訪問令牌SeDebugPrivilege權(quán)限是無效的。但是,OllyDbg和WinDbg等調(diào)式程序被加載的話,SeDebugPrivilege權(quán)限會(huì)被有效化。csrss.exe被打開即意味著過程的訪問令牌權(quán)限為SeDebugPrivilege,對(duì)象過程被推測(cè)為調(diào)試程序。
Anti-disassembly
Anti-disassembly是回避逆向工程解析的不同手法。有多種Anti-disassembly的妨礙方法,具體如下:
- API難讀化時(shí),能隱藏特定函數(shù)的調(diào)用。例如,不使用API函數(shù)名稱調(diào)用函數(shù),解析人員為了把握被利用的函數(shù)有必要進(jìn)行逆向工程。這個(gè)操作很費(fèi)時(shí)間。
- 插入JAN代碼:惡意軟件中插入JAN代碼來欺騙解析人員,不使用的代碼可以使逆向工程更加耗時(shí)。由于JAN代碼完全不會(huì)被執(zhí)行,Sample完全不會(huì)有變化。
關(guān)于Unprotect Project
回避惡意軟件解析的方法有很多,這些技巧中被公開的有幾項(xiàng)。Unprotect project是結(jié)合惡意軟件的保護(hù)與自己防御一覽化公開的Wiki。這個(gè)項(xiàng)目為促進(jìn)對(duì)惡意軟件保護(hù)功能的理解,在技術(shù)一覽表中加載了思維導(dǎo)航。
這個(gè)項(xiàng)目的目標(biāo)是為了在社區(qū)中使病毒檢測(cè)功能停滯、迂回安全保護(hù)政策,回避解析的惡意軟件所使用的技術(shù)被深入理解,這個(gè)網(wǎng)站有如下的內(nèi)容。
- 沙盒的回避技巧:回避沙盒解析
- 病毒對(duì)策的回避技巧:回避病毒對(duì)策的檢測(cè)
- 反調(diào)試的技巧:欺詐調(diào)試程序、回避解析
- 反反匯編:回避使用反匯編工具的逆向工程,以及理解惡意軟件的舉動(dòng)
- 過程的圈套:系統(tǒng)上隱藏惡意軟件,回避檢測(cè)。難讀化與數(shù)據(jù)編碼:隱藏一部分惡意軟件中的數(shù)據(jù)或代碼。
·壓縮軟件:保護(hù)惡意軟件的代碼以及追加其他回避功能。
Wiki將持續(xù)更新。
總結(jié)
惡意軟件的回避檢測(cè)技術(shù)持續(xù)進(jìn)化著,理解這些技術(shù),并在信息安全社區(qū)共享經(jīng)驗(yàn)是戰(zhàn)勝惡意軟件最有效的方法。
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】