鎮守最後一道防線:三種逃逸沙盒技術分析

自從誕生沙盒技術來阻擋惡意軟體之後,惡意軟體也在時刻想辦法逃避沙盒,這就是沙盒逃逸技術,本文將深入分析三個主要類別的沙盒逃逸技術。

早在十多年前,人們就已經使用沙盒技術來對實施高級持續性威脅(APT)的惡意軟體進行阻擋和分析了。當時,惡意軟體已經可以通過結合多態性和加密,實現了一種複雜的混淆方法以及使用防反轉保護( anti-reversing protection)等技術來逃避基於靜態分析的工具了,例如傳統的防病毒軟體產品。因此,惡意軟體分析沙箱現在被視為是防禦APT的最後一道防線。

「沙盒」技術與主動防禦技術原理截然不同。主動防禦是發現程序有可疑行為時立即攔截並終止運行。「沙盒」技術則是發現可疑行為後讓程序繼續運行,當發現的確是病毒時才會終止。

沙盒的操作原理很簡單,就是 基於在受控環境中觀察到的行為來確定文件是否是惡意的。沙箱允許惡意軟體執行所有惡意操作並記錄結果行為。一段時間後,停止分析,檢查結果並掃描典型的惡意行為模式。由於檢測不是基於簽名,沙盒甚至可以檢測出零日漏洞攻擊和有針對性的惡意軟體,而一般情況下像這樣的攻擊是很難被安全研究人員發現或在防病毒實驗室的樣本中被找到。

顯然,基於行為分析的惡意程序檢測必須具備一點:在利用沙盒進行分析時,所檢測的程序必須執行惡意操作,否則無法檢測到。所以惡意軟體的開發者總是在尋找新的方法,試圖隱藏惡意軟體的攻擊行為來逃避沙盒檢測。我們將這些方法分為三類:

1.沙盒檢測:首先會檢測沙盒是否存在,如果不幸被沙盒檢測到了,那麼就只在檢測時自動調整到無威脅運行模式。

2.利用沙盒箱技術中的漏洞:利用沙盒技術系統中的弱點或漏洞。

3. 利用安全上下文檢測:安全上下文的概念範圍是很廣的,許可權、特權、訪問令牌、完整性等級等等都包含在其中,在沙箱分析期間,惡意軟體會使用一些未被開啟的攻擊屬性。

下面我們先簡要的介紹一下這三種技術:

沙盒檢測

利用此種逃逸方法,惡意程序會通過尋找沙盒環境和真實受害者系統之間的小差異來檢測沙盒的存在。如果檢測到沙盒,惡意軟體通常會使用兩種方式做出應對:

1.立即終止本身的可疑運行活動

2.僅執行非惡意行為並且僅執行無害操作。

比如下面這一個例子,所進行的逃逸行為:

1.嘗試檢測其是否是在虛擬機中運行

2.看看是否有應用程序沙箱正在運行

我們可以在VMRay(第三代威脅分析和檢測供應商)發布的威脅標識符(VTI)詳細信息中看到這一點, VMRay以對這個樣本進行了沙盒檢測,並將其評為高度惡意。

利用沙盒的技術漏洞

這種逃逸方法會直接攻擊和利用底層沙盒技術或相關技術生態系統中的弱點。例如,我們最近看到大量的惡意軟體都在利用Microsoft COM內部漏洞,這是因為大多數沙盒無法正確分析這些樣本。還有一些惡意軟體將使用不能由沙盒處理的模糊文件格式,或者利用沙盒無法處理超過一定大小的文件來進行逃逸。比如下面這個樣本,會嘗試矇騙監視器即通過使用非法的API來逃避分析,這是利用注入到攻擊目標設備中的HOOK技術 或隱藏驅動器的方法。HOOK API的思路就是修改原API的入口,使其跳轉到假的API入口, 然後執行假API函數,不過,由於VMRay不是利用的HOOK技術來檢測,所以這個樣本還是被VMRay檢測到。

利用安全上下文檢測

