针对“DorkBot”的样本分析

概述

DorkBot是一种已知的恶意软件,最早可以追溯到2012年。它被认为通过社会媒体链接、即时消息应用程序或受感染的可移动设备等多种方式进行传播。尽管它是众所周知的恶意软件家族中的一员,但我们相信已经有更多的网络感染了Dorkbot,而且超过了我们之前的预计,其中受影响最大的国家是斯里兰卡、印度和俄罗斯。

Dorkbot感染的地理分布

恶意软件本质上是一个通用的下载器和一些二进制组件的启动器,主要模块是用于执行DDoS攻击或窃取密码。此次的分析是基于在过去一个月中多次捕获到的一个在野样本。

DorkBot恶意软件被打包在一个dropper中,其中payload被嵌入到一个RC4加密的blob(二进制大对象)中。这个blob可以在二进制编码的资源部分中找到,并且使用Base64编码。

图1: Base64 编码& RC4加密资源

RC4密文的前缀是32字节的元数据,其中包含了以字节为单位解密的RC4密钥。

图 2: 解码资源的结构

dropper先对Base64编码的payload进行解码,然后对其进行后续解密,最后的结果由一段用于PE加载的shellcode和恶意软件原始二进制文件组成。在解密之后,控制权被移交给位于原始二进制文件中的shellcode,然后将其进行装载并执行入口处代码。

图3: 解密和执行嵌入在资源中的payload

该恶意软件的dropper可以通过一个特殊的循环来识别,该循环中会出现一个消息框调用一个未定义的句柄,其值为0xFFFFA481,显示文本为“Will exec”。

Payload

Payload主要包含下列行为:

检验参数:如果是一个文件名作为参数传递,它将在当前目录中查找并使用ShellExecuteW执行。但是,如果参数以“\”结尾,那么它将被假定为一个目录名。在后一种情况下,通过使用ShellExecuteW生成“exe”,将目录路径附加到当前目录作为参数,并在新窗口中打开。该特性是为了在恶意软件下运行其他进程,并利用它来替换所有的快捷方式来运行恶意软件,然后使用它来生成实际的快捷路径,从而在系统中实现长时间驻留。

拷贝自身:恶意软件会在%appdata%中创建自己的副本。

反虚拟机:使用SetupDiGetDeviceRegistryPropertyA获取硬盘的设备名称,并检查它是否包含一个下面的子字符串:“vbox”、“qemu”,“vmware”,“virtual hd”。如果包含,恶意软件将判断为在虚拟机中运行,进而会终止进程。

终止自启动进程:枚举以下注册表项,关闭所有非恶意软件相关的自启动进程:

图4: 通过注册表run key键值,枚举和终止自启动进程

计算ComputerID:每台被感染的机器都有一个“#”格式的ID,其中第二个参数是系统信息缓冲区的MD5哈希,其结构如下:

在运行时可以看到这种结构的一个例子:

图 5: 用于计算Machine ID的hash值的缓冲区结构

计算GUID:恶意软件中的大多数对象(事件、互斥、文件名等)都是基于生成的GUID来命名的,此次的GUID按照如下方式构建(基于前面提到的系统信息结构,当前进程所有者的SID和一个key作为参数传递给GUID生成函数):

APC注入:创建一个挂起的进程,将恶意软件的内存映射注入进去,将其主线程的控制函数(接下来要叙述的)作为一个APC队列,并恢复其主线程。因此,上述函数开始运行在svchost.exe进程中。

工作线程控制函数:该函数包含恶意软件的主要功能,以线程的形式调用各种功能。预计这个函数将会在前面提到的APC注入后的宿主exe中运行,如果失败,将在当前进程的上下文中运行。然而由于代码中出现的一个bug,后者将不会在现实中发生。在进程句柄关闭后,正在启动的svchost.exe主线程句柄也会关闭。这会导致进程崩溃,从而避免进一步的恶意活动。

函数本身的行为如下:

Ø PE加载操作,即进行重定位操作以及解析导入的恶意软件映射的执行。 Ø 创建一个隐藏的计划任务(使用ITask COM类),该任务设置为在当前用户的登录时启动。 Ø 创建注册表runkey,在HKCM\Software\Microsoft\Windows\CurrentVersion\Run。键的名称是预先生成的GUID,路径为复制到%appdata%下的恶意文件。 Ø 在一个单独的线程中删除原始的恶意软件文件(除非当恶意软件从一个非移动介质运行,并成功地注入到exe)。

如果恶意软件是由可移动的媒体执行的,它将在HCKU\Software\Classes\CLSID下注册一个指定的类,类名是GUID,键值为0xDEADBEEF。

图6:恶意软件注册一个类

文件修改监控:一个线程会不断地计算%appdata%下复制的恶意二进制文件的CRC32,并将其与原始文件的CRC32进行比较。一旦发生变化,复制文件会被删除,并将其重写为原始文件的内容。

