標籤:

NrsMiner:一個構造精密的挖礦殭屍網路

0x1 前言

近日,360互聯網安全中心發現一個利用「永恆之藍」漏洞攻擊武器傳播的挖礦殭屍網路,該殭屍網路通過佔用殭屍機的CPU和GPU算力挖取門羅幣獲利。該殭屍網路的重要組成部分都由一個名為NrsDataCache的文件下發到每台殭屍機中,因此我們將其命名為「NrsMiner」。

經過上次WannaCry事件,很多機器已經修補或免疫了「永恆之藍」漏洞,該漏洞攻擊武器的威力已大不如前,但NrsMiner構造精密,能夠有效完成持久化、集中管理、自更新等多種功能,其危害仍不容小覷。

本文將對NrsMiner的結構進行詳細分析,並梳理NrsMiner殭屍網路的發展過程。

0x2 NrsMiner分析

NrsMiner由主控模塊、更新模塊、攻擊模塊和挖礦模塊四部分組成。每個模塊所涉及到的PE文件都包含32位和64位兩個版本以適應不同架構的操作系統。圖1展示了NrsMiner的整體結構。

圖1 NrsMiner整體結構

在NrsMiner中,主控模塊以服務的形式存在,負責其他模塊的啟動;更新模塊從控制端下載更新包NrsDataCache.tlb並對其他模塊進行更新;攻擊模塊負責對內網中的其他計算機和與本計算機進行連接的其他計算機進行「永恆之藍」漏洞攻擊;挖礦模塊負責挖取門羅幣。下文將逐一分析每個模塊。

主控模塊

主控模塊是殭屍網路的根基,負責調度其他模塊工作。NrsMiner的主控模塊vmichapagentsrv.dll作為服務「Hyper-V Access Protection Agent Service」的ServiceDll存在,同時該服務被加入netsvcs服務組中藉助svchost.exe啟動。圖2展示了「永恆之藍」32位payload x86.dll創建該服務並指定ServiceDll的代碼片段。

圖2 x86.dll創建該服務並指定ServiceDll的代碼片段

主控模塊每次執行時會刪除計算機中存在的NrsMiner的組成部分並結束相應進程,之後通過更新模塊下載新的文件並啟動相應進程,以使NrsMiner時刻保持最新狀態。圖3展示主控模塊刪除舊的NrsMiner組件並結束相應進程的代碼片段。

圖3 主控模塊刪除舊的NrsMiner組件並結束相應進程的代碼片段

完成舊組件的清理之後,主控模塊開始其主要工作。工作的第一步就是向控制端發送本機的打點數據,打點數據包括本機MAC地址、ip地址和計算機名稱,打點伺服器域名為vpp.jdi1diejs.club。圖4展示了主控模塊進行打點的代碼片段。

圖4 主控模塊進行打點的代碼片段

完成打點後,主控模塊從NrsDataCache.tlb中解壓提取出挖礦機程序hash,將其複製到system32或SysWOW64目錄下命名為TaskSyncHost.exe並啟動該程序進行挖礦。主控模塊根據處理器數目決定挖礦機所使用的線程數。表1展示了不同處理器數目對應的挖礦機所使用的線程數。

表1 不同處理器數目對應的挖礦機所使用的線程數

處理器數目線程數83124166其他等於處理器數目

表1

可見,NrsMiner有意壓低多核處理器環境下挖礦線程的數目,以此降低計算機出現異樣的可能性。NrsMiner的嚴謹不僅體現在這,同樣體現在其對挖礦機狀態的實時記錄和回傳。主控模塊會在啟動挖礦機時記錄挖礦機的狀態並回傳至控制端。表2展示了NrsMiner記錄挖礦機狀態時使用的狀態碼。

表2 NrsMiner記錄挖礦機狀態時使用的狀態碼

挖礦機狀態狀態碼結束舊挖礦機進程成功0啟動新挖礦機進程成功1結束舊挖礦機進程失敗2挖礦機程序文件不存在3啟動新挖礦機進程失敗4

表2

除了挖礦機外,主控模塊從控制端下載更新模塊組件taskhostex.exe,下載地址為dlr.noilwut0vv.club/d/msdownload/others/BtnProtocol.exe。關於更新模塊內容將在下文詳細說明。同樣,主控模塊還負責攻擊模塊的獲取和啟動,其從 NrsDataCache.tlb中提取出攻擊模塊程序文件spoolsv.exe並執行。