這類逃逸技術不會試圖檢測或攻擊沙盒。相反,它利用了沙盒自動化檢測系統中的自帶缺點。由於沙盒要同時對大量的程序進行檢測,所以對每個文件的分析也就是幾分鐘而已。所以,惡意程序通過延遲惡意有效載荷的執行時間,避開檢測時間,則惡意程序就可以不被檢測到。除了利用時間觸發器,惡意軟體還可以使用通常不在沙箱中發生的其他事件,例如,系統重新啟動或用戶交互或惡意軟體在預定攻擊設備上的特定應用,例如本地化設置等。

在下面的這個樣本中,我們能看到,這個惡意軟體除了嘗試檢測VM環境外,還利用安裝啟動腳本和應用程序,企圖在重新啟動後繼續運行。

接下來,我們將會對這三類技術中的更多細節進行分析,比如在沙盒檢測技術中,惡意軟體是如何檢測到沙盒的存在並切換到無害運行模式的。

如何檢測沙盒的存在

有許多技術來識別沙盒的存在,比如一旦被檢測到,惡意軟體可以以不同的方式做出應對,當然其中最簡單的步驟是立即終止惡意程序運行,這樣做雖然簡單,但卻容易向用戶發送錯誤提示,畢竟這種突然停止運行的做法不會是一個正常的,良性的程序所為,還有就是一旦被檢測到,惡意軟體就會顯示一個虛假的錯誤消息,例如,惡意軟體可以顯示某個系統模塊丟失或可執行文件已損壞的消息。而更複雜的惡意軟體可能會執行一些無害的操作來隱藏真實攻擊意圖。

下面就讓我們更深入地來了解一下惡意軟體在沙盒檢測中所使用的不同技術:

虛擬化檢測或Hypervisor技術

這是最早的逃避技術之一。然而,由於目前許多運行環境(包括工作站和伺服器)都虛擬化了,虛擬機的使用也非常廣泛了。

最早的檢測方法都是基於虛擬化的技術,包括:

1.檢測流行虛擬機管理程序的工具,例如VMWare(「埠0x5658」)或Virtualbox典型的「後門程序」或「綁定外殼程序」,

2. Hypervisor技術的檢測工具:最有名的是redpill(「IDTR無法被虛擬化」)

不過這些技術今天都不是很有效了。通過硬體虛擬化支持,虛擬機內部很少有可以利用的工具,因為大多數硬體現在都由CPU本身進行虛擬化處理。因此,它們不必使用Hypervisor來模擬出運行應用程序的容器。

除此之外還有另一種方法能夠檢測出Hypervisor

例如:從MAC地址,設備ID或CPU ID或從存在某些進程,文件,驅動程序,註冊表項或存儲器中的字元串查看提供hypervisor的供應商。

在此,我們從發布的兩個惡意軟體的分析報告中,發現了兩種類型的虛擬化檢測。

在第一個樣本,我們看到了一個用正在被沙盒檢測的惡意軟體正在檢測是否在VirtualPC內運行:

點擊以下鏈接 Analysis Report,你可以查看完整的分析報告。

在另外一個樣本中,惡意軟體是通過查看註冊表值來檢測虛擬機的存在。在此樣本中,惡意軟體查詢註冊表項「HKEY_LOCAL_MACHINE HARDWARE Description System」以查找與常見虛擬機運行(如VMWare)相關聯的值:

點擊以下鏈接Analysis Report,你可以查看完整的分析報告。

檢測沙盒工具

在此方法中,惡意軟體不會試圖檢測hypervisor,而是試圖檢測沙箱本身。

可以通過以下供應商發的特定信息:

常見虛擬機產品,例如,某些文件,進程,驅動程序,文件系統結構,Windows ID,用戶名等。

系統運行機制:

感染後將分析環境恢復到乾淨的狀態,比如Deepfreeze,Reborn Cards

控制沙盒控制器的通信,比如添加監聽埠,利用主伺服器

使用特定的沙盒技術進行檢測:

大多數沙盒會使用Hook技術,即它們在會在分析系統內注入或修改代碼和數據。Hook本質上是一個底層操作平台,它能捕獲軟體進程,驅動程序和操作系統之間的通信。Hook可以以許多方式實現,例如:inline hook,IAT,EAT,代理DLL,過濾器驅動器等,而這些都可以通過以下方式檢測到:

