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





























