新出現的NetDooka惡意軟件通過PrivateLoader傳播
研究人員最近遇到了一個相當復雜的惡意軟件框架,研究人員用它的一些組件的名字命名即NetDooka。該框架通過“按安裝獎勵”(pay-per-install,PPI )服務傳播,包含多個部分,包括加載程序、釋放程序、保護驅動程序和實現其自己的網絡通信協議的全功能遠程訪問木馬 (RAT)。在分析過程中,研究人員發現 NetDooka 正通過 PrivateLoader 惡意軟件進行傳播,該惡意軟件一旦安裝,就會啟動整個感染鏈。
PrivateLoader 惡意軟件是一個下載程序,負責將多個惡意軟件下載并安裝到受感染的系統中,作為 PPI 服務的一部分。由于 PPI 服務的工作方式,要安裝的確切有效負載可能會因惡意軟件版本而異。據報道,通過 PPI 服務傳播的一些已知惡意軟件系列包括 SmokeLoader、RedLine 和 Anubis。
本文重點介紹 NetDooka 框架的組件和感染鏈,從第一個有效負載的傳播開始,它釋放了一個加載程序,該加載程序創建一個新的虛擬桌面來執行一個反病毒軟件卸載程序并通過模擬鼠標和指針位置與之交互,這是完成卸載過程和準備的必要步驟。執行其他組件的環境,直到傳播受內核驅動程序保護的最終 RAT。
雖然研究人員描述了研究人員發現的所有不同功能,但 NetDooka 的功能仍可能因惡意軟件版本而異,因為它仍處于開發階段。
攻擊概述

攻擊的感染鏈
當用戶無意中下載了PrivateLoader,通常是通過盜版軟件下載,然后安裝第一個 NetDooka 惡意軟件,這是一個負責解密和執行加載程序組件的釋放程序組件。
然后加載程序執行某些檢查以確保它沒有在虛擬環境中運行,之后它會從遠程服務程序下載另一個惡意軟件。它還可能安裝內核驅動程序以供將來使用。
下載的惡意軟件是加載程序執行的另一個釋放程序組件。這個釋放程序負責解密和執行最終的有效負載,這是一個功能齊全的 RAT,包含多種功能,例如啟動遠程 shell、抓取瀏覽程序數據、截屏和收集系統信息。它還可能啟動已安裝的內核驅動程序組件以保護釋放的有效負載。
下載程序

NetDookaLoader流程圖
在執行時,加載程序將對字符串進行去混淆處理,例如命令和控制 (C&C) 服務程序地址,并檢查傳遞的命令行參數。惡意軟件接受多個參數來指示應該采取什么行動。

命令行參數及其函數

NetDookaLoader 參數的檢查
如果沒有參數傳遞給加載程序,它會執行一個名為“DetectAV()”的函數,該函數會查詢注冊表以自動識別可用的反病毒產品,以便卸載它們。惡意軟件通過使用 CreateDesktopA 創建一個新的虛擬桌面來實現這一點,該桌面用作啟動正確二進制卸載程序的工作區。這是通過使用帶有“create_no_window”標志的 CreateProcessA 以及通過模擬人工交互(例如控制鼠標來完成卸載過程)來實現的。每個反病毒卸載功能都有自己的基于卸載過程的刪除技術。下圖顯示了 GData 反病毒刪除的示例。

卸載反病毒程序
然后加載程序使用 bitsadmin.exe Windows 實用程序從其 C&C 服務程序下載釋放程序組件并將其保存為“C:\Program Files\ReservHardwareUpdater\rsvr_updldr.exe”。

NetDookaLoader 通過 bitsadmin.exe 下載下一階段的攻擊

帶有“嵌入式”參數的自我執行
“embedded”參數負責下載釋放程序組件并將其保存為“%ProgramFiles%\ReservHardwareUpdater\reloadbitex.exe”。
加載程序組件使用“correct”參數再次自我執行。完成此操作后,它會執行下載的釋放程序,通過修改主機文件并將其域重定向到“0.0.0.0”地址來阻止反病毒供應商域。最后,它使用以下命令自我刪除:

