當前位置:
首頁 > 新聞 > Check Point安全研究人員針對UPAS Kit與Kronos銀行木馬的分析(一)

Check Point安全研究人員針對UPAS Kit與Kronos銀行木馬的分析(一)

大家可能還記得,在2017年5月,WannaCry在150多個國家進行了大規模的攻擊活動,許多公司和組織都不幸中招。幸運的是,英國安全研究人員馬庫斯?哈欽斯(Marcus Hutchins)通過無意間觸發WannaCry自帶的「自毀開關」,來阻止了這次襲擊。

然後很快這位英雄就出事了,根據美國司法部發布的一項起訴書,哈欽斯被指控在2014至2015年間幫助他人創建、傳播和維護銀行木馬Kronos。Kronos是一種可以盜竊信用卡號碼和其他銀行信息的惡意軟體,網路罪犯常常利用假冒郵件中的附件來誘使人們安裝它。

不過根據最新的消息,在檢察官在對這個案件進行調查的過程中,又指控他單獨製造了一個名為UPAS Kit的惡意軟體。檢察官稱,UPAS Kit於2012年創建,並於同年7月由哈欽斯出售給使用假名Aurora123的人。UPAS Kit使用表單採集和Web注入來攔截和收集來自受保護電腦的個人信息,允許攻擊者在未經授權的情況下,從被攻擊的電腦中盜取信息。根據目前地調查,該惡意軟體能夠隱秘地安裝並且不會觸發各種殺毒軟體。

請注意:到目前為止,Check Point安全研究人員僅僅是出於研究的需要,對UPAS Kit進行分析,目前還沒有確鑿的證據表明Kronos和UPAS Kit是否就是由同一人編寫。

解析初始化階段的ntdll.dll函數

UPAS Kit使用了多個低級(low-level )的ntdll函數,並在運行時解析該函數的地址。雖然ntdll函數可能會成為阻止研究人員分析的手段,但這本身並不是一個非常複雜的技巧。負責此載入操作的過程遍歷包含以下結構項目的函數表。

typdef struct _ntdll_function_entry{

CHAR *function_name;

PVOID function_address;

}ntdll_function_entry;

它只需使用每個項目的字元串欄位,並使用Win32 API函數GetProcAddress解析相應的地址,如下圖所示。

解析UPAS Kit中的ntdll函數

事實上,Kronos惡意軟體也使用了類似的方法來防止研究人員對其進行分析。但是,在這種情況下,函數名不會以明文形式保存在二進位文件中,而是作為字元串哈希。此外,一些解析函數可用作系統調用,因此無論是通過沙盒模擬器還是手動檢測惡意軟體,都會很難檢測到惡意軟體的活動。不過,與UPAS Kit不同,Kronos利用了一個稍微不同的函數入口結構,如下所示:

typedef struct _ntdll_function_entry{

CHAR *function_name_hash;

PVOID function_address;

DWORD encoded_syscall_number;

DWORD is_used_as_syscall_flag;

}ntdll_function_entry;

這當然並不意味著後者是第一種方法的擴展機制,但是如果我們比較載入函數的順序(即位於二進位文件中的表項目順序),可以看到這兩種情況之間有一些相似之處。

載入的ntdll函數順序的比較

Anti-VM的過程

惡意軟體為了避免自己在沙盒環境中運行,採用了兩種技術。第一種方法是為了避免ThreatExpert沙盒的檢測,即使用函數GetVolumeInformationW檢索系統卷序列號,並檢查值0xCD1A40(對應於上述沙箱)。ThreatExpert是在線分析文件中可疑病毒、木馬、蠕蟲等信息,是一個非常優秀的自動化病毒檢測工具。第二種技術是眾所周知的,那就是對VMWare虛擬機軟體的工件進行檢查,即對來自來操作系統和主機之間通信的虛擬I/O埠的響應進行檢查。值得注意的是,一旦惡意軟體檢測到不安全的運行環境,它會通過產生一個錯誤框來阻斷響應,如下所示。

UPAS Kit使用的Anti-VM技術

另外,應該注意的是,Kronos所做的等效檢查(equivalent check)與UPAS Kit差異很大。這些檢查都是為了在UPAS Kit的地址空間中尋找各種存在的進程或載入模塊,這可能表明UPAS Kit對其執行環境的檢查,要比Kronos的Anti-VM檢查所涵蓋的內容要多得多,這可能意味著Anti-VM的程序是由不同的作者編寫的,或者同一開發者對同一問題採取了不同的方法。