檢查某些相關運行的指令

驗證系統的完整性,例如,驗證相關係統文件的hash簽名

雖然,一些沙盒會使用與本地系統相類似的模擬運行程序,這些模擬運行都是基於不同的指令語義,高速緩存的攻擊等,但是檢測工具可以通過調用未包括在模擬中的模糊CPU指令來檢測模擬運行中漏洞,當指令調用失敗時,惡意軟體就會知道它在模擬環境中運行。

比如下面這個樣本,惡意軟體會查找模塊「SbieDll.dll」是否存在,如果有「SbieDll.dll」,則證明沙盒在運行,

檢測沙盒的運行環境

因為沙盒通常不是一個運行系統,設置沙盒就是專門用來分析惡意軟體的。因此,沙盒的這種虛擬運行環境多少與真實計算機系統不相同,並且這些差異可以由惡意軟體檢測。差異可能包括:

硬體屬性:小屏幕解析度,沒有USB 3.0驅動程序,屏幕的畫面缺乏3D渲染功能,只有一個CPU-V(cpu虛擬化檢測工具),小硬碟和小內存。

軟體屬性:異常軟體堆棧,例如。沒有IM,沒有郵件客戶端

系統屬性:正常運行時間(「系統已在10秒前重新啟動」),網路流量(「系統正常運行了一天,但只有幾個MB通過網路傳輸」),沒有或只有默認印表機

用戶屬性:乾淨的桌面,乾淨的文件系統,乾淨的cookie,沒有最近的文件,沒有用戶文件。

現在為了詳細說明這種檢測方法,我們還是回到圖五中那個樣本。除了檢查虛擬機是否存在外,惡意軟體另外正在尋找Wine模擬器(它能模擬Windows功能,而不是模擬CPU)的存在。我們可以在VTI的評分中看到惡意軟體正在做一個查詢GET_PROC_ADDRESS,並嘗試根據返回的結果來確定在Wine環境中預期的結果:

點擊以下鏈接Analysis Report,你可以查看完整的分析報告。

基於時間的檢測

惡意軟體可以通過監視應用程序的時間行為來檢測沙盒的存在性,鑒於此沙盒會嘗試通過偽造時間來防止惡意檢測,但是,惡意軟體可以通過併入外部時間源(如NTP)繞過此過程。

比如下面這個樣本,就是基於對時間的檢測,利用rdtsc執行檢測兩次系統時間戳的間隔是否過長:

FORCEPOINT安全實驗室專門對這個檢測技術做了一個深入的研究。

點擊以下鏈接Analysis Report,你可以查看完整的分析報告。

如何構建沙盒檢測環境

為了避免惡意軟體的以上這些類型的檢測,沙盒分析環境應該做到以下幾點:

在進行檢測時,不要修改檢測環境,因為用於沙箱分析的通用方法是hook技術,而不論是用戶模式還是內核級驅動程序,監視和攔截API調用和其他惡意軟體活動都會帶有hook的使用痕迹,所以在檢測時沙盒環境是不可能完全隱藏hook的存在,也就是說通過這種方法來對抗惡意軟體的逃逸是徒勞無功的。

要麼完全實現系統模擬,要麼完全不實現,雖然從理論上講,實現完美的模擬環境會讓惡意軟體難以檢測到,但在實踐中,真要實現卻並不容易,就像我們上面分析的那幾個樣本一樣,幾乎任何給定的模擬環境都會有可以被檢測到的漏洞。

使用「真實」的分析環境,如果沙盒分析器可以運行從實際運行環境中複製過來的完整映像,例如圖像,圖標,聲音,映像,屬性列表,文本文件等,則被檢測到的概率就會小很多。正如我們前面所分析的那樣,將檢測環境與隨機化的環境聯繫起來有助於確保惡意軟體不會把檢測環境標記為「假」的,

VMRay就是利用以系統管理程序為核心的技術以及由監測方法(模塊間的過渡監測),提供一套無代理的自動化威脅分析解決方案。VMRay分析儀是在管理程序級別進行監測,通過不修改目標環境,不依賴於模擬系統,並把真實運行的環境映像過來,運行在目標操作系統下的惡意軟體是無法察覺的。

