釋放Rootkit的無文件型宏惡意程序分析
介紹
正當(dāng)海灣合作委員會(huì)(GCC,Gulf Cooperation Council)成員國疲于應(yīng)付Shamoon惡意軟件時(shí),他們的服務(wù)器又遭受了一種全新的垃圾郵件的攻擊。這種VB宏形式惡意文檔看起來是像是經(jīng)過全新編寫或改造的,至少在本文成稿時(shí),還沒在任何地方發(fā)現(xiàn)它的活動(dòng)蹤跡。
有多個(gè)GCC成員國組織收到過幾封嵌有惡意文檔附件的垃圾郵件,該文檔能夠躲避所有的安全檢測并成功投遞到受害者收件箱中,一個(gè)樣本信息如下圖所示:
即使不打開該文檔,通過文檔的屬性信息我們還是可以猜測出它是一份惡意文件。文檔屬性信息如下圖:
打開文檔后,Word提示文檔宏已經(jīng)被禁用,而文檔內(nèi)容則誘騙用戶啟用Word宏功能,如下圖:
惡意文檔分析
我們直接跳到宏代碼分析部分:
其中“Document_Open ()”函數(shù)使得宏腳本在用戶打開文檔時(shí)就會(huì)自動(dòng)運(yùn)行。
當(dāng)我們對代碼進(jìn)行靜態(tài)分析時(shí),我們發(fā)現(xiàn)一些有用的代碼片段,細(xì)查這些片段,可以看到一些經(jīng)過編碼的字符串會(huì)被傳遞給“RraiseeventR”函數(shù),返回結(jié)果會(huì)存放在另一個(gè)變量中。
我們還可以看到許多這樣的變量,而“RraiseeventR”函數(shù)往往一同出現(xiàn)。因此我們猜測函數(shù)與解密流程有關(guān)。
“RraiseeventR”函數(shù)的部分代碼如下所示:
經(jīng)過進(jìn)一步的靜態(tài)分析,我們可以發(fā)現(xiàn)所有的變量會(huì)拼接匯聚起來。腳本調(diào)試的主要優(yōu)點(diǎn)就在于可以利用代碼自身來對編碼部分進(jìn)行解碼或解密。
對這些變量值進(jìn)行解碼后,它們的功能也逐步清晰起來。整體看來,它們應(yīng)該是PowerShell腳本,其中還包含“URL”信息。
所有的變量拼接起來形成“inEmptyMe”變量,內(nèi)容是一個(gè)完整的PowerShell腳本。
將PowerShell腳本從變量中提取出來,規(guī)范化格式以便閱讀。分析該P(yáng)owerShell代碼可知,其功能是文件的下載執(zhí)行。
進(jìn)一步分析的話,我們還以發(fā)現(xiàn)代碼中有個(gè)潛在的策略,能夠繞過UAC及其他檢測。
代碼工作過程分析如下:
1) 隱式調(diào)用powershell.exe,進(jìn)行變量的賦值工作。$wscript變量指向WScript.Shell,用于運(yùn)行帶參數(shù)的shell命令;
2)定義$webclient變量,用來從給定的URI上傳或下載數(shù)據(jù)。每個(gè)web client調(diào)用可通過web請求類來實(shí)現(xiàn),如“DownloadFile”類(比如WebClient.DownloadFile 或WebClient.UploadFile);
3)定義$random變量用來產(chǎn)生1到65535之間的隨機(jī)數(shù);
4)定義$urls變量,指向一或多個(gè)可執(zhí)行文件的惡意網(wǎng)址。這代表腳本可作為下載器,執(zhí)行其他文件。
5)下載文件被重命名為隨機(jī)數(shù)字字符串,以.exe后綴名結(jié)尾,保存在“temp“文件夾中。
6)定義$hkey變量,值為“HKCU\Software\Classes\mscfile\shell\open\command“。
7)接下來,腳本訪問指定的URL,下載可執(zhí)行文件,按步驟5)重命名并保存到臨時(shí)文件夾中。
至此,該P(yáng)owerShell腳本使用的策略已躍然紙上,也就是使用無文件形式的UAC繞過方法,利用注冊表獲得系統(tǒng)最高權(quán)限。
仔細(xì)研讀代碼后,讀者心里可能會(huì)有兩個(gè)問題:
1)為什么腳本要修改注冊表“HKCU\Software\Classes\mscfile\shell\open\command“鍵值,將可執(zhí)行惡意文件路徑添加該鍵值中?
2)為什么腳本需要利用“eventvwr.exe“?
其實(shí)這兩者之間存在很大的關(guān)聯(lián)性。讓我們將視角聚焦到時(shí)間處理器(event viewer)以及該注冊表鍵值上。
打開注冊表讀取該鍵值,我們可以看到鍵值指向了“mmc.exe“(Microsoft Management微Console,軟管理控制臺(tái))的所在路徑。
“mmc.exe“用來打開.msc文件(Microsoft Saved Consoles),比lusrmgr.msc、eventvwr.msc等。
通常我們運(yùn)行eventvwr.exe時(shí),它首先會(huì)訪問注冊表“HKCU\Software\Classes\mscfile\shell\open\command“鍵值,詢問mmc.exe所在地址。
不幸的是,查詢結(jié)果是值不存在(NAME NOT FOUND)。
在注冊表中,“HKEY_CLASSES_ROOT“是”HKEY_LOCAL_MACHINE\SOFTWARE\Classes“和”HKEY_CURRENT_USER\Software\Classes“兩者的結(jié)合。
因此,當(dāng)eventvwr.exe無法從HKCU中獲取該值時(shí),它會(huì)立刻查詢HKCR中對應(yīng)的鍵值,并且在第二次查詢時(shí)成功獲取該值。如下所示:
eventvwr.exe通過注冊表啟動(dòng)mmc.exe,mmc再通過GUI圖形界面向用戶呈現(xiàn)eventvwr.msc,如下所示:
此外,查看eventvwr.exe的manifest信息,可以發(fā)現(xiàn)它以最高執(zhí)行權(quán)限運(yùn)行,并且會(huì)自動(dòng)提升運(yùn)行權(quán)限,如下圖所示:
現(xiàn)在回到我們的惡意樣本分析工作,該惡意PowerShell腳本篡改該HKCU鍵值,將其修改為已下載的惡意可執(zhí)行文件路徑,然后使用eventvwr.exe觸發(fā)惡意程序的運(yùn)行。
該過程最終導(dǎo)致惡意程序得以借助事件查看器以最高權(quán)限運(yùn)行。
我們允許該文檔的宏功能,復(fù)現(xiàn)以上分析過程。
如我們預(yù)期,Power Shell首先被觸發(fā),從遠(yuǎn)程主機(jī)下載惡意程序,以隨機(jī)名保存在臨時(shí)目錄中,通過eventvwr和mmc運(yùn)行該惡意程序,如下圖所示:
我們還可以看到惡意軟件正以高權(quán)限運(yùn)行,軟件的任何操作也會(huì)運(yùn)行在高權(quán)限狀態(tài)下。
至此,惡意文檔的使命達(dá)成,將指揮權(quán)交給所下載的惡意軟件。
簡單小結(jié)一下,惡意文檔感染后,通過PowerShell腳本下載另一個(gè)惡意軟件,通過事件查看器和MMC注冊表鍵值成功繞過UAC限制,以高權(quán)限運(yùn)行。
惡意軟件分析
經(jīng)過初步分析,我們發(fā)現(xiàn)惡意軟件具有高超的環(huán)境檢測功能,可以檢測虛擬機(jī)、調(diào)試器和其他監(jiān)控工具是否存在。同時(shí),它也是一個(gè)Rootkit形式的信息竊取工具。
惡意軟件運(yùn)行后,會(huì)釋放一個(gè)批處理腳本,當(dāng)軟件檢測到自身正在被分析時(shí),腳本會(huì)進(jìn)行自刪除操作,防止被取證分析。腳本釋放在軟件運(yùn)行的當(dāng)前臨時(shí)目錄中,同樣也是以高權(quán)限運(yùn)行。
腳本內(nèi)容如下:
惡意軟件將一個(gè)vb腳本文件釋放到啟動(dòng)文件夾中,以達(dá)到本地持久化目的。每次機(jī)器重啟時(shí),惡意軟件會(huì)借由該腳本重新運(yùn)行。
利用調(diào)試器分析惡意軟件,可以從中找到一些有趣的字符串,比如“Welcome to China!”、“Progman”等。軟件采用了結(jié)構(gòu)化異常處理機(jī)制(Structured Exception handler)來防止被逆向分析。
此外,惡意軟件使用了某些防分析的API調(diào)用方法,包括GetTickCount、IsDebuggerPresent、CreateToolhelp32Snapshot、FindWindowA等。后續(xù)可進(jìn)一步深入分析該惡意軟件的工作過程。
總結(jié)
惡意軟件的以上所有行為僅在用戶允許文檔運(yùn)行宏時(shí)才會(huì)發(fā)生,這也是安全公司和安全顧問始終在討論惡意軟件防范中培養(yǎng)“用戶意識(shí)”的原因。
現(xiàn)在越來越多的垃圾郵件使用惡意文件、嵌入宏或OLE對象的惡意文檔開展攻擊,Shamoon APT的第三波垃圾郵件攻擊行為也已見諸報(bào)道。
培養(yǎng)“用戶意識(shí)”后,我們還可以在端點(diǎn)部署某些小型安全措施,比如禁止臨時(shí)文件夾中的任意文件運(yùn)行,就可以防止很多這種類型的感染。