阻止反病毒域
在惡意軟件的某些變體中,加載程序會安裝一個驅動程序,作為最終有效負載(RAT 組件)的內核模式保護。它通過注冊為微型篩選器驅動程序并設置回調函數來保護惡意軟件免受文件刪除和進程終止來實現這一點。
驅動程序二進制文件在加載程序中采用 Base64 編碼,解碼后,其內容將寫入“C:\Program Files\SolidTechnology\protdrv.sys”文件。盡管加載程序創建了一個服務來安裝驅動程序,但它不會啟動它。相反,驅動程序啟動任務由下載程序組件執行。

驅動安裝程序函數
釋放程序分析
研究人員發現 NetDooka 攻擊鏈中涉及兩個不同的釋放程序組件:一個是由 PrivateLoader 安裝的,它會釋放 NetDooka 加載程序,而另一個會釋放最終的 RAT 有效負載。
釋放程序組件是一個小型 .NET 二進制文件,負責解密和執行它嵌入的有效負載。惡意軟件首先讀取自己的文件內容并尋找一個特定的字節序列(在研究人員分析的樣本中,這是“\x11\x42\x91\x50\x7F\xB4\x6C\xAA\x75\x5E\x8D”)獲取它旁邊的字節。
有效負載解密是通過在解密的有效負載中執行 XOR 運算來實現的,該運算使用單字節密鑰并從每次解密循環迭代的最終值中減去索引值。通過創建特定大小的素數列表并遍歷它來解決密鑰。對于每次迭代,都會生成當前列表元素的 SHA-256 哈希,然后將哈希結果的第一個字節添加到單字節變量中,最終的和是 XOR 秘鑰。

NetDookaDropper 使用的解密程序
解密后,有效負載內容將寫入 %Temp% 目錄中的文件,然后通過一個新進程執行。請注意,根據惡意軟件版本的不同,位置和文件名可能會有所不同。

正在執行的解密有效負載
雖然惡意軟件有多個版本,表現出一些不同的行為,例如被搜索的XOR密鑰和字節序列,但對于研究人員發現的所有 NetDooka 版本,釋放程序的目標仍然是相同的,即在其中執行嵌入的有效負載。為了自動提取釋放的有效負載,研究人員開發了一個 Python 腳本,可以在此處下載。
正如加載程序分析部分所提到的,一些版本的釋放程序組件負責啟動驅動程序組件服務。需要注意的是,包含驅動程序啟動步驟(在最終有效負載解密和執行之前執行)的釋放程序版本是包含最終有效負載的版本。

啟動驅動程序組件的釋放程序
驅動程序分析
驅動程序組件充當 RAT 組件的內核級保護。它通過嘗試阻止 RAT 組件的文件刪除和進程終止來實現這一點。該驅動程序將自己注冊為一個微型篩選器驅動程序,以攔截對文件系統的 I/O 請求并設置進程回調函數以保護 RAT 進程。
在分析過程中,研究人員注意到驅動程序基于 Microsoft 驅動程序示例實現中的進程保護實現以及名為“Prevent_File_Deletion”的開源項目中的文件刪除保護。

驅動程序功能的一般視圖
該驅動程序注冊為一個微型篩選器驅動程序,并使用 FltRegisterFilter 和 FltStartFiltering 函數啟動它。文件系統是用于訪問文件的 I/O 操作的典型目標。文件系統篩選器是一種機制,驅動程序可以使用它來攔截發往文件系統的調用。文件系統微篩選器是為替代 Windows 遺留文件系統篩選器機制而創建的模型,它具有易于編寫的優點,這使得它成為開發文件系統篩選驅動程序的首選方法。
當一個微型篩選器驅動注冊時,它可以設置回調函數在I/O請求之前(PreOperation)和之后(PostOperation)執行。為了保護文件刪除,惡意軟件在篩選器注冊過程中注冊了一個PreOperation回調函數來攔截特定類型的文件系統的I/O請求。在這種情況下,惡意軟件會攔截文件刪除操作。
一旦請求了文件刪除操作,就會調用回調函數,驅動程序會檢查目標文件的名稱是否為“ougdwieue.exe”(最終RAT負載的名稱)。如果是,它會改變請求的權限,以防止目標文件被刪除。