接下來,就讓我們來深入分析一下沙盒逃避技術的第二種方法,利用沙箱技術漏洞。

利用沙箱技術漏洞

如果惡意軟體刻意的來搜索沙箱的存在,則很有可能在分析期間就被檢測為可疑活動。因此,惡意軟體採用的更高級方法就是利用沙盒技術中的漏洞來執行逃逸行為。通過利用這些沙盒的漏洞,即使惡意軟體是在沙盒系統中執行,也不必擔心被檢測到。

大多數沙箱都會進行用戶監控,即沙箱會在分析環境中放置代碼,進程,hook等。如果惡意軟體能取消或規避這些監控,則沙箱將失效。惡意軟體一般會採用以下的方法來讓沙箱失效:

去除hook,可以通過恢復原始指令或數據來去除hook

規避hook,繞過API直接進行系統調用,調用未hook的私有函數(private function)或執行未對齊的函數(unaligned function)調用(跳過hook code)來規避hook。比如下面這個例子,就檢測到了惡意軟體啟動和攻擊explorer.exe和regedit.exe的非法API使用。雖然這個問題可以通過hook來解決一些特定的內部功能,但目前在操作系統中,這些漏洞利用會隨每個Windows版本而變化。此外,未對齊的函數調用的問題目前還不能通過hook來完全地解決。

替換系統文件,hook通常駐留在映射到內存的系統文件中。某些惡意軟體會取消這些映射文件並重新載入它們。然後,新載入的文件就不會含有hook

內核代碼:許多沙盒不能監控內核代碼或系統的引導過程:模糊文件格式,許多沙盒不支持所有文件格式,例如Powershell,.hta,.dzip等一些文件格式,這些文件格式可能會在沙盒環境中運行。

目前許多沙箱不是支持所有的逃逸分析技術,雖然沙盒能檢測到運行在其中的初始文件(例如,帶有宏的Word文檔),但對宏所攜帶的逃逸分析技術的有效載荷卻無法進行檢測。

重新啟動操作系統,許多沙盒無法適應重新啟動。一些系統嘗試通過重新登錄用戶來模擬重新引導,但是這可以被檢測到,並且不是所有的重新引導的觸發器都會被執行。

利用沙盒技術系統中的特定漏洞,惡意軟體有時還可以使用一些簡單但特別有效的方法進行沙盒環境的檢測,一些沙盒只支持一定大小的文件,例如10 MB;還有一些沙盒不支持多個壓縮層。

所以為了確保惡意軟體不能通過這些方法逃避分析,沙盒分析環境應該:

1.不要依賴於對沙盒分析環境的修改,特別是,用於沙箱分析的通用方法是hook。hook的存在使惡意軟體有機會禁用沙盒的分析功能。

2.把實際運行環境作為目標分析的環境模型,為了方便有效的檢測到惡意軟體,許多沙盒都具有「一刀切」的方法,即設置一類目標分析環境,然後將這個環境模型投放到所有的分析中,這樣做明顯不適合,更好的方法是使用實際的環境映像,即把企業運行的系統標準,伺服器操作系統,應用程序配置作為目標分析環境模型。這樣,就可以放心的進行檢測了,沙盒就可以對任何環境下的惡意軟進行檢測了。

3.監控所有與惡意軟體相關的活動,無論是應用程序還是各種文件格式,一些沙盒分析器,特別是那些使用基於hook方法的沙盒分析器,為了確定什麼活動被監視的效率,通常為了採取快捷和穩妥的檢測,而只對某一些特定的惡意行為和文件進行檢測,這就為惡意軟體的檢測留下了漏洞。

本文參考於vmray,如若轉載,請註明來源於嘶吼: 鎮守最後一道防線:三種逃逸沙盒技術分析 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

HEVD 內核攻擊:漏洞攻擊的完全實現及SMEP繞過(四)
世界第一黑客凱文·米特尼克再出山:這次教你如何在線隱身
白帽黑客:技術理想抵抗現實慾望
調戲勒索軟體大黑客

TAG:沙盒计算机安全 | 信息安全 |