原文:VB2016-AnandMenrige
翻譯:Jirairya (Mottoin投稿)
博客:b404.xyz

摘要

惡意軟件作者可以在不將文件寫入磁盤的情況下損害計算機,這種技術可以在逃脫文件掃描軟件檢測威脅性的同時,仍然保持持久性損害。

本文將闡述不同的無文件感染方法,以及一種經典的使用無PE文件進行欺騙點擊進而執行無文件感染的新手法。

傳統的惡意軟件隱藏于磁盤上的文件中,為了進行長期隱藏感染,注冊表運行密鑰鏈接到此文件。 使用無文件感染的惡意程序在受感染的計算機上,不會作為普通文件存在,反而會以腳本形式存在于計算機注冊表的子項中,如Windows PowerShell,VBScript、JavaScript。每次Windows啟動時都會調用注冊表中的payload。

我們所見的一鍵無文件感染技術常使用腳本語言實現,比如JavaScript。它一般借助.hta文件在計算機上實現,.hta文件將JavaScript payload放入注冊表子項,每次Windows啟動時,通過調用以下命令來觸發JavaScript代碼:

rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";alert('payload');

然后JavaScript代碼從另一個子項讀取和解碼加密的數據。該數據將payload注入存儲器。每隔幾分鐘,payload就會檢查其注冊表項。如果注冊表子項內容被刪除,則該payload又會重新創建,從而使感染持久進行。

我們所知第一個使用無文件感染技術切造成大量危害的是2014年出現的Trojan.Poweliks [1]。隨著這類木馬技術的提高,許多其他類似的木馬也隨之出現,其中兩個代表性的就是Trojan.Bedep [2]Trojan.Kotver [3]

這篇文章將闡述和比較惡意軟件作者現今使用無文件感染的最常見方法,討論一鍵無文件感染的相關內容。

引言

傳統上,AV產品使用惡意程序中發現的字符串或代碼簽名來檢測惡意程序。惡意程序有幾種方法可以逃脫AV產品檢測,其中之一就是將惡意代碼放在內存中。Korplug[4]就是一個使用內存存放惡意代碼,逃脫檢測的例子。它的侵染鏈包含加密文件的解碼,在內存中加載可執行文件。這樣做,可以在AV產品掃描文件時,保護代碼。無文件類型感染在不同層面上實現文件不落地,硬盤上不會再有AV產品可以掃描的文件。即使惡意文件不在磁盤上,也可以持久侵害。

早期案例

引起研究人員注意的第一個無文件感染的惡意軟件是Trojan.Poweliks,發現于2014年。Poweliks不作為文件存在于磁盤上,而是僅持久駐留在注冊表中。[5]。Poweliks使用特殊的命名方式,隱藏在注冊表中,并一直使用CLSID劫持作為注冊表中的運行加載點。之后,還分析出Poweliks利用Microsoft Windows遠程權限提升漏洞(CVE-2015-0016)[6]攻陷并控制存在缺陷的網站。而另一個無文件惡意程序Trojan.Bedep也使用相同的零日漏洞達到攻擊目的。Bedep是一個僅存內存的下載器,與Poweliks有類似的編碼風格。從Poweliks惡意程序到Trojan.BedepTrojan.Kotver,這類木馬都采用了相同的技術手法。

如何工作

通常,當用戶訪問危險網站時,無文件惡意程序通過exploit kits(EK)實現攻擊。 Angler EK[7]是第一個無需在驅動器上寫入惡意程序而感染主機的EK,它提供shellcode,將無文件惡意程序注入到正在運行且易受攻擊的進程中,例如iexplore.exe。

另外無文件惡意程序也可以通過惡意程序下載器實現攻擊。通過惡意附件或垃圾郵件的惡意URL鏈接實現惡意程序下載器的下載,然后向磁盤寫入惡意程序,然后在將無文件惡意程序注入內存,接著自動刪除惡意程序。

無文件感染鏈的危險分析.jpg

一旦惡意程序注入到內存中,惡意程序會加載并加密自身的二進制組件。將加密后的惡意程序副本保存在注冊表中,然后創建另一個程序,該程序中有自啟動腳本(該腳本可能是VBScript,JavaScript或PowerShell腳本),負責解碼二進制組件并將其加載到內存中。

然后被解碼的二進制組件啟動,并作為“看門狗“ 監視其創建的相關注冊表項,負責接收惡意指令,控制C&C服務器。此惡意軟件的后門功能包括重新安裝注冊表項,下載和執行文件以及調用其他命令。其中下載的一個文件,在執行后會將ad-click模塊安裝到內存中。

使用該技術的著名惡意程序

Poweliks