檢查 RAT文件名并拒絕訪問
進程保護是通過 PsSetCreateProcessNotifyRoutine 函數設置進程通知回調程序來實現的,每次創建新進程時都會調用該函數。執行回調時,惡意軟件會在進程命令行中查找字符串“ougdwieue.exe”,以確定該進程是否為預期目標。

正在檢查的進程命令行
驅動程序還通過 ObRegisterCallback 設置另一個回調程序,以檢查正在執行的涉及進程句柄創建或復制的進程操作。
在創建進程時,有了這兩個回調,驅動程序可以檢查正在創建的進程實際上是RAT進程,以及正在執行的操作是創建進程句柄還是復制進程句柄。如果是這樣,驅動程序改變訪問權限,以避免應用程序試圖獲取目標進程的句柄并終止它。

進程創建回調程序

對被修改的進程句柄的訪問
RAT分析
最后一個有效負載是RAT,它接受來自遠程服務器的命令來執行各種操作,例如執行shell命令、執行分布式拒絕服務(DDoS)攻擊、下載和執行文件、記錄受感染設備上的擊鍵,以及執行遠程桌面操作。下圖顯示了它的功能列表。

NetDookaRAT 函數
在執行時,惡意軟件使用各種系統檢查來檢測和避免分析環境。

環境規避
該惡意軟件會創建一個名為“3f0d73e2-4b8e-4539-90fd-812330bb39c8”的互斥鎖來標記其在系統上的存在。如果它在系統中找到相同的互斥鎖,它就會退出。
在 C&C 通信之前,NetDooka 會生成一個 16 字節的隨機會話,并將其存儲在名為“config.cfg”的文件中。

初始化和配置 C&C 服務器

會話ID生成器
然后它初始化其網絡通信組件并聯系其 C&C 服務程序以注冊受害者并檢索命令。

C&C 通信
NetDookaRAT 使用自定義協議與 C&C 服務程序進行通信,其格式如下圖所示。

C&C 通信中使用的數據包結構
每個響應分為標頭和數據流。標頭流包含要發送的數據的請求類型、大小和選項,而數據流包含特定函數的返回值。下表顯示了類型值及其對應函數的列表。


類型值及其對應的功能
下圖中的代碼片段演示了惡意軟件如何構造和發送上圖中所示的請求。

為請求創建數據包
然后,惡意軟件開始偵聽傳入的 TCP 連接以接收命令。然后,它解析接收到的命令以在受感染的計算機程序上執行它們。下圖顯示了惡意軟件支持的命令,而另一個圖中的代碼片段演示了惡意軟件如何執行這些命令。

RAT命令和功能

RAT 命令的代碼片段
總結
PPI 惡意軟件服務允許惡意軟件開發者輕松部署其有效負載。惡意驅動程序的使用為攻擊者創造了一個巨大的攻擊面,同時也允許他們利用諸如保護進程和文件、繞過反病毒程序以及對系統隱藏惡意軟件或其網絡通信等方法。此外,通過正確安裝 RAT 有效負載,攻擊者可以執行諸如從受感染系統中竊取一些關鍵信息,獲得對系統的遠程控制訪問以及創建僵尸網絡。最后,NetDooka 也可以充當其他惡意軟件的入口點。
參考及來源:
https://www.trendmicro.com/en_us/research/22/e/netdooka-framework-distributed-via-privateloader-ppi.html