多拳出擊:Windows新安全機制如何防禦無檔案惡意軟體
一、概述
在我們的日常監測過程中,發現有兩個前所未見、經過嚴重混淆的指令碼,成功通過了基於檔案的反病毒檢測,並且動態地將資訊竊取Payload載入到記憶體中。這些指令碼通過社會工程的方式實現分發,誘導目標使用者執行指令碼,指令碼的檔名分別是install_flash_player.js和BME040429CB0_1446_FAC_20130812.XML.PDF.js。
其中,Payload非常複雜,難以分析,其原因在於:
- Payload不儲存於磁碟上,因此不會觸發檔案反病毒掃描;
- Payload是在執行指令碼的合法程序上下文中載入的(wscript.exe);
- 在磁碟上沒有找到任何痕跡,因此取證分析所發現的證據非常有限。
實際上,這些都屬於無檔案威脅。針對這類威脅,實際上Windows Defender高階威脅防護的反病毒功能仍然可以檢測到Payload並阻止攻擊。這是怎麼做到的呢?
在此場景中,反惡意軟體掃描介面(Antimalware Scan Interface)會對其進行檢測。AMSI是一個開放式的介面,允許反病毒產品呼叫,以檢查未經加密和未經混淆的指令碼程式碼行為。
AMSI是動態下一代(Dynamic Next-gen)功能的一部分,使得Windows Defender ATP中的反病毒功能不再僅僅是進行檔案掃描。其中的功能還包括行為監控、記憶體掃描和引導扇區保護。通過這些功能,可以捕獲到各種威脅,包括未知威脅(例如上面所說的這兩個指令碼)、無檔案威脅(例如這裡的Payload)以及其他惡意軟體。
二、通用無檔案檢測技術
上面所說的兩個混淆後的指令碼,是Windows Defender ATP反病毒功能在野外成功檢測並阻止的真實惡意軟體。在去掉第一層混淆後,我們得到了一段程式碼,儘管其中部分仍然經過了混淆,但其中顯示了一些與無檔案惡意軟體技術相關的函式,稱為Sharpshooter。2017年,我們監測到Sharpshooter技術,並在MDSec上公佈( ofollow,noindex" target="_blank">https://www.mdsec.co.uk/2018/03/payload-generation-using-sharpshooter/ )。此後不久,就發現了這兩個指令碼,它們是同一個惡意軟體的變種。
Sharpshooter技術允許攻擊者使用指令碼,直接從記憶體執行.NET二進位制檔案,而無需儲存在磁碟上。該技術提供了一個框架,可以使攻擊者輕鬆地在指令碼中重新打包相同的二進位制Payload。正如這兩個樣本,使用Sharpshooter技術的檔案可以用於社會工程學攻擊,從而誘導使用者執行承載了無檔案Payload的指令碼。
install_flash_player.js中混淆後的程式碼如下:

去混淆後,我們發現指令碼中包含了使用Sharpshooter技術的痕跡:

在Sharpshooter技術公開之後,我們清楚該技術只是用於攻擊發生之前的一段時間。為了保護使用者免受此類攻擊,我們基於執行時活動,實現了一個檢測演算法。換而言之,該檢測方式是針對Sharpshooter技術本身,因此可以抵禦使用該技術的新型威脅和未知威脅。這就是Windows Defender ATP發現並阻止了這兩個惡意指令碼的方法,最終防止無檔案Payload被載入。
檢測演算法利用指令碼引擎對AMSI的支援,將通用的惡意行為(惡意無檔案技術的指紋)作為檢測目標。指令碼引擎在執行時能夠記錄指令碼呼叫的API,這一API日誌記錄是動態的,因此不會受到混淆處理的影響。指令碼可以隱藏它的程式碼,但不能隱藏它的行為。然後,當呼叫某些危險的API(也就是檢測過程中的觸發器),反病毒解決方案就可以通過AMSI掃描日誌。
這是指令碼生成的動態日誌,由Windows Defender ATP在執行時通過AMSI檢測到:

使用AMSI輔助檢測,Windows Defender ATP在2018年6月期間,有效阻止了兩個不同惡意軟體的活動,同時能保證日常監測的穩定。

此外,藉助Sharpshooter技術,我們還發現了一種非常複雜的攻擊。Windows Defender ATP的終端檢測響應(EDR)功能捕獲到了使用Sharpshooter技術的VBScript檔案。

我們對指令碼進行了分析,併成功提取無檔案Payload,這是一個非常隱祕的.NET可執行檔案。惡意軟體Payload通過DNS查詢的TXT記錄,從其命令和控制(C&C)伺服器下載資料。
其中,它還會下載解碼惡意軟體核心功能的初始化向量和解密金鑰。惡意軟體的核心功能也是無檔案的,它會直接在記憶體中執行,不會向磁碟寫入任何內容。因此,這次攻擊包含兩個無檔案階段。
下圖是惡意軟體核心元件解密後的程式碼,這部分程式碼會在記憶體中執行:

針對這一起惡意軟體攻擊事件,我們獲得了充分的證據,並進行了分析。最終的結論是,這可能是一次滲透測試,或者是執行實際惡意軟體的嘗試,並不是有針對性的攻擊行為。
儘管如此,使用無檔案技術以及將網路通訊隱藏在DNS查詢之中的這兩點特性,使得這種惡意軟體本質上類似於複雜的真實攻擊。同時,它還證明了Windows Defender ATP動態防護功能的有效性。
在之前的文章( https://cloudblogs.microsoft.com/microsoftsecure/2017/12/04/windows-defender-atp-machine-learning-and-amsi-unearthing-script-based-attacks-that-live-off-the-land/ )中,我們已經分析了這些功能是如何抵禦KRYPTON攻擊和其他一些高階惡意軟體的。
三、無檔案攻擊的發展趨勢
消除對檔案的需求,是攻擊者的下一個努力目標。目前,反病毒解決方案在檢測惡意可執行檔案的領域已經非常有效。通過實時保護功能,每個磁碟上新增的檔案都能被及時地檢測。此外,檔案活動也留下了取證分析所需要的痕跡。正因如此,為了防範現有的檢測和取證手段,越來越多的惡意軟體都在致力於採用無檔案的攻擊方式。
站在更高的一個位置,無檔案惡意軟體直接在記憶體中執行其Payload,而無需將可執行檔案首先投放在磁碟上。這與傳統惡意軟體不同,傳統惡意軟體的Payload總是需要一些初始可執行檔案或DLL來執行其任務。一個常見的例子就是Kovter惡意軟體,它將可執行的Payload完全儲存在登錄檔項之中。無檔案讓攻擊者改變了不得不依賴於物理檔案的限制,並且能有效增強隱蔽性和永續性。
對於攻擊者來說,如何能進行一次無檔案攻擊是一個挑戰。一個問題就是,如果沒有檔案,那麼如何來執行程式碼?實際上,攻擊者通過感染其他元件的方式找到了這個問題的答案,惡意內容可以在其他元件的環境中實現執行,這些元件通常是合法的工具,預設情況下就存在於計算機上,它們的功能可以被濫用,以完成惡意操作。
這樣的技術通常被稱為“living off the land”,因為惡意軟體僅使用了作業系統中已有的資源。一個例子是Trojan:Win32/Holiks.A惡意軟體對mshta.exe工具的濫用:

惡意指令碼僅駐留在命令列中,它從登錄檔項載入並執行後續程式碼部分。整個執行過程,都發生在mshta.exe的上下文中。該程序是一個正常的可執行檔案,並且通常被視為是作業系統中的合法元件。除此之外,其他類似的工具,例如cmstp.exe、regsvr32.exe、powershell.exe、odbcconf.exe和rundll3.exe,都在被攻擊者濫用。當然,並不僅僅侷限於指令碼,這些工具可能也允許執行DLL和可執行檔案,甚至在某些情況下,會允許從遠端位置執行。
通過“Living off the land”,無檔案惡意軟體可以掩蓋它的行蹤,因為反病毒軟體沒有可以掃描的檔案,只會將惡意軟體所處的位置視為合法的程序。而Windows Defender ATP通過監視系統中的異常行為,或監視是否存在已知合法工具被惡意軟體所使用的特有模式,來突破這一挑戰。例如,識別為Trojan:Win32/Powemet.A!attk的惡意軟體檢測就是一種基於行為的通用檢測方式,旨在防止利用regsvr32.exe工具進行惡意指令碼的攻擊。

四、無檔案的本質
所謂“無檔案”,表示不存在於檔案中的威脅,例如僅存在於計算機記憶體中的後門。但是,這一定義還沒有被普遍接受。這一名詞正在被廣泛使用,有時還被用於描述依賴檔案操作的惡意軟體。在Sharpshooter示例中,儘管Payload本身是無檔案的,擔起入口點依賴於需要在目標計算機上投放並執行的指令碼,但這也被稱之為無檔案攻擊。
考慮到一條完整的攻擊鏈包括執行、持久化、資訊竊取、橫向移動、與C&C的通訊等多個階段,而在攻擊鏈中的某個部分可能是無檔案的,而其他部分可能涉及到某種形式的檔案系統。
為了對這個名詞進行更好的區分,我們將無檔案威脅分為下面幾個不同的類別。

我們可以通過它們的入口點(即執行和注入、漏洞利用、硬體)、入口點的形式(例如檔案、指令碼等)和感染源(例如Flash、Java、文件等)對無檔案威脅進行分類。
根據上述分類原則,我們可以根據威脅在被感染主機上留下痕跡的多少,來將無檔案威脅分為三類。
型別I:沒有進行任何檔案活動。完全無檔案的惡意軟體永遠不會在磁碟上寫入檔案。
型別II:沒有將檔案寫入磁碟,但間接地使用了一些檔案。惡意軟體還可以通過其他方式在計算機上以無檔案的方式存在,不直接在檔案系統中寫入,但有可能會間接使用檔案。
型別III:為了實現無檔案的永續性,需要一些檔案。某些惡意軟體可以具有無檔案永續性,但執行是需要依賴於檔案的。
在描述了大類之後,接下來我們就能夠深入瞭解細節,並對被感染主機進行詳細的劃分。有了全面的分類,我們才能夠覆蓋無檔案惡意軟體的全景,從而有助於我們研究和開發新的保護功能。這些新功能可以緩解攻擊,並確保惡意軟體不會佔據上風。
1、漏洞利用方式:
(1)基於檔案(型別III,可執行檔案、Flash、Java、文件);
(2)基於網路(型別I);
2、硬體:
(1)基於裝置(型別I,網絡卡、硬碟);
(2)基於CPU(型別I);
(3)基於USB(型別I);
(4)基於BIOS(型別I);
(5)基於管理程式(型別I);
3、執行或注入:
(1)基於檔案(型別III,可執行檔案、DLL、連結檔案、計劃任務);
(2)基於巨集(型別III,Office文件);
(3)基於指令碼(型別II,檔案、服務、登錄檔、WMI庫、Shell);
(4)基於磁碟(型別II,引導記錄)。
有關這些類別的詳細說明和示例,請參考: https://docs.microsoft.com/en-us/windows/security/threat-protection/intelligence/fileless-threats 。
五、使用下一代防護擊敗無檔案惡意軟體
基於檔案的檢測方式無法防範無檔案惡意軟體,因此Windows Defender ATP中的反病毒功能使用了基於動態行為的防禦層,並與其他Windows的技術相結合,從而在執行時實現對威脅活動的檢測與終止。
Windows Defender ATP的下一代動態防禦能有效保護使用者免受無檔案惡意軟體日益複雜的攻擊。在此前的文章( https://cloudblogs.microsoft.com/microsoftsecure/2018/01/24/now-you-see-me-exposing-fileless-malware/ )中,我們曾經介紹了一些與無檔案攻擊相關的攻防技術以及解決方案。我們以基於檔案的掃描方法作為模型,不斷演變,最終形成了基於行為的檢測模型,實現對通用惡意行為的檢測,從而徹底消除攻擊。
5.1 AMSI
反惡意軟體掃描介面(AMSI)是一個開放的框架,應用程式可以使用它來請求對任何資料進行反病毒掃描。Windows在JavaScript、VBScript和PowerShell中廣泛使用了AMSI。此外,Office 365客戶端也集成了AMSI,使得防病毒軟體和其他安全解決方案能在執行過程中對巨集及其他指令碼進行掃描,從而檢查惡意行為。在上面的例子中,我們已經展現了AMSI是如何成為防禦無檔案惡意軟體的強大武器的。
Windows Defender ATP整合了AMSI,並使用AMSI的告警資訊進行防護,這些告警資訊對於混淆後的惡意程式碼非常有效,能夠阻止例如Nemucod這樣的惡意軟體活動。在最近的一次分析中,我們偶然發現了一些經過嚴重混淆的惡意指令碼。我們收集了三個不包含已有靜態惡意簽名的樣本,它們是一些幾乎無法識別的指令碼程式碼和二進位制的垃圾資料。

然而,在人工反混淆之後,我們看到這些樣本解碼後與一個已知的Downloader程式碼完全相同,是同一個.js 指令碼的Payload:

其Payload沒有進行任何混淆,非常容易被檢測到,但由於它沒有儲存到磁碟上,因此可以逃避基於檔案的檢測。但是,指令碼引擎能夠攔截Payload執行解碼的這一過程,並確保Payload能通過AMSI傳遞給已安裝的反病毒軟體進行檢查。Windows Defender ATP能夠發現真實的Payload,因為它會在執行過程中進行解碼,從而可以輕鬆識別已知的惡意軟體模式,並在攻擊造成任何損害之前及時阻止攻擊。
我們並沒有根據樣本中混淆的規律來編寫通用檢測演算法,而是根據行為日誌去訓練ML模型,並編寫啟發式檢測以通過AMSI捕獲到解密後的指令碼。結果證明是有效的,在兩個月的時間內,我們捕獲到大量新型變種和未知變種,保護近兩千臺主機,而傳統的檢測方法往往不會那麼有效。
通過AMSI 捕獲的Nemucod.JAC攻擊活動:

5.2 行為監控
Windows Defender ATP的行為監控引擎為無檔案惡意軟體提供了額外的檢測方式。行為監控引擎會過濾出可疑的API呼叫。然後,檢測演算法可以將使用特定API序列的動態行為與特定引數進行匹配,從而阻止發生已知惡意行為的程序。行為監控不僅僅適用於無檔案惡意軟體,也適用於傳統的惡意軟體,原因在於其相同的惡意程式碼庫不斷被重新打包、重新加密和重新混淆。
事實證明,行為監控有效阻止了通過DoublePulsar後門分發的WannaCry,這一惡意軟體可歸類為第I類無檔案惡意軟體。儘管WannaCry二進位制檔案的幾個變種都是在大規模攻擊中釋出的,但勒索軟體的行為還是保持不變,因此Windows Defender ATP反病毒功能也可以對新版本的勒索軟體進行阻止。
行為監控對於“Living off the land”的無檔案攻擊非常有效。Meterpreter的PowerShell反向TCP Payload就是一個例子,它可以在命令列上執行,並且能夠為攻擊者提供PowerShell會話方式。
Meterpreter可能生成的命令列:

針對這個攻擊,我們無法掃描檔案,但通過行為監控,Windows Defender ATP可以通過惡意軟體所需的特定命令列來監測PowerShell程序,並阻止此類攻擊。
檢測PowerShell反向TCP Payload的情況:

除了按照程序檢視事件之外,行為監控功能還可以跨多個程序聚合事件。即使它們通過從一個程序到另一個程序的程式碼注入(不僅僅是父子程序)之類的技術實現連線,該功能也可以成功檢測到。此外,它可以保持並協調不同元件之間的安全訊號共享(例如終端檢測和響應),並通過分層防禦的其他機制觸發保護。
跨多個程序的行為監控,不僅僅能有效防禦無檔案惡意軟體,它也是通常用來捕獲攻擊技術的工具。舉例來說,Pyordono.A是基於多程序事件的檢測,目的在於阻止嘗試執行cmd.exe或powershell.exe的指令碼引擎(JavaScript、VBScript、Office巨集)帶有可疑引數。Windows Defender ATP的這一演算法可保護使用者免受多個惡意活動的影響。
Pyordono.A在野外檢測的統計資料:

近期,我們發現Pyordono.A的檢測數量突然增加,達到了高於平均值的水平。針對這一情況,我們開展了調查,最終發現一個影響範圍廣泛的惡意活動,該惡意活動在9月8日到9月12日期間,針對義大利的使用者,使用了惡意Excel進行攻擊。

該文件中包含惡意巨集,並使用社會工程學誘騙潛在的受害者來執行惡意程式碼。需要強調的是,近期我們在Office 365客戶端集成了AMSI,使得反病毒解決方案能在執行時掃描巨集,從而發現文件中的惡意內容。
經過混淆後的巨集程式碼嘗試執行經過混淆後的cmd命令,該命令會執行經過混淆後的PowerShell指令碼,最後投放Ursnif木馬。

其中,巨集使用了混淆處理來執行cmd命令,該命令的內容也被混淆。在cmd命令執行PowerShell指令碼後,該指令碼會依次下載資料,並傳遞Payload,向Ursnif進行資訊傳輸。通過多程序行為監控,我們使用通用檢測演算法成功檢測並阻止了針對義大利使用者的新型惡意活動。
5.3 記憶體掃描
Windows Defender ATP中的反病毒功能還使用記憶體掃描來檢測正在執行的程序其記憶體中是否存在惡意程式碼。即使惡意軟體可以在不使用物理檔案的情況下執行,它也需要駐留在記憶體中才能執行,因此可以通過對記憶體進行掃描來實現對惡意檔案的檢測。
舉例來說,根據報道,GandCrab已經屬於無檔案威脅。其Payload DLL是以字串形式編碼,然後通過PowerShell進行動態解碼和執行。DLL檔案本身不會在磁碟中儲存。通過記憶體掃描,我們可以掃描到正在執行程序的記憶體,從而檢查到有DLL正在隱蔽執行的勒索軟體常用模式。
正是由於記憶體掃描、行為監控以及其他動態防禦方式的結合,才幫助我們擊敗了Dofoil的大規模惡意活動。Dofoil是一個令人討厭的Downloader,它使用了一些複雜的技術來逃避檢測,例如程序鏤空(Process Hollowing, https://attack.mitre.org/wiki/Technique/T1093 ),這樣一來就允許惡意軟體在合法程序(例如explorer.exe)的上下文中執行。直到現在,記憶體掃描還能檢測到Dofoil的活動。
針對Dofoil Payload的檢測:

記憶體掃描是一個多功能的工具,當在執行過程中發現可疑API或可疑行為時,Windows Defender ATP的反病毒功能會在關鍵位置觸發記憶體掃描,從而提升發現解碼後Payload的可能性,並且這一發現的時間點往往是在惡意軟體開始執行之前。每天,記憶體掃描這一功能都在保護數千臺主機免受Mimilkatz和WannaCry等惡意軟體的威脅。
5.4 引導扇區保護
通過Windows 10“受控資料夾訪問”(Controlled Folder Access),Windows Defender ATP不允許對引導扇區進行寫入操作,從而防止了Petty、BadRabbit和Bootkits使用的危險無檔案攻擊方式。引導感染技術適用於無檔案威脅,因為它們可以允許惡意軟體駐留在檔案系統之外,並在載入作業系統之前獲得對主機的控制。
使用Rootkit技術,可以使惡意軟體具有相當高的隱蔽性,並且極難檢測和刪除。通過受控資料夾訪問技術,可以有效減少攻擊面,從而將這一整套感染技術徹底拒之門外。
受控資料夾訪問能阻止Petya對引導扇區的感染:

5.5 Windows 10的S模式:自身可以防範無檔案攻擊
在S模式下的Windows 10自帶一組預先配置好的限制和策略,可以保護系統免受絕大多數無檔案技術(通常是惡意軟體)的攻擊。在其啟用的安全功能中,以下功能對於無檔案威脅非常有效:
1、針對可執行檔案:僅允許Microsoft Store中經過Microsoft驗證的應用程式執行。此外,Device Guard提供使用者模式程式碼完整性(UMCI)以防止載入未經簽名的二進位制檔案。
2、針對指令碼:不允許執行指令碼引擎(包括JavaScript、VBScript和PowerShell)。
3、針對巨集:Office 365不允許在來自Internet的文件中執行巨集(例如在組織外部的電子郵件附件中下載的文件)。
4、針對漏洞利用:Windows 10在S模式下也可以使用漏洞利用保護和攻擊面減少規則。
有了上述這些限制,S模式下的Windows 10已經具有強大的保護,能夠消除無檔案惡意軟體所使用的關鍵攻擊向量。
六、總結
隨著反病毒解決方案不斷提升對惡意檔案的檢測率,惡意軟體如今自然在朝著使用盡可能少的檔案這一方向去發展。儘管在過去幾年,無檔案技術只用於複雜的網路攻擊,但隨著技術的提升,近期它們也普遍出現在普通的惡意軟體中。
Microsoft針對目前安全現狀,積極監控態勢,同時開發各種保證Windows安全性並能夠減輕威脅的解決方案。採用了通用的檢測方法,能夠有效抵禦各種威脅。此外,通過AMSI、行為監控、記憶體掃描和引導扇區保護,甚至可以檢查經過嚴重混淆後的威脅。通過雲平臺上機器學習技術,能夠及時針對新出現的威脅實現防護能力的擴充套件。