今年3月,卡巴斯基实验室的研究人员在俄乌冲突地区新发现了一个APT活动,该活动涉及使用PowerMagic和CommonMagic植入程序。然而,当时还不清楚是哪个组织发起了这次攻击。
在寻找与PowerMagic和CommonMagic相似的植入程序时,研究人员发现了来自同一组织发布的更复杂的恶意活动。最有趣的是,受害者广泛分布在俄乌冲突地区。目标包括个人,以及外交和研究机构。恶意活动涉及使用我们称之为CloudWizard的模块化框架。它的功能包括截图、麦克风录音、键盘记录等。
在俄乌冲突地区运营的APT最近急剧增多,比如Gamaredon、CloudAtlas、BlackEnergy等。其中一些APT在过去早已被淘汰,例如ESET在2016年发现的Prikormka(Groundbait活动)。虽然几年来没有关于Prikormka或Operation Groundbait的更新,但我们发现了该活动中使用的恶意软件CommonMagic和CloudWizard之间的多个相似之处。经过进一步调查,我们发现CloudWizard有着丰富而有趣的历史。
初步调查结果
恶意软件作为一个名为“syncobjsup”的可疑Windows服务运行。该服务是由一个同样可疑的路径“C:ProgramDataApparition Storagesyncobjsup.dll”的DLL控制的。执行时,我们发现该DLL可以解密与该DLL位于同一目录中的文件mods.lrc中的数据。用于解密的密码是RC5,密钥为88 6A 3F 24 D3 08 A3 85 E6 21 28 45 77 13 D0 38。然而,使用标准RC5实现对文件进行解密只会产生垃圾数据。仔细研究样本中的RC5实现就会发现它存在漏洞:
漏洞在内部循环中:它使用变量i而不是j
对这个漏洞实现的搜索显示,GitHub上的代码要点很可能是被植入程序的开发人员借用的。在这个要点的评论中,GitHub用户强调了这个漏洞:
同样有趣的是,来自gist的密钥与syncobjsup.dll库中使用的密钥相同。
解密后的文件在我们看来就像一个虚拟文件系统(VFS),包含多个可执行文件及其JSON编码的配置:
这个VFS中的每个条目都包含魔术字节(‘ CiCi ‘),条目名称的ROR6哈希,以及条目大小和内容。
在mods.lrc中,我们发现:
三个dll(导出表名为Main.dll、Crypton.dll和Internet.dll);
这些DLL的JSON配置。
syncobjsup.dll DLL迭代VFS条目,查找名称为“Main” (ROR6 hash: 0xAA23406F)的条目。此条目包含CloudWizard的Main.dllOrchestrator库,该库通过调用其SvcEntry导出进行反射加载和启动。
在启动时,Orchestrator生成一个挂起的WmiPrvSE.exe进程并将自身注入其中。从WmiPrvSE.exe进程中,它对VFS文件进行备份,复制mod。LRC到mods, lrs。然后解析mod。获取所有框架模块dll及其配置。如上所述,配置是带有字典对象的JSON文件:
Orchestrator本身包含一个配置,其参数如下:
受害者ID(例如03072020DD);
框架版本(最新观测版本为5.0);
连续两次检测信号之间的间隔时间;
启动模块后,Orchestrator开始通过发送检测信号消息与攻击者通信。每次检测信号都是一个JSON文件,包含受害者信息和加载模块列表:
此JSON字符串使用加密模块(来自VFS的Crypton.dll)加密,并通过互联网通信模块(internet.dll)发送给攻击者。
作为对检测信号的响应,Orchestrator接收允许其执行模块管理的命令:安装、启动、停止、删除模块或更改其配置。每个命令都包含魔术字节(DE AD BE EF)和一个JSON字符串 (e.g., {“Delete”: [“Keylogger”, “Screenshot”]}),后面跟着一个模块DLL文件。
加密与通信
如上所述,每次安装CloudWizard框架时都会捆绑两个模块(Crypton.dll和Internet.dll)。Crypton模块对所有通信进行加密和解密。它使用两种加密算法:
检测信号消息和命令使用AES加密(密钥在JSON配置VFS文件中指定);
使用AES和RSA的组合对其他数据(例如,模块执行结果)进行加密。首先,使用生成的伪随机AES会话密钥对数据进行加密,然后使用RSA对AES密钥进行加密。
互联网连接模块将加密数据转发给恶意软件操作者。它支持四种不同的通信类型:
云存储:OneDrive, Dropbox, Google Drive;
基于Web的C2服务器;
主云存储是OneDrive,如果OneDrive无法访问,则使用Dropbox和Google Drive。该模块的配置包括云存储身份验证所需的OAuth令牌。
至于web服务器终端,则在模块无法访问三个云存储中的任何一个时使用。为了与它交互,它向其配置中指定的URL发出GET请求,并在响应中获取新命令。这些命令可能包括新的云存储令牌。
在检查网络模块的字符串时,我们发现了一个包含来自开发人员计算机的目录名的字符串:D:ProjectsWork_2020Soft_Version_5Refactoring。
模块介绍
信息收集是通过辅助DLL模块完成的,这些模块具有以下导出函数:
Start:启动模块;
Stop:停止模块;
Whoami:返回带有模块信息(e.g., {“Module”:”Keylogger “,”time_mode”:”2″,”Version”:”0.01″})的JSON-object,time_mode的值表示该模块是否是持久化的;
GetResult:返回模块执行的结果(例如收集的屏幕截图,麦克风录音等)。大多数模块以ZIP的形式返回结果(存储在内存中);
GetSettings:返回模块配置;
模块可以在重新启动后继续(在本例中,它们保存在mods.lrs VFS文件中)或在内存中执行,直到计算机关闭或操作员删除模块。
我们总共发现了9个辅助模块执行不同的恶意活动,如文件收集、键盘记录、截屏、录制麦克风和窃取密码。
我们最感兴趣的模块是从Gmail帐户中执行电子邮件泄露的模块。为了窃取,它从浏览器数据库读取Gmail cookie。然后,它使用获得的cookie通过向https://mail.google.com/mail/u/
如果模块收到这样的提示,它模拟点击“我想使用HTML Gmail”按钮,通过从提示的HTML代码向URL发出POST请求。
在获得对传统web客户端的访问权限后,该模块会过滤活动日志、联系人列表和所有电子邮件。
同样有趣的是,这个模块的代码部分是从泄露的黑客团队源代码中借来的。
在获得CloudWizard的Orchestrator(MySQL 复制拓扑管理和可视化工具)及其模块后,研究人员还未发现框架安装程序。在搜索旧的分析数据时,我们能够识别出从2017年到2020年使用的多个安装程序。当时安装的植入程序的版本是4.0(如上所述,我们观察到的最新版本是5.0)。
未覆盖的安装程序是用NSIS构建的。启动时,它会释放三个文件:
C:ProgramDataMicrosoftWwanSvcWinSubSvc.exe;
C:ProgramDataMicrosoftMFDepending.GRL(在其他版本的安装程序中,此文件也位于C:ProgramDataMicrosoftMFetwdrv.dll中);
C: ProgramData System etwupd.dfg;
之后,它创建了一个名为 “Windows Subsystem Service” 的服务,该服务被配置为在每次启动时运行WinSubSvc.exe二进制文件。
值得注意的是,安装程序在感染后会显示一条“Well done!”的消息:
这可能表明我们发现的安装程序用于通过对目标计算机的物理访问来部署CloudWizard,或者安装程序试图模拟网络设置(如窗口标题中所示)配置程序。
旧版(4.0)和新版(5.0)CloudWizard有主要有以下区别:
旧版(4.0)网络通信和加密模块包含在主模块中,而新版(5.0)网络通信和加密模块相互独立;
旧版(4.0)框架源文件编译目录:D:ProjectsWork_2020Soft_Version_4 service,而新版(5.0)框架源文件编译目录是D:ProjectsWork_2020Soft_Version_5Refactoring;
旧版(4.0)使用RC5Simple库中的RC5(硬编码密钥:7Ni9VnCs976Y5U4j)进行C2服务器流量加密和解密,而新版(5.0)使用RSA和AES进行C2服务器流量加密和解密(密钥在配置文件中指定)。
幕后组织
对CloudWizard进行细致研究之后,研究人员决定寻找一些其幕后组织的线索。CloudWizard让研究人员想起了在乌克兰观察到并公开报道的两次活动:Groundbait活动和BugDrop活动。ESET于2016年首次公开了Groundbait活动,并于2008年首次观察到其植入程序。在调查“Groundbait”活动时,ESET发现了Prikormka恶意软件,这是第一个被公开有明确攻击目标的乌克兰组织开发的恶意软件。根据ESET的报告,其幕后组织很可能来自乌克兰。
至于BugDrop活动,这是CyberX在2017年发现的一个活动。该组织声称BugDrop活动与Groundbait活动有相似之处。卡巴斯基实验室的研究人员也发现了类似的证据:
1.Prikormka USB DOCS_STEALER模块(MD5: 7275A6ED8EE314600A9B93038876F853B957B316)包含PDB路径D:MyProjects_All2015wallexiomus1_gzReleaseiomus.pdb;
2.BugDrop USB窃取模块(MD5: a2c27e73bc5dec88884e9c165e9372c9)包含PDB路径D:MyProjects_All2016iomus0_gzReleaseusdlg.pdb;
再加上以下证据,CloudWizard框架的幕后组织与Groundbait活动和BugDrop活动幕后组织是一致的:
3.ESET研究人员发现,CloudWizard 4.0版本的加载程序(导出名称为LCrPsdNew.dll)与Prikormka dll类似。
4.ESET检测到CloudWizard 4.0样本(MD5: 406494bf3cabbd34ff56dcbeec46f5d6, PDB path: D:ProjectsWork_2017ServiceInteractive Service_systemReleaseService.pdb)的加载程序为Win32/Prikormka.CQ。
5.Prikormka恶意软件的多次感染都导致了CloudWizard框架的感染;
6.CloudWizard的几个模块实现类似于Prikormka和BugDrop模块的相应模块,不过由C变成了c++,USB窃取模块通过IOCTL_STORAGE_QUERY_PROPERTY系统调用检索连接的USB设备的序列号和产品ID。运行失败的默认回退值为“undef”。
在BugDrop中检索USB设备序列号和产品ID(MD5:F8BDE730EA3843441A657A103E90985E)
在CloudWizard中检索USB设备序列号和产品ID(MD5:39B01A6A025F672085835BD699762AEC)
在上面的样本中,在BugDrop(左)和CloudWizard(右)中分配“undef”字符串
7.用于截图的模块使用相同的窗口名称列表来触发截图频率的增加:“Skype”和“Viber”。CloudWizard和Prikormka的截屏间隔使用相同的默认值(15分钟)。
Prikormka中窗口标题文本的比较(MD5: 16793D6C3F2D56708E5FC68C883805B5)
在CloudWizard中将“SKYPE”和“VIBER”字符串添加到一组窗口标题中
(MD5:26E55D10020FBC75D80589C081782EA2)
8.Prikormka和CloudWizard样本中的文件列表模块具有相同的名称:Tree。它们也对目录列表使用相同的格式字符串:“ttttt(%2.2u,%2.2u.%2.2u.%2.2u)n”。
在Prikormka(MD5:EB56F9F7692F933BEE9660DFDFABAE3A)和CloudWizard(MD5:BF64B896B525B5870FE61221D9934D)中使用相同格式的字符串作为目录列表
9.麦克风模块以相同的方式录制声音:首先使用Windows Multimedia API制作WAV录制,然后使用LAME库将其转换为MP3。虽然这种模式在恶意软件中很常见,但用于指定LAME库设置的字符串是特定的:8000 Hz和16 Kbps。Prikormka和CloudWizard模块都从这些字符串中提取整数,并在LAME库中使用它们。
10.在Prikormka和CloudWizard模块中的扩展列表中使用了类似的扩展顺序:
Prikormka(MD5:EB56F9F7692F933BEE9660DFDFABAE3A)和CloudWizard(MD5:BF64B896B5253B5870FE61221D9934D)中的扩展列表
11.在Prikormka中,上传至C2服务器的文件名格式为mm.yy_hh.mm.ss.
12.Prikormka和CloudWizard的C2服务器都由位于乌克兰的托管服务托管。此外,在将文件泄露到Dropbox云存储方面,BugDrop和CloudWizard也有相似之处。
13.Prikormka、BugDrop和CloudWizard的受害者位于乌克兰西部和中部,以及东欧的冲突地区。
CloudWizard和CommonMagic的相似之处如下:
14.在两个框架中,执行与OneDrive通信的代码是相同的。研究人员目前还没有发现这段代码是任何开源库的一部分。此代码使用相同的用户代理:“Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML,如Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136”。
CloudWizard的互联网通信模块中的相同字符
串(左,MD5: 84BDB1DC4B037F9A46C001764C115A32)和CommonMagic(右,MD5: 7C0E5627FD25C40374BC22035D3FADD8)
15.CloudWizard版本4和CommonMagic这两个框架都使用RC5Simple库进行加密。用RC5Simple加密的文件以一个7字节的标头开始,在库源代码中设置为’ RC5SIMP ‘。然而,这个值在恶意植入程序中已经发生了变化:CloudWizard中的DUREX43和CommonMagic中的Hwo7X8p。此外,CloudWizard和CommonMagic使用RapidJSON库解析JSON对象。
16.在CommonMagic中上传到C2服务器的文件名格式为“mm.dd _hh.mm.ss.ms.dat”(CloudWizard中上传的文件名格式为“dd.mm.yyyy_hh.mm.ss.ms.dat”)。
17.从CloudWizard和CommonMagic样本中提取的受害者ID是相似的:它们包含后跟两个相同字母的日期,例如CloudWizard中的03072020DD, 05082020BB和CommonMagic中的WorkObj20220729FF。
18.CommonMagic和CloudWizard的受害者位于东欧的冲突地区。
总结
卡巴斯基实验室的研究人员早在2022年就开始了调查,最终发现CloudWizard APT活动与两个相关的大型模块化框架:CommonMagic和CloudWizard。研究表明,CommonMagic和CloudWizard幕后组织发起的攻击可以追溯到2008年,那一年首次发现了Prikormka样本。自2017年以来,类似攻击就销声匿迹了。然而,这两个活动背后的组织并没有消停,一直开发他们的工具集并攻击感兴趣的目标。
参考及来源:https://securelist.com/cloudwizard-apt/109722/
原文始发于微信公众号(嘶吼专业版):新出现的CloudWizard APT活动疑似CommonMagic和CloudWizard的延续