全局互斥(Global Mutex)

木馬生成的互斥對象名稱是惡意操作的結果——MD5(system_volume_serial ||「LPLl3h3lDh1d3djP7P3」)。如果在互斥對象名稱的生成中出現錯誤,則會為其設置硬編碼值(「A5DEU79」)。

生成的互斥對象名稱

在這種情況下,Kronos和UPAS Kit在執行MD5函數時存在一定的相似性。但更明顯的是,UPAS Kit通過計算MD5(system_volume_serial),以類似的方式創建一個互斥對象名稱,並在這種情況下將其分配給MD5(「Kronos」)。

自安裝過程

為了保持持久性攻擊,UPAS Kit會執行幾項常見操作:

首先,它將自己複製到%APPDATA%下的新目錄中,命名為「Microsoft」,同樣的操作會%TEMP%目錄下進行。複製以後的文件名稱將是上面描述的%APPDATA%的全局互斥體名稱的前七個字元,而%APPDATA%和%TEMP%的前七個字元相同,只是在%TEMP%目錄下會附加「_l.exe」和「_a.exe」。

然後,將檢查出的當前文件名與新生成的文件名進行比較,如果兩個文件名不匹配,那麼UPAS Kit則會從%APPDATA%中的新路徑開始執行。如果兩個文件名匹配,即UPAS Kit在第二次從%APPDATA%路徑運行時,則當前文件路徑將被寫入眾所周知的註冊表運行項中SoftwareMicrosoftWindowsCurrentVersionRun(在HKLM和HKCU),其中運行項的名稱與複製文件的名稱相同。最後,惡意軟體將使用函數IsWow64Process建立當前的系統架構,如果它不可用,則惡意軟體將使用GetNativeSystemInfo建立,並將其返回給主函數。

系統架構的檢查

UPAS Kit中用於文件、註冊表項和互斥對象的命名規定類似於Kronos,也是使用MD5(system_volume_serial)的前8個字元來實現。

進程注入

由惡意軟體進行的注入取決於系統架構,在32位系統中,它會創建"explorer.exe"進程並向其中注入自己的映像。而在64位系統中,32位版本的"iexplore.exe"也會執行類似的操作,惡意軟體駐留在「%ProgramFiles(x86)%Internet Explorer」。此時,注入函數就會獲得一個PID和目標進程的主線程句柄,以及注入發生後要執行的函數地址。

為了進行成功的進程注入,UPAS Kit使用一個簡單的技巧。首先,它將當前的虛擬映像複製到一個緩衝區,然後嘗試在遠程進程的任意地址分配具有同樣映像大小的內存。檢索到的分配基地址將用於重定位駐留在複製緩衝區的注入映像,並將其寫入目標進程。然後,UPAS Kit將準備一個經過硬編碼調用存根並覆蓋它的三個DWORD,以便在注入時調用應該執行的函數,這些Word概述如下。

調用存根並替換位元組

這些入棧的結構會負責傳遞一些參數,而這些參數稍後將在hook函數中被用到,這些參數包括。

typedef struct _config_struct{

DWORD whitelisted_process_pid;

CHAR whitelisted_run_key_name[16];

wchar_t whitelisted_malware_binary_path[260];

wchar_t mutex_name[260];

DWORD ntdll_load_status;

DWORD some_flag;

}config_struct;

最後,為了觸發遠程進程中請求函數的執行,UPAS Kit將通過調整上下文結構中的EAX的值來調用遠程進程的入口點,然後通過調用NtSetContextThread函數繼續執行攻擊。如果失敗,UPAS Kit將嘗試直接使用CreateRemoteThread函數生成目標函數,而不是調用存根。

在注入過程中開始觸發遠程攻擊

與UPAS Kit相反,Kronos的注入方法則完全不同,詳情請點此了解。即便有如此不同,研究人員還是發現了Kronos和UPAS Kit兩個注入過程的相似之處,這就是兩者都試圖將惡意軟體的進程特權提升到「SeDebugPrivilege」,而這並不是強制注入成功的必要條件。進程特權提升函數的調用以及函數本身(在兩個二進位文件中都是相同的)如下所示:

Kronos和UPAS Kit之間的注入比較

在下一篇文章中,我將介紹Kronos和UPAS Ki之間的其他區別,比如惡意有效載荷的注入,Rootkit功能,C2通信過程。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

Malwarebytes Labs對SamSam勒索軟體的分析
被植入惡意代碼的Emotet Downloader細節分析

TAG:嘶吼RoarTalk |