导语:Proofpoint研究人员之前发现了两个新的模块化下载器Marap和AdvisorsBot,这两款下载器的主要功能是静默感染,明显是为了侦察。

Proofpoint研究人员之前发现了两个新的模块化下载器MarapAdvisorsBot,这两款下载器的主要功能是静默感染,明显是为了侦察。研究人员发现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下载器。

图片.png

图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利用文档。

图片.png

图2: 8月16日消息示例

9月4日,消息发送者的域名为ralffeisen[.]com,伪装为Raiffeisen银行,主题为Fraudulent transaction、Wire Transfer Fraud(电汇诈骗)、Request for data等。消息中含有一个word附件,附件回下载含有CVE-2018-8174漏洞利用的外部VB脚本文件,漏洞利用会导致CobInt stage 1的执行。

图片.png

图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。

图片.png

图4: Stage 1 HTTPS请求

图片.png

图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所示:

图片.png

图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编码的;

· 用未知的编码算法将二进制数据编码成字符。

图片.png

图7: stage 2不同阶段使用的哈希函数

响应数据如图8所示:

图片.png

图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。

图片.png

图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)组织倾向于用静默的下载器来感染系统,然后安装其他恶意软件到系统中。模块化恶意软件看起来也是攻击的一个新趋势。

源链接

Hacking more

...