Trojan.Poweliks在基于文件感染的Wowliks惡意程序上發展成一個基于注冊表感染的惡意軟件。且其有下載PowerShell應用程序的行為,所以被命名為Poweliks。它使用PowerShell腳本將“看門狗”的DLL從注冊表項注入到DLLHost.exe進程并運行,實現了持久存留。Poweliks的主要payload攻擊目的是向受感染的用戶進行廣告欺詐和勒索。

Bedep

由于編碼風格相似,且使用相同的CVE-2015-0016exploit,Trojan.Bedep被認為與Poweliks有很大關聯,但并沒有確鑿證據指出這兩個惡意程序是出自同一個作者。經分析,Bedep會下載并安裝Poweliks以及其他廣告欺詐惡意軟件。Bedep有32位和64位版本,通過改變自身文件屬性達到偽裝。這種惡意程序主要攻擊目的是將受感染的計算機變成僵尸網絡。

Kotver

在出現Poweliks無文件感染技術之前,Kotver惡意程序變體為了逃避殺軟檢測,也會存在于注冊表中,只是像Poweliks一樣,下載一個PowerShell應用程序,但并沒有采用無文件感染,只是在沒網絡連接可用的情況下,它會基于文件感染,在磁盤上創建自己的副本。據分析,Kotver主要攻擊目的是勒索和實現銀行木馬。

無文件感染的預備知識

開始闡述了不同感染體使用的不同感染媒介,隨著深入,現在我們將討論一種新的感染體,它使用經典的一鍵點擊欺詐式手法[8]進行無文件感染。

首先,我們將逐個討論所有的單個組件,讓大家更易于理解一鍵無文件感染。

MSHTA.EXE

mshta.exe程序通過WebBrowser控件,使用最小的用戶界面(UI)運行受信任的HTML和腳本。

HTA

隨著時間推移,技術不斷發展提高,Windows中的一些技術已不再適用。但自Windows NT(1993年7月發布)以來,存在一種這樣強大的技術,并且仍然存在于Windows 10(2015年7月發布)),那就是HTML應用程序(HTA)。

HTA[9]是Microsoft Windows程序,其源代碼由HTML、動態HTML和Internet Explorer(IE)支持的腳本語言(如VBScript或JScript)組成。HTML用于生成用戶界面,腳本語言用于控制程序邏輯。HTA執行是沒有互聯網瀏覽器安全模型的限制,而且它作為一個“完全信任”的應用程序執行。HTA常用文件擴展名為.hta。

所有當前的Windows操作系統都支持HTA文件執行。HTA看起來像一個HTML文件,但它具有比HTML文件更高的權限。HTA文件執行需要mshta.exe,mshta.exe隨Internet Explorer一起安裝。Mshta.exe通過實例化Internet Explorer渲染引擎(mshtml)以及任何所需的語言引擎(如vbscript.dll)來執行HTA 。

HTAs為用戶提供了一種在充滿復選框、單選按鈕、下拉列表等具有其他Windows元素的圖形用戶界面(GUI)中加載腳本的方式。

但出于攻擊目的,HTA只不過是為腳本提供GUI的一種方式。正如我們所知,WSH和VBScript都沒有提供GUI元素,沒有復選框,沒有列表框等等。然而,Internet Explorer卻使用了所有這些元素,甚至更多。由于HTA和IE相互依存,用戶就可以利用所有這些GUI元素編寫系統管理腳本。

HTML文件和HTAs有多少相近?只要用戶將任意的HTML文件擴展名從.htm(或.html)更改為.hta,文件就成為HTA了。

IE的架構.jpg

為什么用戶不只是用HTML文件?

答案非常簡單:安全。理由就是,IE上有很多安全限制。而且用戶不希望使用重置他們配置且高權限運行的客戶端腳本。因此,許多系統管理腳本(如使用了WMI或ADSI的)在IE上運行會失敗,情況稍好點的,會顯示類似于以下內容的對話框: 運行腳本彈出對話框.jpg

每當用戶從HTML文件運行腳本時,都會顯示類似的對話框。這雖然使用友好,但絕對不是最好的用戶體驗。

相比之下,HTAs沒有IE那樣的安全限制,HTAs與IE運行的也是不同的進程。HTAs在mshta.exe進程中運行,而不是iexplore.exe進程中。與HTML頁面不同,HTAs可以運行客戶端腳本,并且可以訪問文件系統。除此之外,HTAs還可以運行用戶的系統管理腳本,包括使用WMI和ADSI。而且用戶的腳本運行正常,不會收到任何關于不安全的提示警告。

