一.介紹
近日,Gcow安全團隊的追影APT分析小組在公共的檔案分析平臺上捕獲到了名為DustSpuad的APT組織,針對烏茲別克的外交部進行的一起網路攻擊活動.所使用的正是名叫Octopus的Windows惡意程式
Octopus惡意程式的名稱最初由ESET在2017年由APT組織在其舊C2伺服器上使用的0ct0pus3.php指令碼之後創造。卡巴斯基透過其監控平臺發現Octopus惡意程式與DustSquad有關.在遙測中,我們發現這個組織對中亞共和國以及俄語系的國家產生著濃厚的興趣
此外,該組織專注於中亞使用者以及外交實體,並且透過檔案中的特殊字元,以及其手法,推斷該組織可能來源於俄羅斯
二.樣本分析
(一).釋放者:
(二).壓縮包所包含的檔案:
(Octopus 載入器)
偽裝成word檔案,擁有word的圖示.對於一些安全意識差的人員。這種偽造手段的成功機率較高
透過ExeInfoPE工具檢視樣本資訊,發現該程式由Delphi編寫
根據我們的分析,該樣本的主要惡意部分在start()函式內
現在我們將利用ollydbg的動態除錯以針對該樣本進行分析
1).透過GetTickCount()和QueryPerformanceCounter()函式獲取當前系統執行時間
2).資訊收集部分
1.收集本地IP地址:
透過初始化WSAStartup透過呼叫gethhostname()獲取本地主機名稱,再透過gethostbyname()傳入獲取的本地主機名稱以獲取本地IP地址
並且將收集好的地址以Local IP Addr:{本地IP地址}的形式進行拼接
2.本地計算機名稱
透過GetComputerNameW()函式獲取本地計算機的名稱
並且將收集好的地址以Computer Name:{本地計算機名稱}的形式進行拼接
3.收集當前使用者名稱稱
利用GetUserNameW()函式收集當前使用者名稱稱
並且將收集好的地址以User Name:{當前使用者名稱稱}的形式進行拼接
4.收集Windows資料夾目錄
利用GetWindowsDirectoryW()函式獲取當前系統的windows資料夾目錄
並且將收集好的地址以Windows Dir:{Windows資料夾目錄}的形式進行拼接
5.收集惡意樣本所在的當前目錄
呼叫GetMouduleFileNameW()函式獲取惡意軟體當前目錄的完整路徑
並且將收集好的地址以Current Dir:{檔案所在目錄}的形式進行拼接
6.獲取磁碟機代號資訊
利用GetDriveTypeW()函式獲取各個磁碟機代號的屬性以及名稱
並且將收集好的地址以Volume list:{磁碟機代號名稱加磁碟機代號大小}的形式進行拼接
最後將資訊以
Start
Local IP Addr:{本地IP地址}
Computer Name:{本地計算機名稱}
User Name:{當前使用者名稱稱}
Windows Dir:{Windows資料夾目錄}
Current Dir:{檔案所在目錄}
Volume list:{磁碟機代號名稱加磁碟機代號大小}
3).C2中轉:
向http[:]//poisonfight[.]com/idea.php傳送Post請求
check=c558838690881fa7f75807cfa94b3713
接受json格式的回顯{"status":"ok"}
判斷是否返回為ok
接收到ok後,對遠端C2伺服器發起第二段post請求
http[:]//poisonfight[.]com/idea.php傳送Post請求
servers=c558838690881fa7f75807cfa94b3713
返回的json結果為:
{"servers":[{"ip_addr":"cookiesqueen.com\/innovative"}]}
將回顯的json進行擷取拼接得到C2:http[:]//cookiesqueen[.]com/innovative.php
向C2端傳送編碼後的系統資訊
S=sess_{隨機字母組合} check={令牌編碼}
(OD:)
(Anyrun)
加密規則是先進行了一次base64加密,再透過URL編碼過濾掉敏感字元,解密如下:
為了方便大家理解這一過程,筆者淺顯的畫了一個草圖
4).檔案下載
向http[:]//cookiesqueen[.]com/innovative.php
傳送post請求
l=ZG93bmxvYWQ%3D以及
s=sess_{隨機字母組合} check={令牌編碼}
(OD:)
(Anyrun:)
在上文中我們得知了該組織的報文解密方法,對此進行解密
下載檔案於%Temp%\{隨機字母組合}
5).載荷解壓
透過expand –d 命令獲取當前cab壓縮包中的內容
發現其中包含著java7.exe
利用extrac32.exe提取壓縮包裡的java7.exe於自啟動資料夾下
此外,其會針對系統進行判斷,若不屬於其偵測範圍的則不執行釋放誘餌文件於桌面的行為
但我們在anyrun沙箱中看到了這個操作
釋放的doc文件名為:èñïðàâëåííûé âàðèàíò_18.11.2019ã.doc
並且執行
誘餌介面為
部分譯文為:
由此可見該活動針對的是烏茲別克的外交部門
並且惡意樣本會記錄該資訊,base64編碼後以Post形式反饋給C2
(OD:)
(Anyrun:)
收集之前的解壓cab檔案記錄,以及解壓後的檔案路徑以及遍歷啟動資料夾內的存在,確保後門的持久化執行
6).載荷清理
釋放s.bat於%Temp%\下
寫入s.bat
如下圖所示
主要內容是判斷你所執行的exe是否存在,若存在則刪除,若不存在則刪除自身
為了方便大家看著方便,筆者畫了一幅流程圖便於大家方便理解
(三).網路模組
(Octopus 被控端)
經過exeinfo PE查殼後發現其依舊使用delphi編寫
(一).獲取%AppData%路徑,並且釋放.setting.ini,寫入配置
(二).像中轉c2發出中轉請求
和載入器的手段一樣,不再贅述
傳送check請求,判斷存活
傳送Servers請求獲得中轉C2的json格式
拼湊字串得到C2
(三).收集資訊
1).收集當前計算機名稱
執行命令
C:\windows\system32\wbem\WMIC.exe computersystem get name /format:list
2).收集系統安裝時間
執行
C:\windows\system32\wbem\WMIC.exe os get installdate /format:list
3).獲取本地磁碟機代號
執行
C:\windows\system32\wbem\WMIC.exe path CIM_LogicalDiskBasedOnPartition get Antecedent,Dependent
4).收集序列號
執行
C:\windows\system32\wbem\WMIC.exe path win32_physicalmedia where tag="\\\\.\\PHYSICALDRIVE0" get serialnumber /format:list
此外,被控端擁有與記載器類同的收集資訊部分,這裡就不再贅述
(四)傳送報文並接受回顯
將收集到的資訊以如下方式組成json格式
Base64編碼後以Post方式向http[:]//cookiesqueen[.]com/innovative.php
?query=c558838690881fa7f75807cfa94b3713傳送報文
報文解密後
接受返回指令為{“rt”:”30”}
三.組織關聯
根據卡巴斯基於2018.10.15釋出的關於DustSquad組織使用Octopus惡意軟體攻擊中亞地區的報告來看
(連結放在附錄部分)
該活動與本活動有以下的幾點共性
1).釋放於自啟動資料夾的被控端都擁有相同的Java圖示
2).擁有部分重合的程式碼邏輯
3).相似的C2報文格式
4).類似的C2中轉方式
5).相同的資訊收集指令
根據以上資訊我們基本上可以判斷這次的攻擊屬於DustSquad組織利用Octopus惡意軟體攻擊烏茲比克斯坦的外交實體
四.總結
該組織能夠熟練的進行投遞rar檔案的資訊對目標進行攻擊,並且使用Delphi的惡意軟體,以及透過入侵一些正常網站,上傳C2中轉的PHP檔案做到中轉C2的操作,這樣既可以避免了防毒軟體的靜態查殺,又可以隨時撤走載荷。
五.IOCs
C2:
http[:]//cookiesqueen[.]com/innovative.php
http[:]//poisonfight[.]com/idea.php
URL:
http[:]//poisonfight[.]com/idea.php?check= c558838690881fa7f75807cfa94b3713
http[:]//poisonfight[.]com/idea.php?servers= c558838690881fa7f75807cfa94b3713
http[:]//poisonfight[.]com/idea.php?servers= c558838690881fa7f75807cfa94b3713
http[:]//poisonfight[.]com/idea.php?query= c558838690881fa7f75807cfa94b3713
執行命令:
WMIC.exe computersystem get name /format:list
WMIC.exe os get installdate /format:list
WMIC.exe path CIM_LogicalDiskBasedOnPartition get Antecedent,Dependent
WMIC.exe path win32_physicalmedia where tag="\\\\.\\PHYSICALDRIVE0" get serialnumber /format:list
釋放檔案:
{自啟動資料夾}/Java7.exe
%AppData%\.settings.ini
%userprofile%\Desktop\èñïðàâëåííûé âàðèàíò_18.11.2019ã.doc
%Temp%\{隨機字元}