导语: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-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可以从服务器接收到的命令:
攻击指示器
注册表键:
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