當然,這并不意味著HTAs可以隨便無視Windows安全機制,HTA也有自己的一些安全策略。例如,如果一個用戶沒有權限更改其他用戶的密碼,則在該用戶權限是不能使用腳本更改其他用戶的密碼,將該腳本放置在HTA中也沒什么用,該用戶仍然無法更改其他用戶的密碼。

不過,即使HTAs運行的進程不同于IE,但仍要使用Internet Explorer和IE對象模型,所以用戶可以執行IE中不允許的其他任務和運行IE中不允許的腳本。

有關HTAs和安全性的更多信息,請參見Microsoft Developer Network(MSDN)上的HTML Applications SDK頁面[11]

安全思考

當執行常規HTML文件時,它的執行也離不開Web瀏覽器的安全模型。也就是說,它的功能僅限于與服務器通信,操縱頁面的對象模型(通常用于驗證表單和創建有趣的視覺效果)和讀寫cookies。

另一方面,HTA作為完全受信任的應用程序運行,因此具有比普通HTML文件更多的權限(例如,HTA可以創建,編輯和刪除文件和注冊表項)。盡管如此,但查詢Active Directory仍可能會受到Internet Explorer Zone邏輯和相關錯誤消息的影響。

一鍵無文件感染

在分析文件感染及其感染媒介后,可知如果攻擊者使用非PE文件感染,常用的就是知名的感染媒介——一鍵點擊式欺騙(one-click fraud)。

一鍵點擊式欺騙并不新鮮,它已經存在了十多年,并且已經影響了大多數亞洲國家,最具代表性的是日本。通常情況下,一鍵式欺詐者通過誘騙用戶訂閱虛假的成人視頻服務來進行一鍵點擊欺詐攻擊,也有兩鍵、三鍵和四鍵點擊欺騙(甚至是零鍵點擊[12])。一鍵點擊欺詐的攻擊行為類似勒索軟件,它也會鎖定用戶的屏幕,并重復彈出窗口,直至用戶注冊、訂閱或支付一定金額后才會終止該惡意行為。

經分析可知,惡意程序攻擊者可能會將無文件感染和一擊欺詐混合在一起,從而創建一鍵無文件感染。簡而言之:

無文件感染+一擊點擊欺詐=一鍵無文件感染

內存感染

可以使用HTA文件創建一個ActiveX對象,然后該對象將JS Payload注入到運行注冊表項中。PowerShell和WSCRIPT(VBS)也可以實現同樣的功能。

攻擊流程.jpg

概念證明

下面所示代碼是一個存在于被攻擊服務器上HTA文件的源碼。假設一個感染情景,用戶被社工引誘或者是水坑攻擊而訪問某網站,然后該網站要求點擊運行或執行某個事件,一旦點擊執行,該事件將創建一個WScript ActiveX對象,然后創建運行注冊表項,使用rundll32彈出JS警告(對于POC)而進行更多其它操作。

/****************************POC*******************************************/

<html>
<head>
<title>RegTest</title>
<script language="JavaScript">
function writeInRegistry(sRegEntry, sRegValue)
{
   var regpath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\" + sRegEntry;
   var oWSS = new ActiveXObject("WScript.Shell");
   oWSS.RegWrite(regpath, sRegValue, "REG_SZ");
}

function readFromRegistry(sRegEntry)
{
   var regpath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\" + sRegEntry;        /*Payload injected in Run registry entry*/
   var oWSS = new ActiveXObject("WScript.Shell");    /*WASCRIPT ActiveX object created which is used to inject the Malicous JS in registry*/
   return oWSS.RegRead(regpath);
}
function tst()
{
   writeInRegistry("malware", "rundll32.exe javascript:\"\\..\\mshtml,RunHTMLApplication \";alert('payload'); "); /*Payload is the JS payload which does the real malicious stuff and it got watchdog, for keeping an eye over the registry entry which makes the infection persistent*/
   alert(readFromRegistry("malware"));
}
</script></head>
<body>

Click here to run test: <input type="button" value="Run" onclick="tst()"
</body>
</html>

/***************************POC end****************************************/

出于本文目的,選擇了Poweliks作為案例,再加上它能從運行注冊表項中釋放JS,用它作為例子是不二選擇。為了讓感染持續存在,它被注入到運行注冊表項,用戶重新啟動計算機,它又會自動重新注冊。(因為內存中的感染會在計算機重新啟動后消失.)

對于我們的POC,我們使用JS的Alert API演示(惡意攻擊者可能會有所不同),使用PowerShell或CSCRIPT也可以實現同樣的效果。分析了之前無文件感染行為,我們發現它具有一個“看門狗”模塊,它可以監控注冊表項,如果用戶刪除它,它也會重新創建注冊表項。

