1. 反-反匯編和調試器(保護器)
惡意軟件作者知道惡意軟件研究人員的工作路數,以及他們用以狩獵威脅的工具。比如說,研究人員和程序員通常會用反匯編程序和調試器,來找出某段代碼的作用。
有很多工具和技術都可以檢測反匯編程序和調試器,包括內置的Windows功能。此類技術的設計目的,大多是輔助對抗盜版——盜版商會用這些工具破解版權保護的軟件。
不幸的是,惡意軟件作者也會用同樣的技術,來探測自身程序是否運行在惡意軟件分析師的電腦上。如果惡意軟件檢測到這些工具,他們就可以停止運行或者改變自身行為,讓分析師的工作難以開展。
2. Rootkits
在最高層級,rootkit是一系列工具或技術的集合,可讓惡意軟件潛入系統深層,對操作系統不可見。計算機處理器有不同層次的執行權限(ring 0-3),攻擊者可利用這些權限層次來玩弄運行在高層的程序。
例如,Windows和Linux之類的操作系統,有用戶空間和內核空間之分。在最高層,你只需要知道內核空間(ring0)比用戶空間(ring3)權限高就行了。如果你有個程序需要列出目錄中的文件列表,你可以調用用戶空間函數來做這事,但調用內核函數同樣可以。
如果惡意程序獲得內核權限,就可以“欺騙”運行在用戶空間的程序。因此,如果某程序以用戶空間函數調用來掃描文件系統,內核rootkit就可以在它解析文件的時候欺騙之。在該用戶空間函數掃描到惡意文件的時候,rootkit可以騙它說,“這些不是你要找的文件”,或者更具體講,就是簡單地繞過這些文件,不將它們作為該用戶空間程序的執行結果加以返回。更糟的是,虛擬化為rootkit欺騙添加了另一層保護,因為其運行在內核之下的管理程序比內核權限還高。
簡言之,惡意軟件有時候可以用rootkit功能對本地反病毒(AV)軟件隱身——通過對操作系統本身隱藏文件、網絡連接或其他東西。不過,大多數AV如今有自己的內核級驅動和防護措施,來避免常見的rootkit欺騙了。
3. 代碼、進程和DLL注入
進程或動態鏈接庫(DLL)注入,代表了可用于在另一個進程上下文中執行代碼的一系列技術。惡意軟件作者常利用這些技術,讓自己的惡意代碼在必需的Windows進程中執行。
比如說,他們可以注入到explorer.exe、svchost.exe、notepad.exe或其他合法Windows可執行程序中。通過選擇必備的Windows進程注入,惡意軟件可讓自身難以被AV軟件檢測查殺。通過勾住常規網絡進程,惡意軟件還可以隱藏掉其惡意流量。隨時間逝去,微軟已經修復了網絡罪犯利用的諸多進程或代碼注入技術,但研究人員和攻擊者不斷尋找出新技術,比如最近發現的AtomBombing內存注入技術。
惡意軟件利用來逃避AV檢測的方法還有一些,比如捆綁或附著到合法程序中,以及通過休眠以規避自動化分析的計時攻擊。當然其他例子還有很多。
那么,反惡意軟件程序是怎么檢測或挫敗這些規避的呢?不幸的是,沒有簡單的辦法可以解決這個問題,技術軍備競賽仍在進行。不過,我們的AV武器庫中確實有了一個很強大的武器——行為分析惡意軟件檢測。
很多規避技術,要么修改惡意軟件代碼以避免基于特征碼的檢測和靜態分析,要么執行一些事后回想起來明顯惡意的動作。但即便可以改頭換面,所作所為還是改變不了的,至少只要惡意軟件還想達成其感染計算機、創建后門或加密文件的目的,這些行為就不可少。因此,很多高級檢測解決方案,便創建了基于行為來識別惡意軟件的系統。
一般來說,這些解決方案創建一個表現得像是受害者計算機的“沙箱”,自帶所有正常配套軟件。當該系統收到新/可疑文件,便在沙箱環境中執行之,檢查它們的行為。通過監視成百上千的已知惡意軟件行為,包括已知規避技術,這些解決方案可以精準主動地報告可執行文件是否惡意。受到機器學習的進一步驅動,行為分析很可能就是惡意軟件防御的未來,也是總體防御的未來。
盡管如此,網絡罪犯也知道沙箱,某些最新的規避技術就是特意針對沙箱的。其中包括采集沙箱系統指紋(包括采用從CPU時序檢查到查驗已知注冊表項等一系列技術)、延遲或計時執行、甚至檢測人工互動(即檢查最近是否有人移動過鼠標,以確認主機是由人操作還是自動化的)。惡意軟件一旦用這些技術檢測到沙箱,就不執行惡意操作以規避分析。
而且,地下惡意軟件賣家,已創建出可以檢測某些沙箱的保護器。不過,一些高級檢測解決方案也考慮到了這一點。它們不僅僅采用現成的虛擬化環境,而是使用全系統代碼仿真,創建出可以看到惡意程序發往物理CPU或內存的每一條指令的沙箱環境。這一真正的可見性,讓更高級的惡意軟件解決方案,得以檢測并消除掉惡意軟件更為狡猾的某些沙箱規避技術。
惡意軟件和安全廠商間的軍備競賽不會終結,通往更強大防御的第一步,就是學習黑客使用的最新騙術。網絡罪犯繞過遺留AV解決方案偷渡惡意軟件的手法不斷創新,而行為分析正是現代安全防御中不可或缺的關鍵組件。