本文翻译自:https://securelist.com/muddywater/88059/


概览

MuddyWater是2017年出现的相对较新的APT组织。其主要攻击伊朗和沙特阿拉伯的政府组织。MuddyWater背后的组织的攻击目标还包括中东、欧洲和美国的其他国家。研究人员最近发现了大量攻击约旦、土耳其、阿塞拜疆和巴基斯坦,以及伊朗和沙特阿拉伯等国家政府、军事实体、电信公司和教育机构的鱼叉式钓鱼文件,马里、奥地利、俄罗斯、伊朗和巴林等地也发现了一些受害者。这些文档是2018年出现的,而且攻击活动还在进行中。

MuddyWater使用的鱼叉式钓鱼攻击邮件主要依赖社会工程技术使用户信赖地启用宏。攻击者使用大量被入侵的主机来传播攻击活动。

关于MuddyWater的相关研究成果:
https://sec0wn.blogspot.com/2018/05/clearing-muddywater-analysis-of-new.html?m=1
https://reaqta.com/2017/11/muddywater-apt-targeting-middle-east/
https://blog.malwarebytes.com/threat-analysis/2017/09/elaborate-scripting-fu-used-in-espionage-attack-against-saudi-arabia-government_entity/
https://www.sekoia.fr/blog/falling-on-muddywater/

技术细节

下面是恶意软件提取和执行流的描述,首先从初始感染向量开始,通过宏运行VBA代码,然后释放Powershell代码,powershell代码可以建立以命令为中心的通信,发送受害者系统信息,然后接收恶意软件支持的命令。

初始感染向量

初始感染是从启用宏的Office 97-2003文档开始的,文档的宏一般都是密码保护的,以防止静态分析。

当宏首次启用时,恶意的混淆的VBA代码就会执行。在一些例子中,当用户激活伪造的文本框时,恶意宏也会执行。

宏payload、释放的文件和注册表分析

宏payload是base64编码的,会做下面的动作:

  1. 向ProgramData文件夹中释放2到3个文件。释放的文件在ProgramData文件夹根目录或子目录下。文件名根据恶意软件的版本不同而不同。
    \EventManager.dll
    \EventManager.logs
    \WindowsDefenderService.inil

  2. 向当前用户的RUN key(HKCU)中添加注册表项,当用户下次登陆时执行。有时候,宏会马上执行恶意payload或进程。注册表和可执行文件可能根据恶意软件版本不同而不同:
    Name:WindowsDefenderUpdater
    Type:REG_EXPAND_SZ
    Data:c:\windows\system32\rundll32.exe advpack.dll,LaunchINFSection C:\ProgramData\EventManager.logs,Defender,1,

下次用户登陆时,释放的payload就会执行。可执行文件是特别挑选的,可以绕过白名单解决方案或与白名单非常相似。除了文件扩展外,宏释放的文件包括EITHER INF、SCT和文本文件或VBS和文本文件。

Case 1: 宏释放的INF、SCT和文本文件

  1. INF是通过advpack.dll “LaunchINFSection”函数启动的;
  2. INF通过scrobj.dll (Microsoft Scriptlet library) 注册SCT (scriptlet) 文件;
  3. 通过WMI (winmgmt)、SCT文件中的JS/VB代码启用Powershell one-liner。
powershell.exe -exec Bypass -c $s=(get-content C:\\ProgramData\\WindowsDefenderService.ini);$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));

执行流:

Case 2: 宏释放的VBS和文本文件

VBS文件会自解码,调用mshta.exe,传递VB脚本代码,然后交给PowerShell one-liner:

powershell.exe -w 1 -exec Bypass -nologo -noprofile -c iex([System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String((get-content C:\ProgramData\ZIPSDK\ProjectConfManagerNT.ini))));

执行流:

PowerShell代码

当Powershell通过WMI, wscript.exe, 或mshta.exe激活后,就会执行one-liner PowerShell代码,代码会读取释放到ProgramData文件夹的编码的文本文件,然后解码。得到的代码经过了多层混淆。

PowerShell代码首先要做的是关闭office的宏告警(Macro Warnings)和受保护视图(Protected View)。这是为了确保之后的攻击不需要用户交互,也允许宏代码访问内部VBA代码,以便在之后的攻击中静默执行宏代码。

然后检查运行的进程,并与硬编码的进程名进行对比。如果找到任何一个进程,就重启机器。这些硬编码的进程名都与恶意软件研究人员使用的工具相关:

