导语:Proofpoint研究人员之前发现了两个新的模块化下载器Marap和AdvisorsBot,这两款下载器的主要功能是静默感染,明显是为了侦察。
Proofpoint研究人员之前发现了两个新的模块化下载器Marap和AdvisorsBot,这两款下载器的主要功能是静默感染,明显是为了侦察。研究人员发现Cobalt组织还在使用另一个下载器CobInt(Group-IB将恶意软件命名为CobInt)。Group-IB在5月份公布关于CobInt的发现时,Cobalt组织已停止使用CobInt,而研究人员发现7月又开始使用CobInt。
攻击活动分析
8月初,研究人员发现应该来自denis[@]inter-kassa[.]com的邮件地址,主题为“Suspicion of fraud”。消息中含有两个URL,一个链接的是安装More_eggs下载器的宏文档,另一个链接的是Coblnt stage 1的可执行文件。
8月14日,研究人员又发现伪装为Single Euro Payments Area (SEPA)的消息,发件域名为sepa-europa[.]com和sepa-europa[.]info,主题词包括notification、letter、message、notice等,如图1所示,消息中含有:
· Word附件(sepa rules.doc),利用了CVE-2017-8570、CVE-2017-11882、CVE-2018-0802漏洞来执行嵌入的CobInt Stage 1 payload;
· 在一些案例中,URL回直接链接到CobInt下载器。
图1: 8月14日消息示例
8月16日,又有一些看似来自Alfa Bank的消息,来自域名aifabank[.]com,主题为Fraud Control、Fraud、Transaction Blocking等。消息中含有利用CVE-2017-8570、CVE-2017-11882、CVE-2018-0802漏洞来执行嵌入的CobInt Stage 1 payload的ThreadKit利用文档。
图2: 8月16日消息示例
9月4日,消息发送者的域名为ralffeisen[.]com,伪装为Raiffeisen银行,主题为Fraudulent transaction、Wire Transfer Fraud(电汇诈骗)、Request for data等。消息中含有一个word附件,附件回下载含有CVE-2018-8174漏洞利用的外部VB脚本文件,漏洞利用会导致CobInt stage 1的执行。
图3: 9月4日消息示例
恶意软件分析
CobInt是用C语言编写的下载器恶意软件。名字来源于恶意软件开发者Cobalt Group和样本中发现的DLL——int.dll。恶意软件可以分为三个阶段,下载主模块的初始下载器,主模块和其他额外模块。
Stage 1: 基本下载器
第一阶段是一个基本下载器,目的就是下载coblnt主模块。与之前发现的下载器一样,会使用Windows API函数哈希来进行伪装。
C2主机和URI都保存为加密的字符串。加密算法是基本的XOR算法,密钥为4字节,且随样本的变化而变化。8月14日样本中的C2主机和URI分别为rietumu[.]me和xaczkajeieypiarll。
下一阶段是通过HTTPS下载主模块,请求和响应数据如图4和5。
图4: Stage 1 HTTPS请求
图5: Stage 1 HTTPS响应数据
响应数据使用了3层加密:
· 基于字母的替换;
· Base64编码;
· XOR,XOR的密钥同时用作字符串加密。
解密后的数据含有一个DLL,即CobInt的主模块。Stage 1加载和执行该DLL后就结束了。
Stage 2:主模块
主模块会从C2下载和执行其他模块。C2地址保存在64字节的加密数据中。加密数据可以用64字节的XOR密钥进行解密。样本中C2地址与stage 1的C2地址是相同的。
恶意软件会使用HTTPS与C2服务器进行通信,command poll请求如图6所示:
图6: Stage 2 HTTPS command poll request
C2 URI与stage 1的URI类似,但是每个请求都回生成一个不同的URI。URI生成编码的信息好像会用作bot ID来识别受害者:
· 生成一个随机的4-10字节的XOR密钥
· 下面是数据会用图7中的算法进行哈希:
1.MAC地址哈希
2.当前进程ID
3.未知参数
· 哈希是数据会用随机生成的XOR密钥进行XOR编码
· 下面的数据会组成成二进制结构:
1.随机XOR密钥长度
2.随机XOR密钥
3.XOR编码的哈希数据
· 整个结构是用C2主机混淆使用的64字节XOR密钥来进行XOR编码的;
· 用未知的编码算法将二进制数据编码成字符。
图7: stage 2不同阶段使用的哈希函数
响应数据如图8所示:
图8: Stage 2 HTTPS响应数据
响应数据看似一个含有不同HTML标签的HTML文件,但实际上是加密的数据。可以使用过程进行解密:
· 移除HTML标签
· 将文本全部转为小写
· 移除不是小写字母的其他字符
· 通过解码算法将字母转化为二进制数据
· 用C2 host解密使用的XOR密钥XOR解密二进制数据
· 用下面的密钥进行第二轮XOR解密:
1.XOR密钥长度用数据的最后一个字节表示;
2.XOR密钥是数据的最后X字节,X就是密钥的长度
解密的响应结构如下:
· Command (BYTE)
· Command ID (DWORD)
· Command data
研究人员发现了C2发给恶意软件的4个命令,分别是:
· 加载、执行模块;
· 通知pool C2;
· 执行模块设定的功能;
· 更新C2 pooling 等待时间。
Stage 3: 其他模块
上面的命令1实现的是CobInt的主功能,即下载和执行其他模块。命令的数据组织方式如下:
· Module hash (图7) (DWORD)
· Module length (DWORD)
· Module
· Entry point (DWORD)
· Unknown DWORD passed to module
· Unknown remaining data passed to module
这些模块以shellcode的方式加载,并在特定入口点开始执行。在入口点代码会用4字节下XOR密钥进行XOR解密,不同的模块密钥不同(见图8)。一旦解密,模块就会变成DLL。
图9:模块解密为DLL示例
模块DLL执行后,从主模块传递的操作函数定义了操作:
· 主模块中排队的数据发送给C2服务器;
· 注册command 3执行的函数。
模块响应和错误消息会排队等候,然后在下一个命令poll请求期间发送给C2服务器。如果在command pool期间又消息发送,HTTP请求就会从GET变为POST,消息就会包含在POST数据中。消息数据的格式遵循下面的二进制结构:
· Module hash
· Response/error code
· Data length
· Data
· Random 32- or 64-byte XOR key
消息也是3层加密的:
· 前4个组件是用随机生成的XOR密钥XOR加密的;
· 整个结构也用C2 host加密中嵌入的64字节XOR密钥进行XOR加密;
· 用未知的编码算法将二进制数据转变为字符。
研究人员发现C2会发送2个模块,其功能为:
· 发送截图到C2;
· 发送运行的进程名列表到C2。
研究人员认为根据上面的步骤,威胁单元可以应用其他模块到受感染的系统中。
总结
通过对CobInt的分析,研究人员认为Cobalt(TA505)组织倾向于用静默的下载器来感染系统,然后安装其他恶意软件到系统中。模块化恶意软件看起来也是攻击的一个新趋势。