1. 程式人生 > >病毒木馬查殺實戰第028篇:某APT攻擊的技術分析

病毒木馬查殺實戰第028篇:某APT攻擊的技術分析

樣本檔案基本資訊

本分析報告共涉及兩個樣本檔案,其基本資訊如下:

 

1號樣本

2號樣本

樣本名稱

處理籤(2018年)1304.pdf.hta

組織部幹部四處最新通知更新.doc.exe

MD5

daa8abf46f49bea46a45b7f44fd6b02c

31064883832730d5d0562f403f388d2b

檔案型別

HTA(HTML Application)

PE/EXE自解壓可執行程式

檔案大小

1,485,178 位元組

1,462,408 位元組

數字簽名

Microsoft Corporation(校驗未通過

編譯時間

2016-08-15 03:15:54

以上表格中的紅色字型部分為這兩個樣本檔案靜態特徵中的可疑之處,接下來會圍繞這些可疑的地方進行分析。

 

樣本偽裝方式分析

該樣本使用了一定的社會工程學手段來打消使用者對樣本的顧慮,從而讓使用者認為這是正常的文字類檔案。比如從檔案的名稱上來看(不考慮檔案字尾副檔名),1號樣本名為“處理籤(2018年)1304”,2號樣本名為“組織部幹部四處最新通知更新”。由檔名稱可以得出下述第一條結論:

該惡意程式所攻擊的目標物件是我國的政府機關或事業單位

之所以能夠得出這個結論,是因為檔名稱中使用了“處理籤”以及“組織部幹部”這樣的詞彙,而包含這樣詞彙的檔案,基本都是出自我國的政府機關或者事業單位。而類似於這種通知類檔案,也是政府機關裡面幾乎每天都會遇到的檔案,這兩個檔案如果混在每天待處理的事務中,就會起到很好的迷惑效果。惡意程式的作者試圖採用這樣的欺騙方式,來消除機關事業單位行政人員的戒心,從而讓自身得到執行的機會。這類惡意程式的來源,一般都是電子郵件的附件,惡意程式的作者可以編造郵件的正文內容,並附上這些檔案,讓使用者下載並執行它們,賭的就是使用者不會去認真檢視郵件的來源是否真實可靠。這就是該樣本所採用的第一處社會工程學手段

接下來可以看一下這兩個樣本的副檔名(字尾),檔案的擴充套件名錶明瞭該檔案是什麼型別的檔案,也是我們的系統判定目標檔案要採用什麼方式開啟或執行的依據。如果依照上述表格中的內容,那麼可以知道這兩個檔案分別是HTA以及EXE型別的檔案,可是在這之前的紅色字型部分,卻出現了.pdf以及.doc這樣的字元,從而讓使用者以為它們就是普通的文字文件,從而失去了戒心。因為我們的Windows系統在預設的情況下,是不會顯示檔案的副檔名的,因此上述兩個檔案在我們的計算機中,一般是按照如下方式(大圖示)顯示的:

或者是這樣的方式(詳細資訊):

可以看到,不論是哪種顯示方式,檔案的“字尾名”都分別是.pdf和.doc,甚至那個所謂的.doc檔案的圖示,與word文件的圖示一模一樣,於是也就會更具迷惑性了。惡意程式的作者一方面就是在賭目標攻擊物件對於文件檔案沒有戒心,而另一方面就是在賭目標物件沒有在自己的系統裡面開啟“顯示副檔名”的功能,因為如果開啟這一功能的話,則會顯示如下內容:

現在每個檔案後面都出現了兩個副檔名,而每個檔名稱最後面的副檔名,才是該檔案的真實副檔名。其實如果我們留意一下“型別”這一列的內容,也可以立刻知道該檔案的型別,而如果使用者看到了兩個副檔名的話,自然會對這些檔案有戒心的。這就是該樣本所採用的第二處社會工程學手段。有關病毒在檔案命名方面的花招,也可以參考這篇技術文章:https://blog.csdn.net/ioio_jy/article/details/51198687

接下來可以在虛擬機器中嘗試執行一下這兩個檔案,首先執行的是“處理籤(2018年)1304”這個檔案,可以看到它在執行以後,打開了一個PDF文件:

由於我的虛擬機器中並未安裝PDF閱讀器,因此這裡預設使用瀏覽器來開啟該PDF檔案。而在瀏覽器的位址列裡面,可以發現該PDF檔案的路徑為:

file:///C:/Documents and Settings/Administrator/Local Settings/Temp/Adobe PDF.pdf

這個路徑並不是我們剛剛執行的“處理籤(2018年)1304”檔案的路徑,說明這個檔案是新建的,有理由懷疑,這個新建的PDF檔案是由“處理籤(2018年)1304”所釋放出來的。

由上圖可見,該PDF文件提示我們輸入密碼。可是這個密碼卻是未知的,因此這個PDF檔案是無法開啟的。惡意程式的作者之所以給攻擊物件一個無法開啟的PDF文件,主要有以下兩點原因:

第一,如果不給攻擊目標提供一個PDF文件,那麼必然會引起使用者的懷疑,也就是說使用者明明已經點選了“處理籤(2018年)1304.pdf”,可是自己的計算機卻沒有任何反應,這就是一件很奇怪的事情了。而有了這個PDF文件,使用者就不會懷疑自己的計算機出現了問題,此時惡意程式就可以在使用者毫不知情的情況下,在後臺隱祕執行了。

第二,惡意程式的作者可能會計劃攻擊多個目標部門,甚至是不同領域不同行業的部門,因此他不可能知道這些部門的真實組織架構及人事情況。基於這個原因,如果惡意程式的作者在PDF文件中偽造一個虛假的內容,那麼該內容很容易就會得到驗證,從而引起使用者的懷疑。而將該PDF檔案設定為帶密碼的模式,就可以徹底打消使用者的疑慮,因為使用者發現無法開啟這個PDF檔案以後,會覺得這個檔案和自己關係不大,那麼也就不會不斷地去嘗試不同的密碼了。這就是該樣本所採用的第三處社會工程學手段

接下來嘗試在虛擬機器中執行一下“組織部幹部四處最新通知更新”這個檔案。可以看到在執行之後,一個word文件被打開了:

與之前所開啟的那個PDF檔案相比,這個word文件並沒有設定密碼,但是它的內容卻是以一種很模糊的狀態顯示的。給人以一種這個word文件內容被損壞了的錯覺。如果繼續往下看,還會有一些亂碼存在:

於是就更加使得使用者相信這個檔案被損壞了。但奇怪的是,這個word文件最上方的標題欄卻顯示當前檔名是“Ms Word ~tmp.docx”,而不是“組織部幹部四處最新通知更新”,那麼就有理由懷疑,當前這個檔案是剛剛被釋放出來的。

其實如果我們將“Ms Word ~tmp.docx”這個檔案的字尾改為.zip,就可以解包這個word文件檔案,從而可以看到如下目錄結構:

這裡依次開啟word目錄->media目錄,就可以發現兩個圖片檔案:

這裡開啟名為hdphoto1.wdp的檔案,可以看到如下內容,也就是word文件裡面的模糊部分

隱約可以看到這個圖片正文內容是“華為城市雲優勢”,如果利用搜索引擎搜尋這個關鍵詞,可以發現它最早出現在2017年的6月:

於是可以知道這個惡意樣本也是出自這個時間之後,結合圖片中的文字內容,可以得出如下第二條結論:

該惡意程式的作者極有可能是亞洲人,甚至就是出自我國的黑客之手

惡意程式的作者之所以讓“組織部幹部四處最新通知更新”這個檔案釋放出一個word文件,其目的和“處理籤(2018年)1304”釋放出一個pdf檔案是一樣的,都是一種社會工程學的手段,來打消使用者的疑慮,從而讓木馬在後臺靜默執行,這裡不再贅述。

 

HTA樣本分析

這裡可以首先分析一下“處理籤(2018年)1304.pdf.hta”這個檔案。為了獲取該樣本的行為,可以在虛擬機器中通過監控程式獲得。對於任何一個樣本而言,我們最為關注的是惡意程式的檔案登錄檔以及網路方面的行為資訊。由於該樣本是HTA格式的檔案,而該檔案在Windows作業系統中是依託於mshta.exe這個程式執行的,因此為了獲取該HTA樣本的行為,只要監控mshta.exe這個程序就可以了。首先可以看一下檔案監控

可以發現,樣本在臨時資料夾(Temp)中建立了名為Adobe PDF.pdf的檔案,這也是我們之前已經發現的行為。接下來看一下登錄檔監控

可以看到,該惡意程式通過登錄檔獲取了諸如計算機名稱、作業系統名稱以及版本號等資訊,有理由懷疑,該惡意程式接下來會將這些資訊傳送至遠端伺服器。

最後再看一下網路監控

在這裡可以發現大量的HTTP連結請求,目標域名均為:

mnggmcggmlggmhggmdggidggjhggjlggjpggjiggjlggmkggjlggmkggjngg.ijmlajkn.audreybourgeois.com

IP地址是216.107.152.223,埠號都是80,即HTTP埠。查詢該IP地址的詳細位置,可以發現它位於美國的伊利諾伊州:

查詢該域名的詳細資訊,可以知道它是在2018年4月6日建立的,期限為一年:

該域名已於2018年4月19日被 “微步線上”判定為是惡意遠控網站,屬於“海蓮花團夥”:

該網站也被“360威脅研判分析平臺”定義為是海蓮花團夥(OCEANLOTUS)的惡意網站:

惡意程式執行後,就會向該網站不斷髮送資訊:

由上面的監控結果可知,惡意程式每隔6~10秒就會向該網站發起一次POST請求,也就是把本地的資料傳遞過去。以上就是該HTA惡意程式完整的監控行為,為了獲取其詳細行為,則需要對該樣本進行深入分析。

利用文字編輯器開啟這個樣本,可以發現它的主體部分是使用VBScript編寫的:

檢視主體程式碼,可以發現大量的拼接(&)、取字元(mid)與替換(replace)等的操作:

由於參與拼接等運算的字串都是以大小寫字母數字組成,而且由replace()函式可知,加密字串中還包含有=/以及+等字元,由此可以斷定,該惡意程式的主體部分使用了Base64的加密方式。該惡意程式首先會通過一系列的計算,拼接出經過Base64加密的程式碼,然後對其進行解密,從而執行一系列的惡意功能。

程式中主要包含三塊Base64加密的字串,分別是名為Shiw的字串(11,228 位元組)、名為KodQiw的字串(11,352 位元組)以及位於整個HTA程式後半部分的字串(1,434,508 位元組)。其中的Shiw字串解密後如下所示(8,506 位元組):

KodQiw字串解密後如下所示(8,600 位元組):

位於HTA檔案最後的字串,經過Base64解密後如下所示(1,080,227 位元組):

在解密出來的Shiw以及KodQiw裡面並未發現可疑的用於攻擊使用者計算機的程式碼部分,但由其中所包含的System.Reflection.Assembly Load(Byte[], Byte[])等字串可以知道,它們會實現載入dll或者exe程式的功能。上圖中經過Base64解密後的,起初位於HTA檔案最後的程式碼,可以看到依舊是處於不可分析的亂碼狀態。那麼可以知道,將這片程式碼解密之後,可以得到一個PE檔案(dll或exe程式),用於實現該惡意程式的核心功能。

為了獲得解密後的檔案,可以在虛擬機器裡面利用OllyDbg對該HTA檔案的宿主程式,即mshta.exe進行除錯,並將HTA樣本的路徑設定為除錯引數即可。由之前的分析可以知道,該惡意程式會將自身後半部分的程式碼以Base64的方式進行解密,然後再通過某種演算法做第二輪的解密操作,最終得出真實的木馬檔案。那麼這一系列的解密過程,必然會佔用一定的記憶體。也就是說,該惡意程式在解密之前,需要先申請一片記憶體區域,然後將待解密的部分拷貝過去,最後再將該區域中的程式碼進行解密。因此,我們只要監控記憶體的分配情況,就可以獲取最終的本體檔案,也就是在OllyDbg裡面,對記憶體分配函式VirtualAlloc下斷點,監控該區域資料的讀寫情況,最終就可以發現一個PE檔案:

這片記憶體區域的起始位置是0x03DD0000,而PE檔案的起始位置是0x03DD01EC。提取(Dump)出這片記憶體的資料,也就是從0x03DD0000開始到0x03E25FFF的內容。可以發現在PE檔案的前面還有大小為0x1EB的配置資訊:

整理出這片區域重要的字串資訊如下:

ghijklmnopz

SOFTWARE\App\AppX70162486c7554f7f80f481985d67586d\Applicationz

SOFTWARE\App\AppX70162486c7554f7f80f481985d67586d\DefaultIcon

susanmercure.com

becreybour.com

beaudrysang.xyz

其中第一行的“ghijklmnopz”字串用於生成惡意域名。樣本的上線域名字串由兩部分組成,一部分由電腦主機名生成,一部分為4位元組的樣本版本ID即0x2365a384。域名生成演算法首先將計算機名(Unicode編碼)轉換為小寫字母,然後再把該段記憶體的小寫字母轉換為十六進位制(Hex)字串,接著挨個判斷該Hex字串的位元組,如果在0x2f和0x3a之間,就將該位元組減去0×30後做為編碼表(ghijklmnopz)的索引值,再通過索引值在編碼表中取得最終該位元組對應的編碼,如不在0x2f和0x3a之間,則不進行處理。使用Python2.7還原其生成演算法如下:

程式執行後的結果如下:

可以看到,這裡所生成的域名和之前通過監控得到的域名是一致的。

繼續分析之前所提取出來的字串。第二、三行是由惡意程式新建的登錄檔項,用於寫入session ID。客戶端第一次連線伺服器,伺服器會返回一個UUID作為session ID。Session ID會以二進位制資料的形式儲存在登錄檔中:

最後三行域名均被“微步線上雲沙箱”定義為惡意網站,該樣本會將上述計算出來的域名與這幾個域名進行組合,以生成最終的惡意域名:

最後分析一下剛剛Dump出來的PE檔案。它是一個標準的dll檔案(MD5:a3f6d8675b659e1f571cf2282b570023),屬於擁有完備功能的後門類惡意程式。可以為遠端操控者提供諸如檔案管理、登錄檔操作、程序控制、載入額外元件以及獲取系統資訊等功能。如下為該惡意程式所提供的功能列表:

命令編號

功能描述

0

獲取計算機基本資訊

1

設定Session ID

2

利用管道技術(pipes)建立程序並獲取輸出結果

3

設定連線計數器

4

延遲輪詢時間

5

讀取檔案或登錄檔鍵值並計算MD5值

6

建立程序

7

在記憶體中建立檔案、登錄檔項或資料流

8

編輯登錄檔

9

查詢登錄檔

10

檔案查詢

11

檔案移動

12

檔案刪除

13

獲取系統中的碟符情況

14

建立目錄

15

刪除目錄

16

檔案內容讀取(從指定的位置)

17

執行PE檔案載入器

18

未知

19

0:查詢登錄檔鍵值,1:執行一個程式

20

設定環境變數

21

在新的執行緒中執行shellcode

22

獲取環境變數

23

木馬重啟(新版本木馬的功能)

這裡以檔案操作為例,對關鍵程式碼塊進行分析。比如為了獲取檔案資訊,該惡意程式就呼叫了__stat64這個函式:

它通過FindFirstFileExA實現檔案查詢的功能,利用GetDriveTypeA實現獲取磁碟型別等操作。並且由上圖可以知道,__stat64是由sub_10034E94呼叫的,並且還是唯一的呼叫源。而sub_10034E94出自sub_100351EE

分析sub_100351EE的程式碼,可以發現3處呼叫了sub_10034E94

在獲取到檔案資訊之後,則會跳轉到如下程式碼位置,構造HTTP連線的內容,將獲取的本地計算機資訊傳至遠端伺服器:

如果繼續溯源,可以發現最初用於對檔案進行操作,並用於構建發往伺服器端的HTTP資訊的框架的程式碼,是在sub_1002DC14模組中實現的:

在該函式程式碼的起始位置,則會依據由攻擊者發來的命令編號確定HTTP協議建立的請求方法:

可以看到,這裡採用了POSTPUTGET以及HEAD這四種方法。當命令編號為0、1時,使用GET方法;為2、3時,使用POST方法;為4時,使用PUT方法;其餘情況為HEAD方法。

該木馬前0~10項後門操作的任務分發功能由函式sub_10026EE3實現,其流程圖如下:

這是一個典型的switch語句程式,其switch跳轉表如下:

而由函式之間的呼叫關係流程圖也可以知道,函式sub_10026EE3確實是一個樞紐,起到了承上啟下的作用:

       以上就是整個HTA樣本檔案的分析。

 

EXE樣本的行為分析

首先可以看一下該樣本的數字簽名信息:

可以看到,該樣本對於自己的描述是微軟的Office 2013程式,但奇怪的是它的數字簽名驗證(Verified)卻是亂碼,也就是驗證未通過。而我係統中真實的word程式的數字簽名情況如下:

真實的word程式(WINWORD.EXE)的數字簽名狀態為Signed,即驗證通過的狀態。幷包含有完整的簽名時間以及釋出者等資訊。二者一對比就可以發現本次分析的exe樣本是偽造的,它意圖採用偽裝成word程式的方式來打消攻擊目標的顧慮。

接下來可以發現,該EXE樣本是一個自解壓程式,其本質相當於是一個壓縮包,利用WinRAR開啟這個檔案,可以看到如下資訊:

由上圖可知,該自解壓程式在執行後會釋放出兩個檔案,一個是我們之前已經發現的word文件,另一個是名為{fc74af29-a44c-445b-9c8d-3f4921841dcd}.ocx的PE程式。但是類似於.ocx類的檔案是無法獨立執行的,需要藉助於Windows系統中的regsvr32.exe程式才能夠得到執行,關於這一點,在上圖中的指令碼程式裡面也得到了體現。也就是說,當不知情的使用者執行了這個自解壓程式以後,在檢視所釋放出來的word文件的同時,其實就已經被植入木馬了。

這個.ocx檔案的內部存在有資源的內容(945,412 位元組):

由這裡所出現的字串“This program cannot be run in DOS mode”可以知道,這個資原始檔中隱藏有另一個PE檔案。因此有理由懷疑,當前的這個.ocx檔案在執行以後會解密釋放出另一個PE檔案並執行。

利用監控程式對regsvr32.exe進行監控,可得如下資訊:

可以看到,惡意程式在獲取本地計算機資訊,如計算機名稱、版本號等,接下來通過聯網操作傳送到遠端伺服器:

關於這個網站的資訊,之前已有過分析,這裡不再贅述。可見,通過監控程式所獲得的這個樣本的所有行為與上一個樣本是一致的,初步懷疑這兩個樣本執行了相同的功能。那麼這裡也可以利用同樣的方式將隱藏在樣本中的惡意程式本體給Dump出來。也就是利用OllyDbg除錯regsvr32.exe這個程式,在執行引數中輸入.ocx檔案的完整路徑,結合設定在VirtualAlloc函式上的斷點,就可以找到最終解密出來的PE檔案了:

該記憶體區域起始於0x00DA0000,結束於0x00DF5FFF,在PE檔案的前面同樣有一個配置資訊:

如果將這個頭部區域去掉,則可以得到一個標準的dll程式(MD5:7db77ab80e2ec218dc75116a38538385)。由於該程式與我們在上一個樣本中所提取出來的dll程式的MD5值不一樣,因此不妨做一下二進位制層面的對比,結果如下:

在上圖中,左側是當前樣本提取出的dll檔案,右側是上一個樣本提取出來的。可以看到,從偏移為0x00054400位置開始,就出現了大量不一樣的內容。但是通過分析這兩個PE檔案的結構可以知道,它們都存在有附加資料(Overlay)的內容,它位於檔案最後一個節區之後。在PEiD中可以看到,樣本檔案的最後一個節區名為.reloc,偏移為0x00051200,大小是0x00003200,二者相加即0x00054400,也就是說從0x00054400位置開始,就是檔案的附加資料內容:

        這裡的附加資料主要也是一些配置資訊:

也就是說,兩個樣本所提取出來的dll檔案的主體部分是一樣的,僅僅是附加資料不一樣,因此可以得出結論:這兩個樣本所執行的功能是完全一致的。因此這裡不再對該dll檔案進行分析。至此,第二個樣本也已經分析完畢。

 

樣本執行流程總結

現在可以總結一下這次分析的兩個樣本的執行流程,首先是HTA樣本:

該樣本是利用VBScript寫成的HTA檔案,執行後會利用Base64解密演算法對自身進行解密操作,得出一個pdf文件和一個dll程式。這個dll程式是木馬的主體檔案,用於實現後門的功能。

下面是exe樣本的執行流程:

該exe樣本是一個自解壓檔案,程式執行後會釋放出一個docx檔案和一個ocx檔案,docx檔案僅僅起到迷惑作用,之後再對ocx檔案進行解密操作,釋放出最終的實現惡意功能的dll檔案,以實現後門的操作。

 

補充說明

分析以往“海蓮花”組織所採用的攻擊手段可以知道,在2017年,該組織會使用真實的word文件檔案進行攻擊,而沒有采用類似於本報告中所運用的exe自解壓程式。當時的word文件之所以可以實現攻擊的操作,是因為該組織使用了word中存在的CVE-2017-8759漏洞。利用該漏洞就可以實現後臺下載的功能,從而將木馬程式靜默安裝到使用者的計算機裡面並執行。但是隨著微軟及時釋出補丁,加上該漏洞修復至今已經過了一年多的時間,因此對於攻擊者而言,再利用這樣的方式進行入侵會大大降低攻擊成功的概率,所以才會採用本報告中所論述的形式。而通過分析惡意程式所釋放出來的docx檔案可以知道,該檔案中並不包含漏洞利用程式碼。畢竟當docx檔案被開啟的時候,也就說明使用者的計算機中已經被植入了dll後門木馬,所以從邏輯上來說也沒有必要再使用漏洞攻擊的手段。

其次,在本報告中所分析的兩個樣本里面,都沒有發現駐留或自啟動的行為,也就是說,當用戶重啟電腦,或者關閉mshta.exeregsvr32.exe這樣的宿主程序以後,惡意程式也就被關掉了,除非使用者再次開啟惡意程式,木馬才會重新在記憶體中執行。只有在木馬存續期間,攻擊者通過遠端操控使用者計算機,將木馬程式設定為諸如開機啟動項,才能夠使得木馬長期執行在受害者的計算機裡面。惡意程式的作者之所以不為其新增自啟動之類的功能,初步懷疑是由於類似於這樣的功能,很少出現在正常的程式裡面,而現在的防毒軟體對於樣本的行為監控十分敏感,如果發現樣本中存在新增自啟動項之類的操作,輕則僅僅提示使用者是否放行,重則直接攔截並將其列為可疑檔案傳至雲端,由高階查殺引擎反病毒工程師進行詳細分析。因此,惡意程式的惡意特徵越不明顯,越有可能躲避掉殺軟的查殺。而直接由攻擊者通過遠端操作新增啟動項,相對來說是一種保險的做法。

 

防範措施

由這兩個檔案所採用的自我保護措施可以發現,現在惡意程式的偽裝技術已經日益成熟並更具有迷惑性。很多時候其實就是一封電子郵件、一份Word文件、一個連結,就打開了攻擊的大門。因此作為政府機關的工作人員應當學會分辨哪些文件是可疑的,哪些是可以被信任的。而且對於自己的電腦,也應當及時地打補丁,特別是作業系統的補丁,一定要在第一時間下載安裝。對於來歷不明的網站以及檔案等,絕對不可以隨意點選。也就是要從源頭上,從思想意識形態上來杜絕黑客的攻擊,這樣即便是黑客採用再高明的木馬技術,也沒辦法侵入我們的計算機。因此這就需要單位對自己的員工做相關的電腦保安培訓,讓大家瞭解這些偽裝技術,就可以保障我們的安全。

其次,我們的計算裡面也應當安裝防毒軟體。目前一些頂尖企業的防毒產品的監控技術已經非常成熟,只要發現運行了一些可疑的檔案,都會第一時間將其攔截下來。所以安裝一套強大的殺軟,很多時候就可以彌補我們自身對於黑客攻擊技術不瞭解的不足。

最後,有條件的單位的技術人員,也可以依據這些常見的攻擊模式,自己開發一套檔案檢測軟體,可以在這套軟體裡面設立一些攻擊規則,把滿足這些規則的程式給攔截下來。很多時候,類似於這種“專殺工具”對抗惡意程式的效果,是要優於防毒軟體的。舉個簡單的例子來說,我們可以編寫這樣的一條規則:只要發現目標檔案的檔名有雙重字尾,就直接將其判定為是可疑檔案。比如我們這次的樣本,一個字尾是“.pdf.hta”,一個是“.doc.exe”,正常的檔名是不會出現這樣的情況的,因此這樣的一條規則,就可以對抗千千萬萬未知的威脅了。