“win32_remote“,”win64_remote64“,”ollydbg“,”ProcessHacker“,”tcpview“,”autoruns“,”autorunsc“,”filemon“,”procmon“,”regmon“,”procexp“,”idaq“,”idaq64“,”ImmunityDebugger“,”Wireshark“,”dumpcap“,”HookExplorer“,”ImportREC“,”PETools“,”LordPE“,”dumpcap“,”SysInspector“,”proc_analyzer“,”sysAnalyzer“,”sniff_hit“,”windbg“,”joeboxcontrol“,”joeboxserver“

在一些样本中,恶意软件还会计算每个运行进程名的校验和,如果与硬编码的校验和匹配,就通过ntdll.dll NtRaiseHardError函数产生BSOD(蓝屏死机)的效果。

C2通信

从数组$dragon_middle中嵌入URL长列表中随机选择一个URL。选择的URL之后就会用于C2通信。如果无法向选择的C2 URL发送数据,就尝试从$middle_dragon从获取另一个随机URL,然后休眠1~30秒,并再次循环。

受害者系统监控

代码会尝试通过https://api.ipify.org/获取受害者的公网IP。

公网IP会与OS版本、内网IP、Machine Name、Domain Name、UserName等数据加密后一起POST到之前选择的URL中来进行新受害者注册。这样攻击者就可以根据IP、国家、位置、攻击的企业等信息选择接受或拒绝该受害者。根据攻击者C2的响应,受害者会被分配一个ID $sysid。ID也会与请求执行的命令一起发送给C2。

支持的命令包括:

upload
screenshot
Excel
Outlook
Risk
Reboot
Shutdown
Clean

这些命令也与软件的版本有关。

  1. “screenshot”命令会获取截屏并以.PNG文件的形式保存在ProgramData
  2. “Excel”命令会接收powershell代码的另一个阶段,保存在c:\programdata\a.ps1中,然后请求Excel通过DDE执行PowerShell脚本。
  3. “Outlook” 命令会接收powershell代码的另一个阶段,保存在c:\programdata\a.ps1中,然后通过COM、MSHTA.exe请求outlook来执行。
  4. “risk”命令会接收powershell代码的另一个阶段,保存在c:\programdata\a.ps1中,然后通过COM交互请求Explorer.exe来执行。
  5. “upload”命令会从C2服务器下载文件,然后保存在C:\ProgramData中。
  6. “clean”命令会破坏受害者的磁盘C, D, E, F,然后重启。
  7. “reboot”和“shutdown”命令会马上重启或关闭受害者机器。

在恶意软件的其中一个版本中,代码会检查ProgramData文件夹是否含有Kasper、Panda、ESET等关键字相关的文件和文件夹。

受害者分布

MuddyWater的大多数受害者分布在约旦、土耳其、伊拉克、巴基斯坦、沙特阿拉伯、阿富汗和阿塞拜疆,俄罗斯、伊朗、巴林、奥地利和马里等国也有少量分布。根据攻击中所使用的诱饵文档,研究人员认为攻击是有地理政治属性的,除了攻击特定区域外,还攻击敏感的个人或企业组织。

攻击者欺骗和归属

MuddyWater组织使用的反混淆的PowerShell代码与之前用作原型的PowerShell脚本类似。攻击中使用的许多文档也含有其作者机器的嵌入路径。发现的路径有:

Leo, Poopak, Vendetta和Turk是创建文档或模板的用户名。Turk指向的可能是来自土耳其的人,Poopak是波斯女孩的名字,说明作者可能是巴基斯坦人,Leo可能是一个随机的名字,用于混淆研究人员。

在样本中还发现了中文:

无法连接到网址,请等待龙…
无法访问本地计算机寄存器
任务计划程序访问被拒绝

研究人员在其他样本中发现PowerShell代码只有三个C2 URL,研究人员相信大多数$dragon_middle中的C2 URL是假的,目的就是为了分散研究人员的注意力或触发假阳性。

http://www.cankayasrc[.]com/style/js/main.php
http://ektamservis[.]com/includes/main.php
http://gtme[.]ae/font-awesome/css/main.php

结论

MuddyWaters组织已经发起了大量的网络攻击,并使用了高级社会工程技巧,除主动开拓基础设施外,还使用新方法和技术。攻击者也在不断地增强其工具集以减少暴露给安全产品和服务的可能性。Kaspersky实验室专家预测未来此类攻击会越来越多。

源链接

Hacking more

...