導語:FireEye研究人員探討了綜合使用RIG EK與各類漏洞利用來攻擊終端的技術,展現了NSIS Loader如何利用不爲人知的PROPagate進程注入技術來規避安全產品。html
1、介紹shell
經過FireEye動態威脅情報(DTI),咱們觀察到RIG漏洞利用工具包(EK)增添了一個新功能代碼:使用PROPagate注入技術來注入、下載並執行Monero礦工(相似的活動已經被Trend Micro報告)。除了利用不爲人知的注入技術以外,攻擊鏈還有一些其餘有趣的特點,咱們將在文中談到。數組
2、攻擊鏈安全
攻擊鏈始於用戶訪問受感染網站時,其iframe中將加載RIG EK登陸頁面。RIG EK使用各類技術來分發NSIS(Nullsoft腳本安裝系統)Loader,該Loader利用PROPagate注入技術將shellcode注入explorer.exe。shellcode執行下一個有效載荷,下載並執行Monero礦工。攻擊鏈的流程圖如圖1所示。服務器
圖1:攻擊鏈流程圖網絡
3、Exploit Kit 分析app
當用戶訪問使用iframe注入的受感染站點時,iframe會加載登錄頁。圖2顯示了注入受感染網站的iframe。函數
圖2:注入的iframe工具
登錄頁面包含三個不一樣的JavaScript代碼片斷,每一個片斷使用不一樣的技術來分發有效載荷。這些都不是新技術,因此咱們只會簡要介紹一下。網站
1. JavaScript 1
第一個JavaScript有一個函數fa,它返回一個將使用execScript函數執行的VBScript,如圖3中的代碼所示。
圖3:JavaScript 1代碼片斷
VBScript利用CVE-2016-0189,下載有效載荷並使用圖4中所示的代碼片斷執行。
圖4:VBScript代碼片斷
2. JavaScript 2
第二個JavaScript包含一個函數,該函數將獲取其餘JavaScript代碼,並使用圖5中所示的代碼片斷將此腳本代碼附加到HTML頁面。
圖5:JavaScript 2代碼片斷
新附加的JavaScript利用CVE-2015-2419,JSON.stringify中的漏洞。該腳本經過在圖6所示的變量中存儲漏洞利用部分,混淆對JSON.stringify的調用。
圖6:使用變量進行混淆
使用這些變量,JavaScript會調用帶有錯誤格式參數的JSON.stringify,觸發CVE-2015-2419,從而致使本機代碼執行,如圖7所示。
圖7:調用JSON.Stringify
3. JavaScript 3
第三個JavaScript包含添加其它JavaScript的代碼,相似於第二個JavaScript。這個額外的JavaScript添加了一個利用CVE-2018-4878的Flash對象,如圖8所示。
圖8:JavaScript 3代碼片斷
一旦利用成功,shellcode會調用命令行來建立一個文件名爲u32.tmp的JavaScript,如圖9所示。
圖9:WScript命令行
這個JavaScript文件是使用WScript啓動的,它下載下一階段有效載荷並使用圖10中的命令行執行它。
圖10:惡意命令行
4、Payload分析
在本次攻擊行動中,攻擊者使用了多種有效載荷和反分析技術來繞過度析環境。圖11顯示了完整的惡意軟件活動流程圖。
圖11:惡意軟件活動流程圖
1.NSIS Loader (SmokeLoader)分析
RIG EK下載的第一個有效載荷是一個名爲SmokeLoader的已編譯的NSIS可執行文件。除了NSIS文件以外,有效載荷還有兩個組件:DLL和數據文件(在咱們的分析案例中名爲'kumar.dll'和'abaram.dat')。該DLL有一個由NSIS可執行文件調用的導出函數。該導出函數具備讀取和解密數據文件的代碼,數據文件生成第二階段有效載荷(可移植的可執行文件)。
以後,DLL在SUSPENDED_MODE中下自我複製(dropper),並使用進程挖空注入解密的PE。
2.注入代碼分析(第二階段Payload)
第二階段的有效載荷是一個高度混淆的可執行文件。它由解密、執行、從新加密的例程組成。
在入口點,可執行文件包含檢查操做系統主要版本代碼,主版本從Process Environment Block(PEB)中提取。若是操做系統版本值小於6(在Windows Vista以前),則可執行文件自行終止。它還包含檢查可執行文件是否處於調試模式的代碼,調試模式從PEB的偏移0x2中提取。若是設置了BeingDebugged標誌,則可執行文件會自行終止。
惡意軟件還經過打開註冊表項HKLM\SYSTEM\ControlSet001\Services\Disk\Enumwith(值爲0)來實施Anti-VM檢查。
它檢查註冊表值數據是否包含這些字符串:vmware,virtual,qemu或xen。這些字符串中的每個都表明虛擬機。
運行反分析和環境檢查後,惡意軟件執行核心代碼開始惡意活動。
惡意軟件使用PROPagate注入技術在目標進程中注入和執行代碼。PROPagate注入技術相似於SetWindowLong。在該技術中,惡意軟件使用SetPropA函數修改UxSubclassInfo的回調並致使遠程進程執行惡意代碼。
此代碼注入技術僅適用於完整性級別較低或相同的進程。惡意軟件首先檢查當前正在運行的進程的完整性是否爲中等完整性級別(2000,SECURITY_MANDATORY_MEDIUM_RID)。圖12顯示了代碼片斷。
圖12:檢查當前進程的完整性級別
若是進程高於中等完整性級別,則惡意軟件會繼續進行。若是該進程低於中等完整性級別,則惡意軟件將以中等完整性從新生成自身。
惡意軟件建立文件映射對象並將dropper文件路徑寫入其中,並經過注入的代碼訪問相同的映射對象,來讀取dropper文件路徑並刪除dropper文件。映射對象的名稱源自系統驅動器的卷序列號和帶有硬編碼值的XOR操做(圖13)。
File Mapping Object Name = 「Volume Serial Number」 + 「Volume Serial Number」 XOR 0x7E766791
圖13:建立文件映射對象名稱
而後,惡意軟件使用異或解密第三階段有效載荷,並使用RTLDecompressBuffer對其進行解壓縮。第三階段有效載荷也是一個PE可執行文件,但做者修改了該文件的頭部以免在內存掃描中將其檢測爲PE文件。數據解密後,修改幾個頭字段後,能夠獲得正確的可執行頭(圖14)。
圖14:沒有頭部(左)和有頭部(右)的可執行文件
解密有效載荷後,惡意軟件將攻擊注入的shell進程explorer.exe。它使用GetShellWindow和GetWindowThreadProcessId API來獲取shell窗口的線程ID(圖15)。
圖15:獲取shell窗口線程ID
惡意軟件將解密的PE注入並映射到遠程進程(explorer.exe)中。它還會注入shellcode,用於在SetPropA中配置回調函數。
在將有效載荷注入到目標進程以後,使用EnumChild和EnumProps函數來枚舉shell窗口的屬性列表中的全部條目,並將其與UxSubclassInfo比較。
找到shell窗口的UxSubclassInfo屬性後,保存句柄信息並經過SetPropA使用它設置回調函數。
SetPropA有三個參數,其中第三個是數據。回調過程地址存儲在從數據開始的偏移量0x14處。惡意軟件將回調地址修改成注入的shellcode地址(圖16)。
圖16:修改回調函數
而後,惡意軟件將特定消息發送到窗口以執行與UxSubclassInfo屬性相對應的回調過程,這樣shellcode就會執行。
shellcode包含使用CreateThread執行注入的第三階段有效載荷入口點地址的代碼。而後它重置SetPropA的回調,該回調在PROPagate注入期間被惡意軟件修改。圖17顯示了注入shellcode的代碼片斷。
圖17:注入shellcode的彙編視圖
3.第三階段Payload分析
在執行以前,惡意代碼會進行反分析檢查以確保系統中沒有運行分析工具。它建立兩個無限運行的線程,其中包含用於實施反分析檢查的代碼。
第一個線程使用CreateToolhelp32Snapshot枚舉進程並檢查一般用於分析的進程名稱。它使用自定義操做從進程名稱生成DWORD哈希值,並將其與硬編碼的DWORD值數組進行比較。若是生成的值與數組中的任一值匹配,則會終止相應的進程。
第二個線程使用EnumWindows枚舉窗口。它使用GetClassNameA函數來提取與相應窗口關聯的類名稱。像第一個線程同樣,它使用自定義操做從類名生成DWORD哈希值,並將其與硬編碼的DWORD數組進行比較。若是生成的值與數組中的任何值匹配,則會終止與相應窗口相關的過程。
除了這兩種反分析技術以外,它還經過訪問URL:www.msftncsi[.]com/ncsi.txt檢查網絡鏈接。
爲了在系統中保持持久性,惡意軟件會在%startup%文件夾中安裝計劃任務和快捷方式文件。計劃任務命名爲「Opera Scheduled Autoupdate {GetTickCount()的十進制值}」。
而後與惡意URL進行通訊如下載最終的有效載荷,這是一個Monero礦工。它使用來自計算機名稱和卷信息的Microsoft CryptoAPI建立MD5哈希值,並在POST請求中將哈希值發送到服務器。圖18顯示了網絡通訊。
圖18:網絡通訊
最後惡意軟件從服務器下載最終的有效載荷——Monero礦工,並將其安裝在系統中。
5、總結
雖然咱們觀察到Exploit Kit活動一直在減小,但攻擊者並未徹底放棄它們。在這篇博文中,咱們探討了綜合使用RIG EK與各類漏洞利用來攻擊終端。此外,咱們還展現了NSIS Loader如何利用不爲人知的PROPagate進程注入技術,規避安全產品。