APT & 針對式目標攻擊
Earth Freybug 使用 UNAPIMON 惡意程式迴避追蹤
本文深入探討 Earth Freybug 駭客集團使用的兩項技巧:動態連結函式庫 (DLL) 挾持以及應用程式開發介面 (API) 脫鉤技巧,他們使用一個我們新發現並命名為「UNAPIMON」的惡意程式來搭配這兩項技巧以防止子處理程序被監控。
上個月,我們調查了一起網路間諜攻擊,我們認為這起攻擊是 Earth Freybug 駭客集團所為 (就目前所知該集團隸屬於 APT41 旗下)。Earth Freybug 駭客集團至少從 2012 年便開始活躍至今,專門從事間諜行動以及各種以賺錢為目的活動。據觀察,它曾經攻擊多個國家的不同產業。Earth Freybug 駭客集團使用了各式各樣的工具和技巧,包括就地取材的二進位檔 (LOLBin) 和客製化惡意程式。本文深入探討 Earth Freybug 駭客集團使用的兩項技巧:動態連結函式庫 (DLL) 挾持以及應用程式開發介面 (API) 脫鉤技巧,他們使用一個我們新發現並命名為「UNAPIMON」的惡意程式來搭配這兩項技巧以防止子處理程序被監控。
攻擊流程背景資訊
這起攻擊行動使用的手法、技巧與程序 (TTP) 類似於 Cybereason 發表的一篇文章所探討的一起攻擊行動。此事件中,我們看到駭客在一個 vmtoolsd.exe 處理程序當中使用 schtasks.exe 建立一個遠端排程工作。這個工作執行時,會啟動一個預先植入遠端電腦的 cc.bat 批次檔。
vmtoolsd.exe 是 VMware Tools 當中一個名為「VMware User Process」的元件,它是安裝在客端虛擬機器內部執行,負責協助與主機通訊。至於 schtasks.exe 則是一個 Windows 上一個名叫「Task Scheduler Configuration Tool」的元件,用來管理本機或遠端電腦上的排程工作。趨勢科技從監測資料觀察到的行為發現有一段不明來源的程式碼被注入 vmtoolsd.exe 當中來啟動 schtasks.exe。有一點很重要的是,vmtoolsd.exe 和 schtasks.exe 都是合法的檔案。儘管在此事件中,vmtoolsd.exe 內的惡意程式碼來源不明,但根據過去的感染案例顯示,駭客時常經由對外連網的伺服器漏洞來攻擊合法應用程式的漏洞。
偵查用的第一個 cc.bat 批次檔
排程工作一旦啟動,就會在遠端電腦上執行預先植入的 %System%\cc.bat 批次檔。根據我們的監測資料,這個批次檔案會執行一些命令來蒐集系統資訊。以下是其中的一些命令:
- powershell.exe -command "Get-NetAdapter |select InterfaceGuid"
- arp -a
- ipconfig /all
- fsutil fsinfo drives
- query user
- net localgroup administrators
- systeminfo
- whoami
- netstat -anb -p tcp
- net start
- tasklist /v
- net session
- net share
- net accounts
- net use
- net user
- net view
- net view /domain
- net time \\127.0.0.1
- net localgroup administrators /domain
- wmic nic get "guid"
這些命令所蒐集到的系統資訊,會彙整到一個文字檔:%System%\res.txt。
這項工作完成後,接著會設定另一個排程工作在目標電腦上執行 %Windows%\Installer\cc.bat 批次檔,這會啟動一個後門程式。
用來挾持處理程序並側載 DLL 的第二個 cc.bat 批次檔
第二個 cc.bat 值得注意的是它會使用一個服務來載入一個非現有的函式庫,藉此側載惡意 DLL,這個服務就是 SessionEnv。如需有關這項技巧如何運作的技術細節,請參閱:這裡。在這項技巧中,第二個 cc.bat 批次檔首先會將預先植入系統的 %Windows%\Installer\hdr.bin 檔案複製成 %System%\TSMSISrv.DLL。接著,它會停止 SessionEnv 服務,等個幾秒,然後重新啟動該服務。如此會促使該服務載入 %System%\TSMSISrv.DLL 來執行。
此處值得注意的是 TSMSISrv.DLL 會植入並載入一個名為「Windows%\_{5 至 9 個隨機英數字元}.dll」的檔案,接著啟動一個 cmd.exe 處理程序,將前述的 DLL 注入該處理程序。我們從監測資料注意到駭客利用這個 cmd.exe 來執行來自另一台電腦的命令,所以駭客等於將它變成了一個後門程式。我們將前述服務載入並注入 cmd.exe 的這個 DLL 命名為「UNAPIMON」。
使用 UNAPIMON 來躲避資安防禦
我們發現一個有趣的現象是,這起攻擊使用了我們命名為「UNAPIMON」的特殊惡意程式。基本上,UNAPIMON 運用了躲避防禦技巧來防止其子處理程序 (child process) 被監控,以下詳細說明。
惡意程式分析
UNAPIMON 本身相當單純:它是一個以 C++ 語言撰寫的 DLL 惡意程式,並未壓縮也沒有編碼,而且除了其中一個字串之外,其餘程式碼也未加密。
其 DllMain 函式會先檢查自己是正在載入還是卸載。如果 DLL 正在載入,那它就會建立一個事件物件以用於同步,然後啟動掛鉤 (hooking) 執行緒。
如圖 3 所示,掛鉤執行緒第一步就是從 kernel32.dll 取得 CreateProcessW 函式的位址,並將它儲存起來供後續使用。CreateProcessW 是一個 Windows API 函式,用來建立一個處理程序。接著,它會使用 Microsoft Detours 這個 Microsoft 開發的開放原始碼軟體在自己身上安裝一個掛鉤函式,Microsoft Detours 可用來監控和記錄 Windows 上的 API 呼叫。
惡意程式就是透過掛鉤的機制將所有對 CreateProcessW 的呼叫從 DLL 所在位置重導到掛鉤函式。
掛鉤函式會利用先前儲存的位置來呼叫原本的 CreateProcessW,以便實際建立一個處理程序,但在建立時會指定 CREATE_SUSPENDED (4) 這個旗標作為參數。如此一來,新建立的處理程序,其主執行緒就會處於暫停執行的狀態。
接著它會掃描一份寫死的 DLL 名稱清單,如圖 5 所示。
針對清單當中每個已載入子處理程序的 DLL,它會產生該 DLL 檔案的複本到以下路徑:%User Temp%\_{5 至 9 個隨機英數字元}.dll (以下稱本機複本),接著使用 LoadLibraryEx 這個 API 函式將 DLL 載入,並傳入 DONT_RESOLVE_DLL_REFERENCES (1) 作為參數。這麼做的目的是為了防止這篇文章當中所描述的載入錯誤。
當 DLL 的本機複本載入後,接著幫載入的 DLL 映像建立一個本機記憶體複本,並使用它在子處理程序當中一樣的名稱。為了確保兩個 DLL 是一致的,它會比較兩者標頭中的總和檢查碼 (checksum) 欄位,以及匯出表 (export table) 內名稱指標 (name pointer) 的數量。
確認相同之後,接著掃描匯出表中所有匯出的位址。針對每一個匯出的位址,它會檢查並確認該位址指向的是可執行記憶體分頁中的程式碼,並確認起始的程式碼已被修改。確切來說,它會檢查記憶體分頁的保護旗標是否為 PAGE_EXECUTE (0x10)、PAGE_EXECUTE_READ (0x20) 或 PAGE_EXECUTE_READWRITE (0x40)。至於是否已修改,則是檢查匯出位址的第一個位元組是否為 0xE8 (CALL)、0xE9 (JMP),或者前兩個位元組是否與已載入的本機複本的前兩個位元組不同。此外,它還會確認匯出位址的名稱不是 RtlNtdllName,因為該位址所存放的是資料而非可執行程式碼。
通過檢查的匯出位址,就將它加入到一個解除修補 (unpatching) 清單。
當清單中的所有 DLL 名稱都處理完畢之後,接著就掃描解除修補清單中的每個位址。針對每個位址,它會從已載入的本機複本當中複製 8 個位元組 (原始內容) 到遠端位址 (先前已被修改過)。這麼做可以解除已匯出位址上已套用的任何程式碼修補。
最後,它會卸載並刪除隨機命名的 DLL 本機複本,接著繼續執行主執行緒。當惡意程式卸載完成之後,它就會與 CreateProcessW 脫鉤。
衝擊
根據 UNAPIMON 的行為以及它如何被用於攻擊,我們可推測它的主要用途是將任何子處理程序內的重要 API 函式脫鉤。對於一些透過掛鉤機制來實作 API 監控的環境 (例如沙盒模擬分析系統),UNAPIMON 可以防止其子處理程序被監控。這樣一來,惡意程式就能讓子處理程序的惡意行為不會被發現。
此惡意程式特別值得一提的是,它既簡單又有創意。它運用的是現有技術,如 Microsoft Detours,這證明了任何簡單、現成的函式庫都可能被用於惡意用途 (只要有創意的話),此外也彰顯出惡意程式作者的程式設計功力和創造力。一般來說,使用掛鉤的通常是惡意程式,但這案例剛好相反。
資安建議
在 Earth Freybug 的這起攻擊中,駭客使用了系統管理員帳號,這意味著駭客已事先掌握系統管理員的登入憑證,因此使得群組原則失去了作用。唯一能預防這類情況發生的辦法就是良好的資安習慣,包括:經常更換密碼、限制唯有系統管理員才能使用系統管理帳號,還有活動記錄檔。
在此事件中,駭客使用第三方協同作業軟體平台來將偷到的資料外傳,這類平台已不在我們掌控範圍。就算我們將受影響的資料夾 (也就是駭客可能經由協同作業軟體存取的資料夾) 寫入權限撤銷,駭客也能將權限改回來,因為駭客也是系統管理員。
使用者應嚴格限制系統管理權限,遵守最低授權原則。越少人具備系統管理權限,駭客能利用的系統漏洞就越少。
結論
Earth Freybug 的存在已有相當一段時日,他們的手法一直在隨時間而不斷演進。這點從此次的攻擊就能看出,我們認為,為了達成目標,他們會積極尋找方法來精進自己的技巧。
這起攻擊證明了即使是很單純的技巧,只要運用得當,就能發揮奇效。當這些技巧被運用在既有攻擊手法當中時,就會讓攻擊更難被察覺。資安研究人員及資安營運中心 (SOC) 必須隨時保持警戒,不僅要隨時留意駭客的進階技巧,也要留意那些可能被輕忽的單純技巧。
入侵指標資料
雜湊碼 | 偵測名稱 |
---|---|
62ad0407a9cce34afb428dee972292d2aa23c78cbc1a44627cb2e8b945195bc2 | Trojan.Win64.UNAPIMON.ZTLB |