惡意軟體中的逃避技術,十八般武藝樣樣齊全
技術進步在過去十年中大大改變了我們的生活。即使是最簡單的日常任務我們也依靠計算機,當它們不可用或不按照我們預期的情況下我們會變得焦慮。我們創造,使用和交流的數據已經成為21世紀的黃金。 因為我們的信息是如此寶貴,而且經常非常私密,企圖竊取它的情況已經激增。
惡意軟體首先被開發出來向隱私發起挑戰,但很快攻擊者就認識到被盜數據的價值,網路犯罪行業誕生了。包括McAfee在內的安全公司很快成立,使用反惡意軟體技術以捍衛的人員和系統。 作為回應,惡意軟體開發人員開始開發逃避安全產品的方法。
第一個逃避技術很簡單,因為反惡意軟體產品很簡單。例如,更改惡意文件中的一個比特位有時就足以繞過安全產品的簽名檢測。最終,更複雜的機制,如多態性和模糊化到來了。
今天的惡意軟體強大且富有侵略性。 惡意軟體不再是由想要證明某些東西的孤立團體或青少年開發的。它現在由政府,犯罪集團和黑客主義者開發,來偵察,打開,竊取或銷毀數據。
該主題詳細介紹了現代最強大和最常見的逃避技巧,並解釋了惡意軟體作者如何使用它們來實現其目標。
為什麼使用逃避技術?
為了執行惡意操作,攻擊者會編寫惡意軟體。但是,除非他們的企圖未被發現,否則他們無法實現目標。 安全廠商和攻擊者之間存在一種貓鼠遊戲,其中包括攻擊者跟蹤安全技術的動向和實現。
術語「逃避技術」組合了惡意軟體使用的所有方法,以被避免檢測,分析和理解。我們可以將逃避技術分為三大類:
- 反安全技術:用於避免反惡意軟體引擎,防火牆,應用程序封鎖或其他保護工具的檢測。
- 防沙箱技術:用於檢測自動分析,逃避檢測惡意軟體行為的引擎。 檢測與虛擬環境相關的註冊表項,文件或進程會讓惡意軟體知道是否在沙箱中運行。
- 反分析技術:用於檢測和愚弄惡意軟體分析人員,例如,通過發現諸如Process Explorer或Wireshark之類的監控工具,以及一些流程監控技巧,包裝器(packer)或混淆來避免逆向工程。
一些高級惡意軟體樣本同時使用這些技術中的兩種或三種。例如,惡意軟體可以使用像RunPE這樣的技術(它在內存中運行自身的另一個進程)來逃避反惡意軟體,沙箱或分析器。某些惡意軟體檢測到與虛擬環境相關的特定註冊表項,允許威脅規避自動沙箱,以及分析人員嘗試在虛擬機中動態運行可疑的惡意軟體二進位文件。
安全研究人員必須了解這些逃避技術,以確保安全技術仍然可行。
我們看到頻繁使用的幾種逃避技術:
防沙箱越來越普遍,因為越來越多的企業正在使用沙箱來檢測惡意軟體。
簡史
自從1980年首次出現以來,惡意軟體的逃避技術已經變得更加廣泛和複雜。以下是逃避技術演進的主要里程碑:
嘗試防禦反惡意軟體產品的第一個已知病毒是MS-DOS病毒Cascade。 它通過部分加密自己的代碼來保護自身,使安全分析師無法讀取內容。
我們可以看到一部分Cascade代碼。紅色突出顯示由反彙編程序自動生成,並指示其餘代碼不存在。 這是因為加密代碼需要解密。 解開這種類型的惡意軟體的一個簡單的方法是運行可執行文件,讓解密常式解密其餘的代碼。
1990年初,安全行業發現了第一個多態病毒Chameleon。 Chameleon被高度加密並包含垃圾代碼。 為了使研究人員的分析變得更加困難,每一次新的感染都會新增幾個指令。
隨後的惡意軟體開發引入了多態,包裝器,rootkit,混淆和其他逃避技術。 一旦黑市開始銷售現成的惡意軟體,沒有經驗的攻擊者加便入犯罪浪潮。
惡意軟體作者使用逃避技術是成功的根本。 網路犯罪分子-甚至是業餘愛好者都了解這一點,因此,這些逃避技術已經發展出一個活潑而易於訪問的市場。在互聯網上找到的crypter工具的例子。
黑市中的逃避技術
一些賣家將幾種逃避技術匯總成一種工具,並將其在地下市場上銷售給複雜的惡意軟體編寫者或其附屬公司,負責傳播惡意軟體以支持大型廣告。
有時可以以較低的價格獲得逃避工具。 一些編譯好的crypters和packers的賣家可能是在互聯網上購買或竊取的,捆綁在一起,然後提供捆綁銷售。
一些賣家提供一個FUD文件的服務。 該服務更昂貴,這可能是由於提供商使用高級技術,如代碼操作,高混淆或其他技巧與自己的定製crypters.
其他賣家開發自己的工具,並保留源代碼,以避免分析和檢測。這樣價格更高,因為工具(大概)是獨家的。
也可以購買證書來簽署任何惡意軟體,從而繞過操作系統的安全
黑市中的逃避工具
安全公司和有組織的犯罪者使用的逃避技術
黑客組織也對逃避技術感興趣。 2015年,黑客團隊揭示了一些用於感染和監聽系統的技術。他們強大的UEFI /BIOS rootkit可以在沒有檢測的情況下感染。此外,黑客團隊開發了自己的核心FUD來封裝自己的工具。
提供滲透測試服務的安全公司了解並使用這些技術,允許滲透測試人員如真正的黑客一樣入侵。諸如metasploitsuite,Veil-evasion和shellter之類的工具位他們提供了保護他們惡意代碼的技術。攻擊者發現這些技術之前,安全研究人員一直在尋找這些技術。我們已經看到最近威脅DoubleAgent觸發反惡意軟體的解決方案
逃避技巧在行動
在過去一年中,我們分析了許多包含逃避能力的惡意軟體樣本。在典型的攻擊中,攻擊者在攻擊流程的許多步驟中都使用逃避技術。
Dridex銀行木馬
Dridex(也叫做Cridex)是最早出現在2014年的知名銀行木馬,此惡意軟體會竊取銀行憑證,並通過包含惡意宏Word中的電子郵件附件傳播。
自2014年以來,已經出現幾種Dridex變種。在每次變種中,我們發現軟體中追加和增強的逃避技術。Dridex很大程度上依賴於其感染載體的逃避技術。圖11我們可以看到函數名稱和數據的混淆。這種混淆是簡單的,因為它使用ASCII編碼。
其他變種使用了更為高級的技術。
圖12這個樣本使用字元串和內容混淆的逃避技術以繞過策略執行powershell,並且檢測在http://maxmind.com上的IP地址以對抗反病毒廠商的黑名單
在另一個樣本中,Dridex感染載體通過檢查註冊表項「HKLM
SYSTEM ControlSet001 Services Disk Enum」的值來嘗試檢測虛擬環境或沙箱,搜索諸如「VMWARE」或「VBOX「的字元串,當檢測到虛擬機或沙箱時,Dridex不會運行,表現得似乎無害,或試圖將系統崩潰。
逃避技術在感染載載體中大量使用來逃避檢測和被分析人員理解。Dridex結合幾種技術以避免在多個攻擊階段被檢測或者被分析。
圖13在這個例子中,Dridex使用processhollwing逃避技術來向一個暫停進程中注入惡意代碼。然後新進程調用rundll32.exe,這個程序向explorer.exe載入惡意的DLL。
一個最近的Dridex樣本使用稱為「AtomBombing」的新型逃避技術。這項技術使用Atom表單,這是由操作系統提供的允許應用程序存儲和訪問數據的區域。
可以將惡意代碼注入Atom表單然後強制合法的應用程序執行惡意代碼。因為這項惡意代碼注入技術是眾所周知的並且很容易被檢測,攻擊者們現在正在改進他們的技術。
最後,最終Dridex的有效載荷通常使用模糊和加密來保護惡意二進位文件中包含的控制伺服器URL,殭屍網路信息和PC名稱等數據。
Locky勒索軟體
Locky是2016年最突出的勒索軟體家族之一。它使用許多方法來感染系統。 其中一些逃避技術與Dridex的技術相似。
圖14一個Locky感染載荷對函數使用基本的Unicode和隨機字元串的混淆方法。
在前一種情況下,恢復代碼是微不足道的,因為很容易反解Unicode,這是一種用於不同格式可列印文本的編碼標準。 此片段中的每個Unicode字元對應於ASCII字元。
圖15-16在這個感染載荷中,這段代碼會通過外鏈將一個exe文件下載到TEMP文件夾中
其他Locky樣本使用多次xor加密來逃過檢測和繞過email過濾器以及Web網關。
一些Locky變種使用NullsoftScriptableInstallSystem—一個壓縮文件工具。這個合法的應用常常被惡意軟體用來繞過反病毒引擎。我們可以直接解壓啊所NSIS文件來直接獲取它的內容。
圖17:在這個Locky的例子中,我們看到有許多的垃圾文件被設計來浪費分析人員的時間。所有這些文件都被NSIS壓縮。僅僅只有一些被用來在目標操作系統中執行惡意行為。
除了模糊可執行格式之外,Locky還使用技巧哎繞過防火牆並且通過網路控制伺服器檢測。一些Locky變種使用域生成演算法,一種允許動態創建域的技術。 Locky作者隨著他們每次行動改變且更新逃避技術。
2016年8月,Locky開始使用命令行參數來規避自動沙箱分析。沒有命令行,樣本將不會在系統上運行,載荷將不會被解碼進內存。
圖18這個例子中,js文件感染向量會傳入命令行參數123,接著,命令行參數會被windowsAPIGetCommandLine和CommandLineToArgvW讀取。
該示例的參數用於將載荷解密和解包到內存中。 如果參數不正確,樣本會在嘗試運行加密代碼時崩潰。
Locky和其他惡意軟體使用的另一個技巧是Read TimeStamp Counter(RDTSC)x86指令來檢測虛擬環境。時間戳計數器記錄複位以來的處理器周期數。指令RDTSC簡單地返回存儲在寄存器edx:eax中的計數器的值。
在物理主機上,兩個連續的RDTSC指令佔用少量的周期。在虛擬主機上,這個周期會變大。如果返回的值不是預期的值,則樣本將處於休眠狀態。
圖19:調用WindowsAPIGetProcessHeap和
CloseHandle用來增加處理器的周期數(每個指令周期,IPC,記錄處理器的行為)Locky將兩者執行周期進行比較,如果CloseHandle比GetProcessHeap多執行超過十個周期的話,惡意軟體就會認為自己是運行與虛擬機之下。Nymain下載器
Nymain提供如木馬或勒索軟體等惡意軟體。 Nymain使用幾種逃避機制來避免被分析和檢測 – 使用反逆向工程技術與混淆和沙箱檢測以及活動計時器的組合。
大多數惡意軟體使用假元數據來顯得合法。元數據包含有關FileVersion,CompanyName和Languages等信息。其他樣本使用被盜證書看似合法。
圖20Nymain使用的元數據
圖21Nymain使用的反調試技術來避免被調試器動態分析
最常見的也是最簡單的繞過是IsDebuggerPresent函數。該代碼調用Windows
API並在寄存器中設置一個值。如果值不等於零,則程序當前被調試。在這種情況下,惡意軟體使用APITerminateProcess終止進程。另一個繞過調試器的技巧是調用FindWindow。如果一個窗口與調試器(如OllyDbg或Immunity Debugger)有關,則此API會檢測並關閉惡意軟體。Nymain進行額外檢查以避免分析:
檢查日期,並在行動結束後不執行。
檢查惡意軟體的文件名哈希是否在系統上。如果是,可以進行分析。
檢查與虛擬環境相關的MAC地址。
檢查註冊表項HKLM HARDWARE Description System 「SystemBiosVersion」以查找字元串「VBOX」。
插入垃圾代碼,導致反彙編器「code spaghetti」。
使用域生成演算法來避開網路檢測。
NecursTrojan
Necurs是一種控制系統並傳遞其他惡意軟體的木馬。 Necurs是最大的殭屍網路之一,2016年節點數超過600萬.Necurs於2016年開始傳播Locky。
圖22Necurs使用一系列機制來免於被檢測和分析
圖23CPUID指令返回CPU的相關信息並且允許惡意軟體檢測自身是否運行於虛擬環境之下。如果是的話,惡意軟體將不會運行。
圖24第二項逃避技術使用WindowsAPIGetTickCount獲取系統啟動以來經過的時間。接著執行一些操作後再次獲得時間。這項技術被用來檢測調試工具。如果獲得的時間比所期望的要長,那麼程序被認為正在被調試。惡意軟體將會終結進程或者使系統崩潰。
圖25一個舊的但已然有效的逃避技術是請求被vmware使用的輸入/輸出埠。惡意軟體可使用魔數「VMXh」和x86指令『in』來請求這個埠。在執行中,IN指令被虛擬機捕獲並進行模擬。指令返回並存儲在寄存器ebx中的結果與魔數「VMXh」進行比較。如果結果相符,則惡意軟體在VMware上運行,惡意軟體將終止進程或嘗試將系統崩潰。
圖26VMCPUID指令與CPUID類似,儘管該指令僅在某些虛擬機上實現。如果未實現VMCPUID指令,則會導致系統崩潰,從而防止虛擬機進行分析。
圖27VPCEXT指令(可視化容器擴展器)是Necurs用於檢測虛擬系統的另一種反虛擬機技巧。這種技術沒有文檔化,並被其他幾個機器人使用。如果指令的執行沒有產生異常,則惡意軟體在虛擬機上運行。
無文件化惡意軟體
一些惡意軟體不會通過向硬碟寫入文件來感染系統,因此就繞過了許多的檢測技術。我們寫過一份關於無文件化惡意軟體的報告—mcafee威脅報告2015年12月。
我們現在發現PowerShell用作感染載體。在一個樣本中,一個簡單的JavaScript文件運行模糊過的PowerShell命令,以從外部IP地址下載打包或包裝過的文件。該文件將惡意DLL注入合法進程,繞過所有保護。這種惡意軟體類型並不是完全的無文件化,但仍然有效。
以下示例(hash:f8b63b322b571f8deb9175c935ef56b4)顯示感染過程:
圖28 powershell命令釋放一個NSIS壓縮過的文件(agzabf.exe,向explorer.exe注入monkshood.dll)。這裡使用的逃避技術是DLL注入,它將代碼注入到一個正在運行的進程中。
逃避技術的趨勢
大多數逃避技術包括:
- 混淆:保護數據,變數,網路通信。隨機化變數名或函數名。可使用XOR或其他編碼技術
- 環境檢測:免分析,惡意軟體檢測和虛擬環境相關的工具
- 沙盒檢測:惡意軟體檢查硬碟來檢測和沙盒相關的文件或進程。
下面的統計數據,來自virus Total 和McAfee,從一直樣本中獲得的包括沙盒逃逸技術。
惡意軟體使用許多其他的技術來逃避檢測。Detectingmonitoring和windowshook(改變windows函數的內部行為)是常見的技術。許可權提升在關閉反惡意軟體工具很或者執行一些其他的需要admin許可權的指令中很流行。
安全行業正基於機器學習在開發新的檢測技術,它可以檢測行為並且預判可執行文件是否是惡意的。
圖29 對機器學習的興趣正逐步增長。
安全行業對機器學習非常感興趣,攻擊者也是如此。3月份,安全研究人員觀察了第一個基於機器學習的惡意軟體樣本Cerberransomware。Cerber在每個感染階段使用多個文件,將它們動態地注入正在運行的進程。這些攻擊者面臨的挑戰是,機器學習會根據功能而不是簽名來檢測惡意文件。在這個例子中,Cerber使用單獨的載入器來注入載荷,而不是在其中運行常式。這種技術允許Cerber不被機器學習檢測而運行,但會被傳統的反惡意軟體引擎捕獲。
另一種越來越多的逃避技術是固件感染,我們預計這將在攻擊物聯網設備中變得流行。
將惡意代碼插入固件是避免檢測的非常有效的方法。固件惡意軟體可以控制許多系統組件,包括鍵盤,麥克風和文件系統。它不能被操作系統檢測到,因為感染髮生在Ring -1中,內核中的最深點,惡意軟體具有很多許可權,並且幾乎沒有安全檢查。
為了檢測這種威脅並輕鬆分析固件,McAfeeAdvanced Threat Research發布了開源工具Chipsec。 您可以通過以下命令查看白名單來查看固件是否已經受到的影響:
圖30使用Chipsec框架來dump固件
圖31檢查針對白名單的轉儲固件來檢測有無修改。
防止使用逃避技術的惡意軟體
了解惡意軟體逃避技術是更好地防範這類惡意軟體的第一步。
構建安全程序以防止迴避惡意軟體應基於三個基本組件。
- 人員:安全從業人員必須接受培訓,以妥善應對安全事件,妥善管理當前的安全技術。攻擊者通常使用社會工程來攻擊用戶。沒有內部意識和培訓,用戶將為攻擊者留下一些攻擊面。
- 流程:清晰的結構和內部流程必須到位,以便安全從業人員是有效的。安全最佳措施(更新,備份,治理,情報,事件響應計劃等)是強大而有效的安全團隊的關鍵。
- 技術:團隊和流程的技術支持應該培育和加強,以適應新的威脅。
可採取的策略和程序
最需要防禦惡意軟體感染的是用戶。用戶必須了解來自潛在風險來源下載和安裝的應用程序。用戶還必須了解惡意軟體可能在瀏覽時無意中下載。
始終保持最新的Web瀏覽器和附加組件,端點和網路網關上的反惡意軟體升級和更新到最新版本。
只允許可信網路上的系統被公司IT安全部門分發和認證。惡意軟體可以通過連接到可信網路的不受保護的系統而輕鬆地傳播。
惡意軟體可以隱藏在之前由攻擊者特洛伊木馬化的合法軟體內。為了防止這種類型的攻擊成功,我們強烈建議加強軟體交付和發布機制。擁有企業應用程序的中央存儲庫始終是一個好主意,用戶可以從中下載正規的軟體。
在用戶授權安裝以前未被IT安全部門驗證的應用程序的情況下,教育用戶僅安裝來自已知供應商的可信簽名的應用程序。在線提供的「無害」應用程序嵌入惡意軟體非常常見。
避免從非Web來源下載應用程序。從Usenet組,IRC頻道,即時消息客戶端或對等系統下載到惡意軟體的可能性非常高。IRC和即時消息中的網站的鏈接也經常指向受感染的文件下載。
實施網路釣魚攻擊預防教育計劃。惡意軟體通常由網路釣魚攻擊傳播。
威脅情報反饋與反惡意軟體技術相結合。這種組合將有助於加快威脅檢測的速度。
結論
惡意軟體為了執行惡意行為,必須保持不被檢測和隱身。隨著安全技術變得越來越複雜,逃避技術也越來越複雜。這場競爭已經導致了一個強大的地下市場,其擁有最好的逃避技術,包括完全不可檢測的惡意軟體。其中一些服務使用了安全行業未知的逃避技術。
惡意軟體的逃避技巧不斷發展,現在幾乎任何一個攻擊階段都可以部署。 如Dridex和Locky所示,幾個行動使用相同的技術來傳播,但避免了分析和檢測。即使是最知名的惡意軟體,舊的逃避技術仍然受歡迎並且有效。
為了防止這類惡意軟體,我們必須首先了解它。我們必須研究每個漏洞,了解安全技術為什麼不阻止攻擊。
本文由看雪翻譯小組 wangrin 編譯,來源@macafee 轉載請註明來自看雪社區
推薦閱讀: