导语:11月份US-CERT发布了两份有关朝鲜政府恶意活动的警报,美国方面将该恶意活动称为“HIDDEN COBRA”。警告针对的是远程管理工具“FALLCHILL”和一个名为Volgmer的木马,本文关注的是后者。

11月份US-CERT发布了两份有关朝鲜政府恶意活动的警报,美国方面将该恶意活动称为“HIDDEN COBRA”。警告针对的是远程管理工具“FALLCHILL”和一个名为Volgmer的木马,本文关注的是后者。

Volgmer是一个后门木马,其设计初衷是提供通向受感染系统的秘密通道,据US-CERT,早在2013年后门木马就已经开始使用。下面,本文将深入研究Volgmer感染机器之后会出现什么状况,以及随后的恶意行动。

dropper

dropper是一个x86 PE EXE文件,其目的是在系统上安装Volgmer。先将一个DLL写入磁盘,然后创建一个使用DLL的服务来完成安装,并且使用持久性机制的服务将木马伪装成一个合法的系统组件。

嵌入式压缩

对dropper的初步分析显示,它有一个zip文件嵌入在参考资源部分。zip文件是受密码保护的,因此不进一步检查二进制文件则不能提取里面的内容。

图片1.png

图1-Dropper资源

dropper执行流程

最初,dropper使用XOR算法来解密一些字符串,该算法带有一个滚动的16字节的密钥。然后,动态地加载所需的API。在开始安装之前,会检查是否符合以下条件:

a)设备所属国家非韩国

b)操作系统是Windows XP或更高版本的系统、拥有一个产品类型的工作站

c)系统的正常运行时间至少是10个小时

然后,dropper会检查是否已经安装了该服务。如果已安装,它将尝试启动服务。当上述条件都满足时,dropper将会按照以下步骤安装恶意软件:

1. 名称生成

2. 注册表键和文件写入

3. 服务创建

名称生成

删除文件的名称和服务名称将从dropper中包含的字符串列表中随机生成。下面是创建名称的一个示例:

图片2.png

图2-名称生成

上面的列表包含服务短名称、服务长名称、服务描述、DLL文件名和DLL文件路径。有趣的是,服务描述是用一种阻碍删除的方式编写的(图3)。

图片3.png

图3-服务描述

注册表和文件编写

生成名称之后,提取并解密资源部分中的zip文件。有用的是,密码包含在最初解密的字符串列表中,并允许对zip文件内容进行手动提取和分析。

zip实际上包含两个文件:一个x86 PE DLL和一个配置文件。DLL被写入生成的文件路径,而配置文件是加密的(使用与字符串相同的滚动XOR算法),并写到一个注册表键: HKLMSYSTEMCurrentControlSetControlWMISecurity

设置两个值:

· 125463f3-2a9c-bdf0-d890-5a98b08d8898
· f0012345-2a9c-bdf8-345d-345d67b542a1

配置文件实际上包含一个初始的IP地址和端口号列表,服务将尝试并连接到该列表(参见图4)。

图片4.png

图4-配置文件

服务创建

DLL文件已写入磁盘,并且IP地址列表也写入注册表中,接下来,dropper将尝试创建和启动服务。服务注册键是手动添加的,创建开始类型设置为SERVICE_AUTO_START的服务,以便Windows启动时该服务自动启动。

图片5.png

图5-调用CreateServiceA

dropper最后一个动作是自动删除。它将一个批处理脚本写入磁盘中,不断地尝试删除dropper,并运行一个CreateProcess调用。

服务

创建的服务包含Volgmer木马的后门功能,并且其全部功能包含在DLL中,当系统启动时(或者是dropper初始化服务),将被svchost.exe调用。

服务代码有两个主要阶段:

1. 设置

2. 主循环

设置

和dropper一样,DLL中使用的所有字符串都是加密的,所有的API都是动态加载的。因此,该服务的第一个任务(除了注册本身)就是加载API并对所有的字符串进行解密。

下一个任务是从注册表中加载配置,对其进行解密,然后将IP地址列表存储在内存中以便以后使用。

