解析 DeathStalker
DeathStalker:一個獨特的攻擊組織,似乎針對的是金融領域的律師事務所和公司。
Powersing工具鏈
總覽
攻擊者的最新方式依賴于相同的入侵媒介:帶有包含惡意LNK文件的附加存檔的魚叉式網絡釣魚電子郵件。

盡管看起來像來自Explorer或流行的歸檔提取產品的文檔,但是這些快捷方式仍指向cmd.exe。這些快捷方式文件具有以下結構:

單擊它們將啟動一個復雜的序列,導致在受害者的計算機上執行任意代碼。通過cmd.exe的參數傳遞的簡短PowerShell腳本引導了以下鏈:

- 階段0的作用是提取并執行鏈中的下一個元素,以及嵌入到LNK文件中以顯示給用戶的誘餌文檔。這會產生單擊真實文檔的錯覺,并確保受害者不會變得可疑。
- 第1階段是一個PowerShell腳本,其中包含C#程序集,該程序集旨在連接到 dead drop resolver,并通過從快捷方式中提取“ DLL”文件來獲取用于解碼鏈的最后階段的加密材料。以固定的偏移量定位Base64編碼的URL列表。通過在Windows啟動文件夾中創建指向VBE啟動腳本的快捷方式(使用放置的圖標),可以建立持久性。
- 最后,在第2階段,實際的惡意軟件植入程序用于控制受害者的機器。它連接到一個 dead drop resolver,以獲取真實C&C服務器的地址,并進入一個循環,每隔幾秒鐘查找一次訂單。
- 系統重新啟動后,將自動執行VBE啟動腳本(與階段0極為相似),再次引導至Powersing階段2。
與C&C服務器的通信涉及JSON編碼對象的交換。
- 捕獲受害者機器上的定期屏幕截圖,并立即發送到C&C服務器(兩個內置命令允許操作員更改屏幕截圖的質量和周期性)
- 執行C&C提供的任意Powershell腳本
在第1階段和第2階段,在我們分析過的不同樣本中,安全軟件規避行為的變化很大。根據在計算機上檢測到的AV,加電可能會選擇其他持久性方法,甚至完全停止運行。我們懷疑此工具集背后的小組在每個活動之前都進行了檢測測試,并根據結果更新了腳本。這表明了軟件設計的一種迭代且快節奏的方法。值得指出的是,階段2會在計算機上主動查找虛擬化痕跡和惡意軟件分析工具,并將此信息報告給C&C服務器。
Dead drop resolvers
DeathStalkers工具鏈利用大量公共服務作為Dead drop resolvers。這些服務為攻擊者提供了一種通過公開帖子、評論、用戶個人資料、內容描述等將數據存儲在固定URL上的方式。攻擊者留下的消息遵循以下模式:“My keyboard doesn’t work… ” 和“Yo bro I sing [Base64 encoded string] yeah”。

在調查該威脅因素的過程中,我們發現了以下消息:
- Google+
- Imgur
- ShockChan
- Tumblr
- YouTube
- WordPress
該列表很可能并不詳盡。通過簡單的Google查詢可以發現許多此類消息。Powersing的第一要務是連接到它知道的任何dead drop resolver 以檢索此信息。階段1使用這些消息的第一個字符串,其中包含用于解碼階段2的AES密鑰。然后,階段2連接到dead drop resolver ,以獲取在第二個字符串中編碼的整數。如下面的代碼摘錄所示,此整數在轉換為IP地址之前,此整數除以任意常量:
public string LongToIP(string long_ip_string)
{
long longIP;
long.TryParse(long_ip_string, out longIP);
longIP = longIP / 25835; // NB: divide integer by an arbitrary constant
string ip = string.Empty;
for (int i = 0; i < 4; i++)
{
int num = (int)(longIP / Math.Pow(256, (3 - i)));
longIP = longIP - (long)(num * Math.Pow(256, (3 - i)));
if (i == 0)
ip = num.ToString();
else
ip = ip + "." + num.ToString();
}
return ip;
}
該IP地址然后存儲在用戶的硬盤驅動器上,并用于建立與實際C&C服務器的連接,操作員使用該IP地址來控制Powersing。依靠知名的公共服務,網絡犯罪分子可以將最初的后門通信混入合法的網絡流量中。這也限制了防御者可以采取哪些措施來阻礙其運作,因為這些平臺通常無法在公司一級被列入黑名單,而從中刪除內容可能是一個艱難而漫長的過程。但是,這是有代價的:互聯網永遠不會忘記,網絡罪犯也很難清除其運行痕跡。借助搜索引擎索引或存檔的數據,我們估計Powersing于2017年8月左右首次使用。
我們要提到的最后一個細節是,我們發現的許多Powersing C&C都具有SSL證書,這讓人聯想到Sofacy臭名昭著的Chopstick C&C “IT Department” 證書。我們相信此基礎架構與Sofacy沒有關聯,并且相信這是威脅行為者試圖使防御者得出錯誤結論的嘗試。
DeathStalker links to known groups
Janicab
Sec0wn在原始博客中介紹Powersing暗示了與名為Janicab的惡意軟件家族的可能鏈接,該家族的較早樣本可追溯到2012年。但是,據我們所知,這種連接從未公開進行過探索。
該文件是指向cmd.exe的另一個LNK,該文件在單擊時會在系統上刪除VBE腳本以及誘餌文檔。該腳本會建立與未列出的YouTube視頻的連接,以獲得嵌入在說明中的C&C信息:

