MuddyWater

MuddyWater 样本分析

样本信息

MuddyWater是一个伊朗威胁组织,主要针对中东国家,也针对欧洲和北美国家。该组织的受害者主要集中在电信、政府(IT 服务)和石油部门。该组织的活动以前与FIN7有关联,但据信该组织是一个独特的组织,可能受到间谍活动的驱使。

文档内容如下:

ioc

类别 特征值
MD5 c9ab403bd43649b5fd57efac4bf83b7c
SHA1 d3d98b066011fea2f4f1b9eaab97b28591d50fbe
SHA256 ea24c5a8b976919d4c8c4779dc0b7ef887373f126c4732edf9023b827b4e4dc4
C2 192.227.147.152107.174.68.60

样本分析

文档宏分析

doc文档中包含了一个VBA脚本,该脚本中存在一些加解密过程,然后会生成C:\ProgramData\Temp_WZW4.txt%AppData%\Microsoft\Windows\Start Menu\Programs\Startup\Temp_WZW4.vbs,当然了两者的内容是一致的:

释放宏分析

上述宏可以通过python脚本来还原,获取释放的文件内容(string.txt中存放的是解密密钥和密文):

strfile=open(r"string.txt","r")

strlist = []

for line in strfile:
  strlist.append(line)

keys = strlist[0]
tempValue = strlist[1]
appdatapath = strlist[2]
startpath = strlist[3]

def clearText(value):
  key = keys.split(',')
  for i in key:
    value = value.replace(i,'')
  return value

modifyText = clearText(tempValue)
pathSave1 = clearText(appdatapath)
pathSave2 = clearText(startpath)
print(modifyText)
print(pathSave1)
print(pathSave2)

现在我们获得了一个新的VBScript脚本缓存,根据原始文档宏的要求,替换**为换行符,然后美化一下格式,我们就得到了一个漂亮的Temp_WZW4.vbs,从代码上可以看出字符内容是经过加密的,不过我们可以直接应用作者的代码进行还原:

通过WScript.Echo输出显示,这样我们就能知道C2是:192.227.147.152,107.174.68.60&l8x8ml=对应的是:&status={""61uuxiwR3lms8"":对应的是:{"commandResult":

尽管Temp_WZW4.vbs已经很美观了,但为了阅读方便,我对它的函数名和变量名做了重定义,让我们从第一个函数开始看:

这里会和C2进行交互,执行explorer.exe命令,发出以下请求:

Get :/getCommand?guid=[uid]
POST:/getTargetInfo?guid=[uid]&status=[statusID]{"commandResult":[CMD(responseGET)]}

命令执行函数会创建一个新的文档用于暂存执行结果c:\ProgramData\AvoU.txt,并在函数结束时返回内容:

由于C2IP地址有两个,所以存在一个设置C2地址的函数:

随机休眠函数则是如下实现的:

GET请求函数如下:

POST请求函数如下:

当状态码是126时,会存在一个交互处理函数,当输入1时,会获取OS的相关信息:

获取OS信息的函数如下:

参考资料

https://attack.mitre.org/groups/G0069/
https://app.any.run/tasks/39a7ba74-e232-42d0-98fe-9063a5be417b/
https://www.virustotal.com/gui/file/ea24c5a8b976919d4c8c4779dc0b7ef887373f126c4732edf9023b827b4e4dc4
https://twitter.com/ShadowChasing1/status/1475819281648553986