图7: 文件更改监视器代码

替换快捷方式:遍历所有安装的驱动器(通过GetLogicalDriveStringsW获取)并枚举所有文件,以找到具有“.lnk”扩展名的文件。如果找到这样的文件,则通过以下参数去执行exe去修改目标路径(使用IPersistFile COM类):

Ø 由恶意软件生成的包含恶意软件副本的路径。 Ø 枚举文件的路径,它将通过执行恶意软件本身来调用。

注入进程监控代码:该恶意软件将枚举所有正在运行的进程,并排除64位进程、当前进程和运行名为“teamviewer.exe、tv_w32.exe”的进程。

图8:将TeamViewer排除在注入的目标进程之外。

所有其他进程(以及恶意软件创建的notepad.exe进程)将被注入以下代码:

图9:注入进程监视代码

指针0x11111111、0x22222222、0x33333333和0x44444444将在注入函数之前被替换,如下所示:

图10: 在进程监视payload中把无效指针替换成真实的函数指针

注入的代码本身将无限期地等待一个事件,当原始的恶意软件进程被终止时,信号量将会被释放。当出现这种情况,注入的进程监控代码将会再次启动恶意软件。

l通信:所有C2域名都存放在一个以AES256-CBC加密的blob二进制文件中,排列成一个指针列表,在.data区段偏移16的位置中可以找到。

图11:被加密的CnC域名表

解密的密钥为“GD!brWJJBeTgTGSgEFB/quRcfCkBHWgl”。

图12:CnC域名的解密函数

在恶意软件中可以观察到以下类型的通信:

Ø HTTP GET 请求一个文件从样本的C2服务中。C2将通过“v%d”格式的子域进行联系,其中的%d数值是从运行时的全局变量中获取。如果从服务器成功返回一个文件,那么它将一10字符的随机数命名存在在%appdata%下,并使用CreateProcessW启动。 注意:其他变种的恶意软件可能使用不同的子域名,例如“up%d”。 Ø 基于TCP的原始协议,用于获取可从中下载文件的新CnC地址。协议请求消息是一个包含170个字节的缓冲区,具有以下结构:

图13:请求CnC的原始协议结构

响应包由517字节组成,具有以下结构:

图14:来自CnC的响应包

IOCs

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-02-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏农夫安全

从零开始内网安全渗透学习

0x00 win2008(域控) 1、修改计算机名: ? 2、配置固定ip: 其中网关设置错误,应该为192.168.206.2,开始默认的网管 ? 3、服...

91810
来自专栏流柯技术学院

selenium启动firefox时加载扩展

    有些时候,我们测试需要用到插件或者已经导入的证书(比如金融和安全加密行业),而selenium启动firefox时会打开一个新的,不含有任何插件和个人证...

2401
来自专栏FreeBuf

AutoIt木马又一发:暗藏神秘照片

AutoIt是一个自动化的Windows界面交互的脚本语言,具有很高的灵活性和较低的学习曲线。由于AutoIt解释器本身属于合法程序,黑客可以把恶意代码藏在脚本...

3309
来自专栏玄魂工作室

Python黑帽编程 4.1 Sniffer(嗅探器)之数据捕获(上)

Python黑帽编程 4.1 Sniffer(嗅探器)之数据捕获(上) 网络嗅探,是监听流经本机网卡数据包的一种技术,嗅探器就是利用这种技术进行数据捕获和分析的...

6397
来自专栏XAI

每一个程序员需要了解的10个Linux命令

以下就是今天我们要介绍的Linux命令:  man  touch, cat and less  sort and grep  cut  sed  tar  fi...

2346
来自专栏海天一树

Python Selenium爬取百度百科旅游景点的基本信息

在与python文件同级的目录下创建scenic_spots_5A_namelist.txt,内容为

1232
来自专栏小白安全

Discuz网站通用修改注册会员数和显示在线人数

一.修改在线人数跟会员: 1.找到文件:sourcemoduleforumforum_index.php 2.查找代码: $onlinenum...

3678
来自专栏酷玩时刻

支付宝Wap支付你了解多少?

为了方便开发者生成一对RSA密钥支付宝提供一键生成工具,具体如何生成与配置密钥详见签名专区。

3672
来自专栏*坤的Blog

公司web安全等级提升

公司的一个web数据展示系统,本来是内网的,而且是一个单独的主机,不存在远程控制的问题,所以之前并没有考虑一些安全相关的测试.但是国调安全检查的需要添加这样子的...

2174
来自专栏菩提树下的杨过

Flash/Flex学习笔记(53):利用FMS快速创建一个文本聊天室

先来看客户端fla的构成: 第一帧:登录界面 ? 第一帧的代码: import flash.events.MouseEvent; import com.adob...

2109

扫码关注云+社区

领取腾讯云代金券