這種攻擊手法,可能會影響從Windows 95到Windows 10的所有Windows版本,因為所有版本都有預安裝IE,而隨附IE的WSCRIPT是執行此攻擊的唯一必需組件。

變體

以下可信應用程序也能達到同樣攻擊手段:

預防和解決

Symantec建議用戶遵守以下幾點,防止一鍵無文件感染攻擊:

  • 不要將HTA文件視為HTML文件
  • 動態檢測調用PowerShell,WSCRIPT,CSCRIPT,cmd,RUNDLL32或regserve32的獨立注冊表項
  • 必要時進行手動清楚卸載(步驟如下)。

手動清除

  1. 下載Microsoft的Process Explorer并執行。
  2. 重啟進入安全模式。
  3. 選擇父進程(惡意軟件注入的進程)并終止它(殺死進程樹)。
  4. 打開注冊表編輯器(運行 - > regedit.exe)。
  5. 在左側面板中,進入:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\
  6. 清理注冊表項。
  7. 關閉注冊表編輯器

AV 解決方法

反病毒產品有以下方法定位無文件感染體的路徑:

  1. 內存掃描
  2. 注冊表掃描
  3. 網絡掃描。

結語

出于易讀性,文章有所增、刪、改,若翻譯有問題可參考原文,自行修正。

原文地址在: https://www.virusbulletin.com/uploads/pdf/magazine/2017/VB2016-AnandMenrige.pdf

該文章在YouTube上的地址:https://www.youtube.com/watch?v=EIIFly_iR8Y,

PPT 地址為https://www.virusbulletin.com/uploads/pdf/conference_slides/2016/Anand_Menrige-vb-2016-One-Click-Fileless.pdf 。

CHXX大佬也說現在很多病毒都采用無文件感染技術,文件不落地,殺軟掃起來比較難。

由此可見,無文件感染是一種無痕跡的新型惡意攻擊,再結合一鍵點擊欺騙的攻擊手法,這類病毒造成的危害就會很大的。所以在瀏覽網頁和使用軟件的時候需謹慎。

參考

[1] Trojan.Poweliks. https://www.symantec.com/security_response/writeup.jsp?docid=2014-080408-5614-99.

[2] Trojan.Bedep. https://www.symantec.com/security_response/writeup.jsp?docid=2015-020903-0718-99.

[3] Trojan.Kotver. https://www.symantec.com/security_response/writeup.jsp?docid=2015-082817-0932-99.

[4] Camba, A. Unplugging Plugx Capabilities. Trend Micro Malware Blog. http://blog.trendmicro.com/trendlabs-security-intelligence/unplugging-plugx-capabilities.

[5] O'Murchu, L.; Gutierrez, F. The evolution of the fileless click-fraud malware Poweliks. Symantec Connect Blog. http://www.symantec.com/content/en/us/enterprise/media/security_response/whitepapers/evolution-of-poweliks.pdf.

[6] Microsoft Windows Remote Privilege Escalation Vulnerability (CVE-2015-0016). https://www.symantec.com/security_response/vulnerability.jsp?bid=71965.

[7] Kafeine. Angler EK: now capable of "fileless" infection. Malware Don't Need Coffee Blog. http://malware.dontneedcoffee.com/2014/08/angler-ek-now-capable-of-fileless.html.

[8] Anand, H. One-click fraudsters extend reach by learning Chinese. Symantec Connect Blog. http://www.symantec.com/connect/blogs/one-click-fraudsters-extend-reach-learning-chinese.

[9] Extreme Makeover: Wrap Your Scripts Up in a GUI Interface. Microsoft Technet. https://technet.microsoft.com/en-us/library/ee692768.aspx.

[10] Recreated from the Microsoft TechNet (2013) gallery – IE Architecture. https://gallery.technet.microsoft.com/IE-Architecture-3bc7c3fd/file/78635/1/IE%20Architecture.png.

[11] HTML Applications SDK. https://msdn.microsoft.com/en-us/library/ms536473(vs.85).aspx.

[12] Hamada, J. The rise of Japanese zero-click fraud. Symantec Connect Blog. http://www.symantec.com/connect/blogs/rise-japanese-zero-click-fraud.

[13] It's a Wrap! Windows PowerShell 1.0 Released! Windows PowerShell Blog. https://blogs.msdn.microsoft.com/powershell/2006/11/14/its-a-wrap-windows-powershell-1-0-released.

[14] Using the command-based script host (CScript.exe). Microsoft Technet. https://technet.microsoft.com/en-us/library/bb490887.aspx.

[15] WScript Object. Microsoft Developer Network. https://msdn.microsoft.com/en-us/library/at5ydy31(v=vs.84).aspx.


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/265/