初始傳染手段 – Nuclear Pack
已經有一些其他的文章介紹過Nuclear Pack破解工具包。可能它還不像g10pack或者BlackHole這些工具那麼流行,也沒有像CoolEK或者Phoenix工具有那麼多的破解功能,但仍然可以看到它的價值。
Nuclear Pack因使用了重定向層次結構以及在傳遞惡意程式碼前檢查使用者活動而被人所熟知。另外,眾所周知它被不同的犯罪分子用於分發各種惡意軟體,而其中大多數是犯罪軟體。在這篇文章裡,我們詳細介紹了一個特殊的事件,在這個事件裡一個客戶受到Nuclear Pack入侵系統的攻擊。
Nuclear Pack的工作原理如下:
- 受害者訪問Nuclear Pack入侵系統的初始登入頁面,JavaScript程式檢測其滑鼠的移動;
- 受害者被重定向到JavaScript程式,由其決策哪個入侵系統對受害者進行攻擊;
- JavaScript程式重定向受害者到合適的入侵系統,提供引數解碼URL供漏洞有效負載取回;
- 入侵軟體在受害者機器上執行,為有效負載解碼URL;
- 入侵軟體下載適合受害者系統的合適的程式,並執行(在這個案例裡是Initial Dropper)。
在下面的Previct的介面中,你可以看到檢測的結果資訊:
事件的細節資訊如下:
這個Java程式成功控制了受害者,就像在下圖所看到的,它立即下載了惡意的可執行程式load2.exe(其MD5值是78cfa36112cd0797690327a9a07d5890 ,該程式即是上文中所提到的initial dropper)。
不尋常的可執行程式,詳細的分析
當我們第一次看到load2.exe時,很快就覺得這是一種誤報。程式樣本看起來根本不像是惡意軟體。VirusTotal的快速檢查結果也沒有幫助我們做出決定;根據VT的結果,這種情況看起來也像是一個可能的誤報。
Dropper病毒
Initial Dropper是NullSoft的安裝程式,它首先放置6個檔案到臨時目錄裡:
正如你在下圖中所看到的,被安裝的可執行程式有一個圖示,類似“設定”或“更新”符號;而被安裝的DLL中有一個的描述資訊是“Google Chrome Patches”。
然後,它啟動可執行程式檔案wobiqacaxa.exe
The Second Stage
Second Stage可執行程式(即wobiqacaxa.exe)會做一些數學計算,像下面的函式這樣:
從其它DLL中匯入函式:
並在main函式中呼叫它們:
它也會計算剩餘的電池壽命,這就是可執行程式的程度了。到目前為止還沒有什麼可疑的地方。
讓我們看看這些DLL。首先,它們在體積上都非常的小,每一個有一個匯出的函式。這些匯出的函式看起來並不非常可疑。在對它們做了一些檢查之後,有人會想說“這些東西不是惡意軟體,我們這麼做感覺像是在浪費時間”,並且你考慮就此停止。但接著,你提醒你自己截止目前已經在安裝程式中發現了非常奇怪的行為,因此得繼續分析。
讓我們看看:
動態庫womajejunuc.dll輸出了函式Nalexavo
動態庫tapevacanop.dll輸出了函式Miqudigob
動態庫horikipusac.dll輸出了函式humolu
這似乎沒有一點像是惡意軟體。但某些東西在困擾著你,你不想就此停止挖掘其中的祕密。為什麼會這樣?
並置
這些程式碼沒有任何意義,即使是對於一個合法的二進位制程式,也沒有什麼意義去做如下的事情:
1. 呼叫一個數學函式,諸如“y = 10 – cos(2x)”
2. 獲得本地貨幣格式,應用它到串”-3.80″,然後對它沒有再做任何事情
3. 計算剩餘的電池時間
4. 遍歷驅動器列表
所有這些僅僅是一個合法程式可能會使用到的常用函式,但不會一起並且不會以這種順序使用。在這個案例裡,這些是欺騙性的功能,它們似乎有一個唯一目的,即混淆自動檢測系統,反病毒軟體,或者那些甚至嘗試手工分析這些程式樣本的分析人員。
當我們檢查了之前所說的二進位制資料檔案(jepuculoguh.vat)後,所有的疑問消失了。
可以確定的是它的資料十分像是使用了一個短的密匙由序列加密法加密的模式。
解包
因此,除了之前所述的偽裝邏輯,這個惡意軟體會做如下事情:
(1) 計算一個解密密匙(由來自動態庫horikipusac.dll的humolu函式完成)
(1) 讀二進位制檔案到記憶體(由來自動態庫womajejunuc.dll的Nalexavo函式完成)
(2) 在記憶體中解密資料(由來自動態庫tapevacanop.dll的Miqudigob函式完成)
現在看看最後一個DLL:
動態庫Qotowokami.dll匯出函式Siwusonivin,它實現了相當於標準的處理模式“注入解密的資料到新的程式中”:
- 呼叫GetCommandLine和PathGetArgs去獲取初始安裝程式的路徑。這是可行的,因為安裝程式自己啟動被安裝的程式是作為在命令列上的一個引數
- 呼叫CreateProcessA去建立一個新的安裝程式的程式例項,但其被掛起
- 呼叫ZwUnmapViewOfSection和VirtualAllocEx去釋放初始程式的記憶體,並在被建立的程式裡為解密資料分配記憶體
- 呼叫WriteProcessMemory去拷貝解密的資料到程式地址空間
- 呼叫GetThreadContext,SetThreadContext和ResumeThread去改變程式中執行緒的入口點,然後使得它們繼續執行
但是,動態庫Qutowokami.dll本身並沒有包含任何函式名稱,函式Siwusonivin通過呼叫LoadLibrary和GetProcAddress動態地獲取所有的API函式。這些函式都位於解密的記憶體中。因此,沒有解密資料是不可能看見這個DLL的實際執行內容的。
沙盒和免殺
這個惡意軟體編寫的方式使得如果這些元件被單獨地分析或如果任意一個元件丟失,都非常難去識別出這個程式樣本應該要做什麼,以及是否它是惡意軟體。
由於絕大多數的反病毒產品沒有真正的分析(未知格式的)二進位制檔案,而僅僅是檢查整個檔案的雜湊值,而惡意軟體的作者越來越傾向在不可執行的二進位制檔案中儲存加密的惡意內容,然後使用一個單獨的檔案抽取加密內容,其中包含的是一個看起來並不讓人感到懷疑的載入/解密程式。我們已經在之前的文章(http://www.lastline.com/an-analysis-of-plugx)中探討過類似的技術。
我們的分析平臺檢測到了一個隱藏入侵:這個程式樣本嘗試讀取登錄檔鍵(HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES\DISK\ENUM)的值,並比較它的值是否有以下子串:
(1) “vbox” (出現在VirtualBox虛擬機器中)
(1) “qemu” (出現在QEMU虛擬機器中)
(2) “vmwa” (出現在VMWare虛擬機器中)
來檢查它是否工作在一個虛擬機器環境中。
所以這裡的解密資料還不是實際的內容,而是另一種殼程式,它首先檢查其是否執行在沙盒中(像這樣的虛擬機器隱藏入侵正在變得越來越常見)。
接著,這個殼程式解析API函式。需要說明的是包裝程式是通過雜湊查詢DLL的地址和API函式。惡意軟體的作者肯定不希望簡單地搜尋可疑的字串,比如可疑的API函式的名字,就能檢測到它。
殼程式最後會解密惡意程式碼,然後,以一種有趣的方法,為它建立一個匯入表:
對於它使用的每個API函式,首先檢測它的第一條指令 如果指令是跳轉指令jump(0xEB或0xE9),包裝程式獲取其目標地址,並遞迴地重複這個檢查過程 當找到第一個非跳轉指令時,包裝程式拷貝這條指令到分配的記憶體區,並在這條指令之後新增到實際API函式的第二條指令的跳轉指令
使用這種技術,惡意軟體可以逃避安全元件(比如:HIPS)的鉤子(hooks)。
下面是惡意軟體匯出函式的一個樣例。需要說明的是匯入使用的是跳轉指令jump(通常匯入的構成是呼叫指令call [x]或者jmp addr)
為了替換API函式,使得jump跳轉指令按照上文所述特定地產生了如下程式碼:
最後是沒加殼的程式碼
惡意程式碼是位置無關的,在經過重新構造後,它看起來像這樣:
這是一個典型的“後門程式”或者“繫結外殼程式”,它在一個埠上監聽,然後執行接收到的命令。並且因為所有的活動都是在隱藏進行的,又是做過免殺的,所以這個連線是未加密的,且沒有采取任何驗證方法進行保護。
結論
這個事件的簡要圖形摘要如下:
安裝的檔名 | 表面檔案型別 | md5 | 角色 |
Qotowokami.dll | PE32可執行程式(DLL) | 33a3d73982ff030150429f9e50ff9a00 | 被解密函式的注入程式 |
horikipusac.dll | PE32可執行程式(DLL) | 2551a6ed18384e6dececb5fc45bc839f | 解密密匙的計算程式 |
jepuculoguh.vat | 二進位制資料 | 3c641ccae35380feebe9d2d53ece8da9 | 加密的二進位制資料,解密後即是實際的惡意程式碼 |
tapevacanop.dll | PE32可執行程式(DLL) | 2bb51cf2091d124d15a28b19f9fd5326 | 加密二進位制資料的解密程式 |
wobiqacaxa.exe | PE32可執行程式 | ddb6d2b7a78e71522893c349ddee5195 | Second Stage可執行程式 |
womajejunuc.dll | PE32可執行檔案(DLL) | 5b1ff7476bf1787e4df9c9b74b05ba16 | 加密二進位制資料的讀入程式 |
功能模組與物理檔案對應關係如下:
Initial dropper 對應 load2.exe
second stage對應wobiqacaxa.exe
key calculator對應horikipusac.dll
encrypted binary data 對應jepuculoguh.vat
reader 對應womajejunuc.dll
decryptor 對應tapevacanop.dll
injector 對應Qotowokami.dll
Initial Dropper之後惡意軟體的執行過程如上圖所示:
- 執行wobiqacaxa.exe,其首先做一些數學計算
- 接著從安裝的DLL中匯入函式
- 獲取安裝的裝置和計算密匙(程式碼位於horikipusac.dll)
- 檢查電源狀態和電池壽命
- 開啟加密檔案,讀入它到記憶體中。做貨幣計算(程式碼位於womajejunuc.dll)
- 解密檔案到記憶體中(程式碼位於tapevacanop.dll)
- 獲取Initial Dropper程式的路徑,建立一個新的掛起的程式(程式碼位於Qotowokami.dll)
- 釋放當前程式記憶體,並在新程式空間中分配新的記憶體
- 注入解密的資料到新分配的記憶體中
- 改變入口點,然後繼續執行執行緒
- 從這裡開始進入解密後的程式碼中執行
- 檢查是否執行在虛擬機器環境中
- 如果不是,則再次執行解密,併為程式建立函式匯入表
- 安裝自己作為一個服務,名為SunJavaUpdateSched
- 開啟TCP套接字,在埠8000上監聽,當有連線請求到來時,啟動cmd.exe,其I/O重定向到了socket上
所有這些努力都是為了保護一個簡單的TCP繫結外殼程式,使其不被檢測到嗎?為什麼一個攻擊者會利用一個部署在Internet上的,位於受害機器的網路之外的控制入侵軟體?這樣做,他可能無法進入到缺乏抵抗力的主機。受害機器的IP處於RFC1918所規定的地址空間,攻擊者是無法通過Internet到達的。
一個可能的解釋是攻擊者來自於某個家庭網路。在這樣一個網路中的攻擊者可能不太關注對到本地網路中的其它機器上的連線進行加密,而更關心的是可以在網路中傳遞資料。
這似乎是攻擊者在受害者機器的網路中建立了一個前沿陣地後,想要訪問網路中其它機器時,進行橫向入侵的技術。使用從第一臺機器上搜集的資訊,他們可以製造一個可信的訊息(一種釣魚法),在潛在的受害者因為某種不可抗拒的原因訪問了一個包含在其中的URL時,採取如文章開始時所描述的方法,對受害者進行入侵控制。