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