然后,將在此頁面上獲得的整數除以常量,然后再轉換為IP地址:
Set objRE = New RegExp
With objRE
.Pattern = "our (.*)th psy anniversary"
.IgnoreCase = True
End With
Set objMatch = objRE.Execute( outputHTML )
If objMatch.Count = 1 Then
server = ""
server = objMatch.Item(0).Submatches(0)
server = server / 31337 'NB: divide integer by an arbitrary constant
'msgbox(server)
server = IPConvert(server)
server = "http://" & server & "/wp-admin-content"
End If
雖然僅將YouTube用作dead drop resolver并不足以在兩組之間建立鏈接,但我們認為,在線獲取某個整數并將其分割后再將其解釋為IP地址之前,該過程足夠獨特。繪制第一個連接。
Janicab的功能還使我們想起了Powersing的功能:該示例包含基于計算機MAC地址的VM檢測,尋找惡意軟件分析程序以及熟悉的防病毒軟件規避例程。Janicab還定期將受害者桌面的屏幕截圖發送給C&C,并似乎可以執行任意Python腳本。
Janicab的最新版本(85ed6ab8f60087e80ab3ff87c15b1174)也涉及網絡流量,讓人聯想到Powersing,尤其是當惡意軟件向其C&C服務器注冊時:
| Powersing registration request (POST data) | Janicab registration request |
|---|---|
| {“un”: “[username]”,“cn”: “[computer name]”,“av”: “[installed AV program]”,“dob”: “[OS installation date]”,“os”: “[OS version]”,“ou”: “[campaign identifier]”,“dc”: “[version]”} | GET /gid.php?action=add&cn=[computer name]&un=[username]&v=[version]&av=[installed AV program]&an=[campaign identifier] |
此外,此示例包含與本文前面介紹的Powersing示例完全相同的列入黑名單的VM MAC地址列表,且順序相同。
| Powersing’s blacklisted MAC addresses | Janicab’s blacklisted MAC addresses |
|---|---|
| virtual_mac_prefix.Add(“00015D”); | macs(0) = “00-01-5D” |
| virtual_mac_prefix.Add(“0003BA”); | macs(1) = “00-03-BA” |
| virtual_mac_prefix.Add(“000782”); | macs(2) = “00-07-82” |
| virtual_mac_prefix.Add(“000F4B”); | macs(3) = “00-0F-4B” |
| virtual_mac_prefix.Add(“00104F”); | macs(4) = “00-10-4F” |
| virtual_mac_prefix.Add(“0010E0”); | macs(5) = “00-10-E0” |
| virtual_mac_prefix.Add(“00144F”); | macs(6) = “00-14-4F” |
| virtual_mac_prefix.Add(“0020F2”); | macs(7) = “00-20-F2” |
| virtual_mac_prefix.Add(“002128”); | macs(8) = “00-21-28” |
| virtual_mac_prefix.Add(“0021F6”); | macs(9) = “00-21-F6” |
| virtual_mac_prefix.Add(“005056”); | macs(10) = “00-50-56” |
| virtual_mac_prefix.Add(“000C29”); | macs(11) = “00-0C-29” |
| virtual_mac_prefix.Add(“000569”); | macs(12) = “00-05-69” |
| virtual_mac_prefix.Add(“0003FF”); | macs(13) = “00-03-FF” |
| virtual_mac_prefix.Add(“001C42”); | macs(14) = “00-1C-42” |
| virtual_mac_prefix.Add(“00163E”); | macs(15) = “00-16-3E” |
| virtual_mac_prefix.Add(“080027”); | macs(16) = “08-00-27” |
| virtual_mac_prefix.Add(“001C14”); | macs(17) = “00-1C-14” |
| virtual_mac_prefix.Add(“080020”); | macs(18) = “08-00-20” |
| virtual_mac_prefix.Add(“000D3A”); | macs(19) = “00-0D-3A” |
| virtual_mac_prefix.Add(“00125A”); | macs(20) = “00-12-5A” |
| virtual_mac_prefix.Add(“00155D”); | macs(21) = “00-15-5D” |
| virtual_mac_prefix.Add(“0017FA”); | macs(22) = “00-17-FA” |
| virtual_mac_prefix.Add(“001DD8”); | macs(23) = “00-1D-D8” |
| virtual_mac_prefix.Add(“002248”); | macs(24) = “00-22-48” |
| virtual_mac_prefix.Add(“0025AE”); | macs(25) = “00-25-AE” |
| virtual_mac_prefix.Add(“0050C2”); | macs(26) = “00-50-C2” |
| virtual_mac_prefix.Add(“0050F2”); | macs(27) = “00-50-F2” |
| virtual_mac_prefix.Add(“444553”); | macs(28) = “44-45-53” |
| virtual_mac_prefix.Add(“7CED8D”); | macs(29) = “7C-ED-8D” |
Evilnum
另一個值得研究的可能關系是最近的Evilnum惡意軟件,
我們獲得了一個舊的Evilnum示例(219dedb53da6b1dce0d6c071af59b45c),并觀察到它還從Dead Drop解析器(GitHub)獲得C&C信息,以獲得用以下代碼轉換的IP地址:
function extract_srvaddr() {
serverFound = false;
pattern = 'our news start at (.*) thank you';
while(serverFound == false) {
var item = items[Math.floor(Math.random()*items.length)];
var html = get_page_content_with_ie(item,'');
if(html != '') {
var match = extract_string(pattern, html);
if(match != null) {
srv = num2dot(match[1]/666); // NB: divide integer by a constant
srv = srv + "/Validate";
srv_stat = get_page_content_with_ie(srv+"/ValSrv", '');
validate_str = extract_string('youwillnotfindthisanywhare', srv_stat);
if(validate_str == 'youwillnotfindthisanywhare') {
serverFound = true;
return srv;
}
}
}
}
我們不禁注意到使用正則表達式來查找特定字符串以獲取整數,然后將該整數除以常量得到C&C服務器IP地址的模式。盡管Evilnum提供了比Powersing更大的功能,但它也可以捕獲屏幕截圖并將其發送到C&C服務器。
在受害者方面,Evilnum專注于金融科技領域的公司。它似乎對商業智能比對財務收益更感興趣。這與到目前為止我們觀察到的DeathStalker活動一致。
我們要提到的最后一個聯系是,盡管以不同的語言編寫,但最近的Evilnum(835d94b0490831da27d9bf4e9f4b429c)和Janicab示例有一些輕微的代碼重疊:
在執行等效任務的函數中使用具有相似名稱的變量(對于Janicab是“ ieWatchdogFilename”,對于Evilnum是“ ieWatchdogPath”)
用于清除的兩個函數具有相同的名稱:“ deleteLeftOvers”
我們認為這些名稱足夠獨特,可以在兩個惡意軟件家族之間創建一個附加鏈接。不太確定的是,此Evilnum示例還包含一個名為“ long2ip”的函數,用于將整數轉換為IP地址,而Powersing包含一個以“ LongToIP”命名的類似實現。
我們不禁注意到使用正則表達式來查找特定字符串以獲取整數,然后將該整數除以常量得到C&C服務器IP地址的模式。盡管Evilnum提供了比Powersing更大的功能,但它也可以捕獲屏幕截圖并將其發送到C&C服務器。
在受害者方面,Evilnum專注于金融科技領域的公司。它似乎對商業智能比對財務收益更感興趣。這與到目前為止我們觀察到的DeathStalker活動一致。
我們要提到的最后一個聯系是,盡管以不同的語言編寫,但最近的Evilnum(835d94b0490831da27d9bf4e9f4b429c)和Janicab示例有一些輕微的代碼重疊:
- 在執行等效任務的函數中使用具有相似名稱的變量(對于Janicab是“ ieWatchdogFilename”,對于Evilnum是“ ieWatchdogPath”)
- 用于清除的兩個函數具有相同的名稱:“ deleteLeftOvers”
我們認為這些名稱足夠獨特,可以在兩個惡意軟件家族之間創建一個附加鏈接。不太確定的是,此Evilnum示例還包含一個名為“ long2ip”的函數,用于將整數轉換為IP地址,而Powersing包含一個以“ LongToIP”命名的類似實現。
Victimology

我們認為DeathStalkers純粹是根據他們的感知價值或可能根據客戶要求來選擇目標。在這種情況下,我們評估了金融部門中的任何公司,無論其地理位置如何,都能引起DeathStalker的注意。
結論
我們建議防御者密切注意與腳本語言(例如powershell.exe和cscript.exe)的本機Windows解釋器有關的任何過程創建。這些實用程序應盡可能不可用,將來的意識培訓和安全產品評估包括基于LNK文件的感染鏈。