看看朝鲜的黑客的代码怎么样

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

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

dropper

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

嵌入式压缩

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

图1-Dropper资源

dropper执行流程

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

a)设备所属国家非韩国

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

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

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

1. 名称生成

2. 注册表键和文件写入

3. 服务创建

名称生成

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

图2-名称生成

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

图3-服务描述

注册表和文件编写

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

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

设置两个值:

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

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

图4-配置文件

服务创建

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

图5-调用CreateServiceA

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

服务

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

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

1. 设置

2. 主循环

设置

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

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

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

图6-sleep调用

主循环

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

网络通信

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

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

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

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

图7-随机头串

信息收集

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

虚拟机检测

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

图8-vpcext指令

其他信息

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

注册表关键的例子:

· SOFTWAREVanDykeSecureCRT

· SOFTWARERealVNC

· SOFTWARERadmin

· SOFTWAREFileZilla Client

图9-AV字符串

服务器命令

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

攻击指示器

注册表键:

HKLM\SYSTEM\CurrentControl\SetControl\WMI\Security 125463f3-2a9c-bdf0-d890-5a98b08d8898

HKLM\SYSTEM\CurrentControl\SetControl\WMI\Security 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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171223A0JTXS00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券