除了上述的功能外,我們還發現了主控模塊一個有趣的功能–主控模塊中嵌入一個基於mongoose的輕量級WebServer。區域網中其他計算機的主控模塊可以通過訪問該WebServer下載相應的組件。圖5展示了主控模塊中嵌入的WebServer初始化代碼片段,該`WebServer綁定的埠為26397。

圖5 主控模塊中嵌入的WebServer初始化代碼片段

WebServer主要提供下載NrsDataCache.tlb的功能。區域網中的其他計算機可以通過HTTP協議訪問WebServer進而下載NrsDataCache.tlb,而WebServer將處理來自其他計算機的HTTP請求。當NrsDataCache.tlb不存在時,WebServer將返回404狀態碼。通過將殭屍機轉化成為WebServer能夠方便區域網中不同計算機之間的文件傳輸與更新,下文提到的更新模塊就通過該方式進行殭屍網路組件的更新。圖6展示了WebServer處理HTTP請求的代碼片段。

圖6 WebServer處理HTTP請求的代碼片段

主控模塊以啟動器的身份指揮其他模塊進行工作,可以稱之為「殭屍網路的主心骨」。一個穩定、靈活的主控模塊是殭屍網路穩固自身並持續擴張的根本,而NrsMiner的主控程序就通過實時打點、新舊文件替換、模塊狀態反饋保證殭屍網路的穩定性,通過嵌入WebServer提高殭屍網路的靈活性。

攻擊模塊

攻擊模塊由兩部分組成,一部分是發起攻擊的spoolsv.exe,另一部分是執行攻擊的「永恆之藍」payload x86.dll和x64.dll。spoolsv.exe進行攻擊的流程如圖7所示。

圖7 spoolsv.exe進行攻擊的流程

攻擊執行前spoolsv.exe還會進行一次打點,打點內容包括本機ip地址,計算機名以及GPU型號。打點過後,spoolsv.exe從NrsDataCache.tlb提取「永恆之藍」攻擊組件crypt,該組件同樣是個壓縮包,解壓後是一套完備的「永恆之藍」漏洞攻擊武器。圖8展示了crypt解壓後的內容。

圖8 crypt解壓後的內容

其中,x86.dll和x64.dll就是「永恆之藍」漏洞攻擊payload的兩個版本。spoolsv.exe並不關注目標計算機中是否存在漏洞,而是直接啟動攻擊程序svchost.exe對區域網中的其他計算機和與本機連接的其他計算機進行攻擊。攻擊成功後將在目標計算機執行相應payload。

為了盡量減小payload的體積,NrsMiner並沒有直接將功能的執行交給payload,而是將payload綁定計算機的57220埠並監聽該埠。圖9展示了相應的代碼片段。

圖9 payload綁定埠並監聽該埠的代碼片段

而spoolsv.exe會向目標計算機57220埠發送NrsDataCache.tlb,目標計算機接收到NrsDataCache.tlb之後對其進行解壓,提取其中名為srv的文件,也就是主控模塊文件vmichapagentsrv.dll安裝服務,至此整個攻擊完成。圖10展示了spoolsv.exe向目標計算機57220埠發送文件的代碼片段。

圖10 spoolsv.exe向目標計算機發送文件的代碼片段

在進行攻擊時,攻擊模塊會結束掉任務管理器進程以減少自身被發現的可能。圖11展示了攻擊模塊結束任務管理器進程的相關代碼片段。

圖11 攻擊模塊結束任務管理器進程的相關代碼片段

攻擊模塊還會從log.oiwcvbnc2e.stream下載名為TaskhostServices.exe的文件並運行該文件。不過log.oiwcvbnc2e.stream已無法訪問,攻擊模塊無法成功下載該文件。

更新模塊

更新模塊負責NrsMiner組件的更新。NrsMiner從多個不同的地址下載不同的文件,而更新模塊的重要組件taskhostex.exe就是主控模塊dlr.noilwut0vv.club/d/msdownload/others/BtnProtocol.exe下載的。

taskhostex.exe是個載入器,用於載入更新模塊其他組件,在載入的同時會根據情況進行BypassUAC操作。taskhostex.exe會通過是否能夠成功地在system32目錄下釋放tcpiplocationviews.dll文件判斷UAC級別是否為最低。當UAC級別不為最低時,往system32目錄下寫入文件會觸發彈窗,在不存在用戶交互時無法成功。計算機的UAC級別會和網路狀態以及GPU型號一起傳回打點伺服器。

若UAC級別不為最低,則taskhostex.exe會藉助spoolsv.exe啟動更新組件TrustServicesHost32/64.exe。由於spoolsv.exe進程源頭來自於「永恆之藍」payload,進程許可權為system,藉此可以BypassUAC。圖12展示了taskhostex.exe byPassUAC的代碼片段。可以發現,taskhostex.exe將做45次BypassUAC嘗試。

圖12 taskhostex.exe byPassUAC的代碼片段

taskhostex.exe啟動更新模塊組件TrustServicesHost32/64.exe(32位和64位版本文件名不同,以下稱TrustServicesHost)。TrustServicesHost通過LocalDown或vps兩種下載方式中的其中一種下載更新包NrsDataCache.tlb。兩者中優先選擇LocalDown。

LocalDown指的是通過區域網中已經受感染的計算機所搭建的WebServer下載更新包。TrustServicesHost.exe通過訪問WebServer的26397埠下載更新包NrsDataCache.tlb。圖13展示了LocalDown的代碼實現。

圖13 LocalDown的部分代碼

vps指的是通過作者部署的遠程伺服器下載更新包,下載鏈接為vpp.jdi1diejs.club/NrsD。圖14展示了vps的代碼實現。

圖14 vps的代碼實現

下載更新包之後TrustServicesHost.exe會用更新包中的文件替換掉計算機中存在的舊文件,並重新啟動主控模塊的服務。圖15展示了NrsDataCache.tlb解壓後的內容。

圖15 NrsDataCache.tlb解壓後的內容

值得一提的是,TrustServicesHost.exe中硬編碼了一些通過異或加密過的字元串,異或key為0x33。TrustServicesHost.exe運行過程中會解密這些字元串並對其編碼後存儲在註冊表項HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesServicesPixels中。圖16展示了解密後未編碼的字元串內容,這些字元串可能做為備用礦池地址在挖礦模塊中將和其他字元串拼接構成挖礦機命令行。圖17展示了寫入註冊表項的字元串內容。

圖16 解密後未編碼的字元串內容

圖17 寫入註冊表項的字元串內容

挖礦模塊

挖礦是NrsDataCache殭屍網路的最終目的,NrsDataCache所挖的幣種為門羅幣。NrsDataCache的挖礦功能由TaskSyncHost.exe完成,該文件由NrsDataCache.tlb解壓提取得到,原文件名為hash或hash64。

不同於其他挖礦殭屍網路使用例如minexmr,supportxmr等知名礦池,NrsDataCache使用自建的礦池,首選礦池地址為mg.jdi1diejs.club:45560.該地址以字元串的形式硬編碼在主控模塊中,並與其他字元串拼接成挖礦機命令行。圖18展示了挖礦機命令行的內容。

圖18 挖礦機命令行

從上文可以得知,更新模塊通過註冊表項存儲了一些包含礦池地址的字元串,這些可能是挖礦機的備用礦池地址和登陸賬戶名,不過這些礦池和帳戶名並未啟用。根據存儲的字元串我們整理出挖礦模塊使用或待使用的礦池地址和帳戶組合,如表3所示。

表3 挖礦模塊使用或待使用的礦池地址和帳戶組合

礦池地址帳戶mg.jdi1diejs.club:45560a3raf3ea@protonmail.commg.jdi1diejs.club:45560wb333@protonmail.comp2.jdi1diejs.club:45560akiofe1a@protonmail.comp3.jdi1diejs.club:45560toyetrqw@protonmail.comP4.jdi1diejs.club:45560s50ghksf@protonmail.comp5.jdi1diejs.club:45560a4gqr09i@protonmail.comp6.jdi1diejs.club:45560fa09efka@protonmail.comp7.jdi1diejs.club:45560dske59jg@protonmail.comp8.jdi1diejs.club:45560fgk9w4fk@protonmail.com

表3

除了TaskSyncHost.exe之外,NrsDataCache.tlb中還有另一個名為gpu的挖礦機,該挖礦機使用GPU進行挖礦。不過在捕捉到的樣本中並未發現與該挖礦機相關的行為。

0x3 NrsMiner發展過程

NrsMiner變種的最早出現可追溯到2017年5月,與「WannaCry」爆發時間相近。也就是在「永恆之藍」漏洞攻擊武器出現一個月之後,NrsMiner就開始利用其進行攻擊。最初的NrsMiner變種並不具備挖礦功能,而是通過泄露的「永恆之藍」漏洞攻擊工具與後門DoublePulsar將目標計算機變成「肉雞」。圖19展示了2017年5月-2017年6月NrsMiner變種控制的計算機趨勢。

圖19 2017年5月-6月NrsMiner變種控制的計算機趨勢

從2017年7月起,NrsMiner開始在受害計算機中植入挖礦機,被NrsMiner控制的計算機也越來越多。圖20展示了自2017年7月起被NrsMiner植入挖礦機的受害計算機數量變化趨勢。

圖20 2017年7月起被NrsMiner植入挖礦機的受害計算機數量變化趨勢

早期的NrsMiner變種只包含攻擊模塊和挖礦模塊兩部分。攻擊模塊使用「永恆之藍」漏洞攻擊武器入侵目標計算機後,目標計算機通過訪問攻擊方攻擊模塊中嵌入的WebServer下載挖礦機和攻擊模塊組件。由於結構較為簡單,並缺乏與殺毒軟體有效的對抗,早期的NrsMiner變種在受控計算機上的存活時間並不長。圖21展示了早期的NrsMiner變種攻擊流程。

圖21 早期的NrsMiner變種攻擊流程

由於早期NrsMiner規模增長緩慢,其作者在2017年11月開始對NrsMiner進行更新,通過不斷修改NrsMiner組件所在的位置對抗殺軟。表4展示了曾被用於存放NrsMiner組件的路徑。

表4 曾用於存放NrsMiner組件的路徑

路徑C:WindowsIMEC:windowsSysprepThemesC:windowsSysnativec:windowssecurebootthemes

表4

NrsMiner的規模在2017年11月緩慢增長,在2017年12月底,其作者再次進行一次更新,在NrsMiner中添加了主控模塊。這次更新使NrsMiner在結構上更加健壯,成為了嚴格意義上的殭屍網路。得益於這次更新,NrsMiner殭屍網路的規模在2017年12月底到2018年1月這段時間內劇增,控制的殭屍機數量增長了400台。此外,NrsMiner的挖礦機在此次更新後拋棄了公共礦池minergate轉而使用私人搭建的礦池。

不過這次更新仍然存在一些問題,例如無法對殭屍網路組件進行實時更新。於是NrsMiner作者在2018年1月31日再次進行更新,添加了更新模塊,NrsMiner開始可以從遠程伺服器下載更新包。而這次更新之後的NrsMiner正是本文所分析的變種。

0x4 總結

此類殭屍網路生命力強大,能夠長期潛伏在受害計算機中,並主動攻擊網路內其他機器。建議廣大網民及時升級軟體,打好補丁,定期檢查系統安全狀況。此外,360安全衛士已經推出了反挖礦功能,全面防禦從各種渠道入侵的挖礦木馬。用戶開啟了該功能後,360安全衛士將會實時攔截各類挖礦木馬的攻擊,為用戶計算機安全保駕護航。

圖22

0x5 IOC

531aec8627cd8e55f59c302991838417

011d6ce51b7806dca26c300e8d26f9bb

a55a69992f8e40686d3e350a9514a847

3e5a34e4f520bad2c25fc3ebe3ac4a2b

aee376f0c693fae922cd33415d2f9dd9

7d75c0b4cd956233518c81a7aacfaeeb

d7b65143cf713011fdc7f6ea417f0340

9bc26cf32e5f27ead23a16867e049e85

log.oiwcvbnc2e.stream

dlr.noilwut0vv.club

vpp.jdi1diejs.club


推薦閱讀:

哪裡可以買賣比特幣?你不能錯過的數字貨幣交易入門手冊(第一期)
CPU挖礦 讓自家的本本跑起來,BTH
免費雲挖礦 Eobot

TAG:挖礦 |