在主循环开始之前,以GetTickCount作为种子,DLL将生成一个随机的整数。这个整数将使用lea指令进行相乘,然后向左移动以进一步增加它的值。

图片6.png

图6-sleep调用

主循环

服务的主循环不断地收集数据,并检查来自控制服务器的命令。

网络通信

Volgmer的网络通信完全是自定义的,用套接字来实现。它不使用标准的网络流量加密协议,而是实现自己的加密协议

‌首先,使用GetTickCount作为种子的_rand函数创建16字节的随机值。然后计算随机值的RIPEMD160散列,并将随机数据和散列发送到服务器。服务器将生成一个从客户端接收到的散列的RIPEMD160散列,然后将其发送回。客户端将生成相同的散列,并将其与服务器的应答进行比较。

这种‘handshake’形式实际上是一个基本的密钥交换,而散列值将用作加密/解密与服务器通信的密钥,其实是一种滚动XOR算法,在DLL和dropper中对字符串进行解密用的也是该算法。

在网络通信中使用的请求头是随机生成的字符串列表。值得注意的是,在用户代理字符串中Mozilla的拼写错误。

图片7.png

图7-随机头串

信息收集

在服务器接受命令之前,Volgmer先收集一些信息,发送给服务器。木马也会进行一些常见的检查(例如,反VM检查,进程黑名单),但是检查结果不会影响执行流程。

虚拟机检测

Volgmer会试图通过两种常见的反VM检查来确定,其是否在VMware或VitualBox虚拟机(VM)中运行。Volgmer第三个也是最后一个检查使用了深奥的vpcext(可视属性容器扩展器)指令。在一些虚拟机上,指令会成功,而在物理机器上,指令会出现异常。

图片8.png

图8-vpcext指令

其他信息

还进行了许多其他的检查,其中包括对杀病毒软件的检查(参见图9)、检查是否该程序被调试通过、检查过程黑名单(查找像OllyDbg、进程监视器、Wireshark等工具)以及注册中心黑名单检查。

注册表关键的例子:

· SOFTWAREVanDykeSecureCRT
· SOFTWARERealVNC
· SOFTWARERadmin
· SOFTWAREFileZilla Client

图片9.png

图9-AV字符串

服务器命令

下面的表格详细说明了Volgmer可以从服务器接收到的命令:

QQ截图20171218000713.png

攻击指示器

注册表键:

HKLMSYSTEMCurrentControlSetControlWMISecurity 125463f3-2a9c-bdf0-d890-5a98b08d8898
HKLMSYSTEMCurrentControlSetControlWMISecurity f0012345-2a9c-bdf8-345d-345d67b542a1
35.223.16.103:8080
194.244.28.113:8080
179.145.48.116:8080
20.9.116.186:8000
172.198.149.186:8080
97.71.67.186:8080
232.91.28.195:8088
148.97.97.195:8080
120.234.15.199:8080
133.69.42.200:8080
99.222.131.203:8080
181.87.187.210:8080
157.204.231.83:8088
218.224.232.84:8088
133.69.42.200:8088
130.176.242.24:8080
70.190.93.78:8080
42.188.190.89:8080
e40a46e95ef792cf20d5c14a9ad0b3a95c6252f96654f392b4bc6180565b7b11
eff3e37d0406c818e3430068d90e7ed2f594faa6bb146ab0a1c00a2f4a4809a5
1d0999ba3217cbdb0cc85403ef75587f747556a97dee7c2616e28866db932a0d
6dae368eecbcc10266bba32776c40d9ffa5b50d7f6199a9b6c31d40dfe7877d1
9f177a6fb4ea5af876ef8a0bf954e37544917d9aaba04680a29303f24ca5c72c
fee0081df5ca6a21953f3a633f2f64b7c0701977623d3a4ec36fff282ffe73b9
ff2eb800ff16745fc13c216ff6d5cc2de99466244393f67ab6ea6f8189ae01dd

1. https://www.us-cert.gov/ncas/alerts/TA17-318A

2. https://www.us-cert.gov/ncas/alerts/TA17-318B

源链接

Hacking more

...