1
概述
近期,我們正在研究DNS隱蔽信道通信技術,找到了?個BondUpdater樣本,通過對此樣本的分析,來了解某些惡意軟件是如何使?DNS隱蔽信道通信技術實現通信的,從而方便我們研究如何檢測此種攻擊。
2018年8?,Unit42發現OilRig針對中東政府組織使??叉式釣?郵件,投遞了?個新版本的BondUpdater。
OilRig是伊朗的APT組織,2016年被Unit42發現,?直處于活躍狀態,經常對中東地區的政府機構和企業發動網絡攻擊。2017年11?,基于PowerShell的特洛伊??——BondUpdater被FireEye?次發現,其包含基本的后?功能,能夠使攻擊者上傳/下載?件,執?命令。
與OilRig組織的其它?具?樣,BondUpdater使?DNS隧道與C2服務器進?通信,新版本的BondUpdater??能夠在DNS隧道中使?TXT記錄與C2進?通信。
2
樣本分析
MD5:52b6e1ef0d079f4c2572705156365c06
(2.1)提取關鍵文件及代碼
此樣本是?個word?檔,?Microsoft Word打開?下看看。
可以看到樣本中嵌?了宏代碼,而利?word?帶的宏編輯器是看不到宏代碼的。
我們可以通過oledump或者oletools來提取宏代碼,我這?使?oledump。
如圖所示,宏代碼存在于第7段,我們將其轉存為ThisDocument.vb
Python oledump.py -s 7 -v
7cbad6b3f505a199d6766a86b41ed23786bbb99dab9cae6c18936afdc25
12f00_doc > ThisDocument.vb
ThisDocument內容如下:
運?宏,?先執?Document_Open函數,此函數調?AAAA函數,在AAAA函數中,調?HGHG函數,分別創建兩個?件,AppPool.vbs和AppPool.ps1,將宏代碼中嵌?的vbs代碼和powershell代碼寫?這兩個?件中。
之后通過執?
wscript
C:ProgramDatawindowsAppPoolAppPool.vbs
運行AppPool.vbs
我在虛擬機中跑?下,將這兩個?件提取出來。
AppPool.vbs內容如下:
當AppPool.vbs?次執?時,其創建了?個每分鐘執?的計劃任務,使???件能夠被不斷執?。
然后通過
PowerShell.exe -exec bypass -file
C:ProgramDataWindowsAppPoolAppPool.ps1
運?AppPool.ps1
AppPool.vbs后續的執?過程中,會判斷是否存在"quid"的?件,如果存在,就使?上述powershell腳本運?AppPool.ps1。
AppPool.ps1?次運?時會創建quid?件,以避免創建多個計劃任務。
AppPool.ps1內容如下:
此處的AppPool.ps1是經過經過初步處理的,主要的操作都是由此powershell代碼實現,通過DNS隱蔽信道與C2進?通信的代碼也在其中。
(2.2)分析關鍵代碼
AppPool.ps1代碼?致流程:
2.2.1 創建lock、qiud文件
在?錄
C:ProgramDataWindowsAppPool
創建lock、qiud兩個?件
lock?件寫?的是當前powershell進程的PID號,powershell腳本會檢測當前時間和進程啟動時間之差是否超過10分鐘,如果超過10分鐘就會終?進程并刪除lock?件。
quid的內容是由GUID(全局唯?標識符)的前?個字符和?個兩位的隨機整數組成。
2.2.2 在quid中創建3目錄
以quid中的內容為?件夾名稱在?錄
C:ProgramDataWindowsAppPool
創建?件夾,還創建了“files”?件夾,再在第?個?件夾中創建三個目錄,“sendbox”、“receivebox”、“done”。
sendbox?于存儲將要發送到C2的?件,receivebox?于存儲從C2接收到的命令?件,done也是?于存儲從C2接收到的?件,以便將來使?。
2.2.3 發起DNS請求
構造域名,發起包含初始信標的DNS請求,通知C2開始通信
參數中的“M”就是操作的類型,是初始信標,表示開始通信,“r”表示按接收數據的格式?成域名。
2.2.4 定期與C2通信
從C2接收命令,將命令寫?到?件,并保存在“receivebox”?件夾中。
每隔50毫秒嘗試與C2進?通信?次。
dns_request_TXT功能為構造DNS請求數據包,發起DNS請求,返回響應包數據。
這?的dns_request函數有兩種,分別是發送DNS A記錄請求和TXT記錄請求,下?在分析通信協議的時候會提到。
-
如果??發送的是DNS A記錄請求,??會從A記錄響應包中的address段(ip)提取數據。
-
如果??發送的是DNS TXT記錄請求,??會從DNS TXT記錄響應包中的TXT段(存儲數據)提取數據。
C2傳輸數據到??總共有兩種傳輸?式,?是通過域名響應ip進?傳輸,這種是通過發送A記錄請求,另?種是通過TXT記錄進?傳輸。
上?圖?中的代碼是對DNS TXT記錄響應包進?處理的過程。
??會將接收到的TXT數據以“>”分開,左邊的作為指令,右邊的作為數據。左邊的指令決定??將會如何處理右邊的數據,具體的處理規則會在下?節進?描述。
從響應包中解析出的指令和數據,會以?件的形式存儲在receivebox?件夾下,以待后續處理。
2.2.5 命令解析
對接收到的命令進?解析,執?命令,然后將結果寫??件,保存在“sendbox”?件夾下,以待后續發往C2。
?論是通過A記錄進?接收的數據,還是通過TXT記錄接收的數據,都以?件的形式保存在receivebox?件夾下,?件名以“rcvd”開頭。
并且使?相同的?件處理程序,?件處理程序根據?件名的最后?個字符,決定怎么處理以此?件名為名字的?件的內容。
2.2.6 命令結果回傳
將命令執?結果結果傳回C2服務器。
"s"是以發送數據的格式?成域名,?件的名稱和內容是通過域名來進?傳送的,$SSE代表數據塊,$TTE代表?件名。
下節中的數據格式的介紹中會具體提到這些參數。
(2.3)通信協議分析
2.3.1 數據格式
發送數據格式:
<包含分?號、操作類型、GUID前8字符、隨機?位整數的字符串><序號><1~7個隨機字符>C<分?號偏移><操作類型偏移>T.<數據塊>.<?件名>.<C2域名>
接收數據格式:
<包含分?號、操作類型、GUID前8字符、隨機?位整數的字符串><序號><1~7個隨機字符>C<分?號偏移><操作類型偏移>T.<C2域名>
分?號偏移和操作類型偏移都是相對GUID前8字符和隨機2位整數組成的字符串的。
接收數據格式的第?部分包含分?號、操作類型、GUID前8字符、隨機?位整數的字符串。???先?成GUID號,然后取GUID號的前8位與?個2位隨機整數相連接形成基礎字符串,最后將分?號和操作類型隨機插?基礎字符串。
第?部分是1~7位的隨機字符串。
第三部分就是C和T以及中間的兩個數字,第?個數字為操作類型在基礎字符串中的偏移,第?個數字為分?號在基礎字符串中的偏移。
第四部分就是C2域名,發送數據格式和接收數據格式的區別就是多了數據塊和?件名。
2.3.2 DNS請求中包含的操作類型
將此操作類型包含在?成的?域名中,可以通知C2在響應數據包中使?那種數據格式。
例如:如果操作類型是“W”,C2會發送響應包的TXT段以“S000s”為開頭的數據,發送的數據會作為?件名。
如果操作類型是“0”,C2會將域名響應ip置為“24.125.[d].[d]”,使??將ip地址的后兩段作為?件名進?接收。powershell代碼中寫了兩種記錄的DNS請求?法。如下圖所示:
A記錄請求:
TXT記錄請求:
2.3.3 文件名末尾字符含義
因為??從C2接收的數據都是以?件的形式存儲在“receivebox”?件夾下的,所以當??從C2接收完所有的數據后,會執??件處理程序。?件處理程序會根據以上協議對接收到的數據進?處理。
2.3.4 原始數據傳輸過程中的域名解析IP 地址及含義
原始數據傳輸就是通過A記錄傳輸的,數據是放在DNS響應包的address段的ip地址中的。
??發送包含“0”操作類型的DNS請求,C2就會將響應ip地址設為形如“24.125.[d].[d]”的地址,并將?件名填充在??。
??接收到數據會將其與“rcvd”連接在?起,作為?件名,并修改操作類型為“1”。然后??開始發送包含“1”操作類型的DNS請求,C2就會將響應ip設為形如“[d].[d].[d].[d]”的地址,并將數據填充在??。
如果數據發送完了,C2就會將響應ip地址設為形如“1.2.3.[d]”形式的地址。??接收到后就會將數據存在以前?接收到的?件名為名的?件中,并保存在“reveiveboc”?件夾下。
2.3.5 其他域名解析地址含義
這些IP地址是整個通信過程中除去原始數據傳輸過程中的域名解析IP地址以外的IP地址。“99.250.250.199”?于表示??想要與C2開始通信。
因為有些數據?較?,所以會分?進?傳輸,“[quid.substring.(0,2)].2.3.[d]”的最后?段表示?前傳輸的分?號,?于判斷數據是否完整傳輸完成。
當?件的字節數?于60字節,就需要多次傳輸,??被我設置了數據傳輸?度的閾值為60。
2.3.6 新數據傳輸協議指令含義
新數據傳輸協議就是通過TXT記錄進?傳輸數據。當??發送操作類型為“W”的TXT記錄DNS請求,C2就會回復?個包含TXT數據的響應包,響應包中的TXT字段存儲了C2發給??的數據,數據以“>”號分隔開來。
如果“>”左邊的字符串為“S000s”,??就將“>”右邊的數據與“rcvd”連接,作為將要存儲數據的?件的?件名,然后將操作類型置為“D”。
然后發送包含操作類型“D”的TXT記錄請求,C2會回復TXT數據中“>”左邊為“S”的響應包,??會將“>”右邊的數據進?base64解碼,并將下?次請求的操作類型置為“D”。
再發送包含操作類型“D”的TXT記錄請求,直到數據發送完成,然后C2會回復TXT數據中“>”左邊為“E”的響應包,??會將base64解碼后得到的數據寫?執?“S000s”指令后?成的?件名的?件中,然后跳出循環。
3
總結
通過對此樣本的分析,我們得出?些DNS隱蔽隧道通信的特征、方式和通信所使?的協議,方便后期對容易軟件的類別分析。
C2和受控主機對對彼此之間傳輸的數據進?解析,形成有?套通信協議。數據如果通過A記錄傳送,就存在于域名中(受控主機向C2發送數據)或者域名解析IP中(C2向受控主機發送數據);如果通過TXT記錄傳送,就存在于響應包中的TXT字段中。
?前很多APT攻擊和惡意軟件使?DNS隱蔽信道進?通信,所以對DNS隱蔽信道通信進?檢測是?件很有意義的事情。
本文轉自公眾號“安恒風暴中心”