DDG僵尸挖矿样本v3020更新点分析

与DDG 3016版本相比,v3020代码的整体执行流程上没有太大变化,主体分布式框架依然采用Memberlist,样本蠕虫机制以及对应攻击模块也没有任何更新。

v3020同样是从主C&C节点获取配置文件后,通过反射机制传入配置文件中特定参数并调用指定的攻击模块,通过检测发现,v3020版本主要利用SSH弱口令和Redis未授权访问漏洞完成样本的传播和执行。而样本版本从v3016到v3020,经过这么多次短时间频繁的迭代更新,肯定有所变化,经过比对分析,我们发现样本作者主要通过以下几个方面优化代码,同时也增加了样本分析的难度,攻防对抗性更强。

一. v3020版本重新采用了UPX 3.95压缩,大幅度减小了样本的体积,分析样本直接UPX –d解压即可。

二. v3016版本之后内置的IP列表不再直接明文存放,其中v3017~v3019采用了hex编码的方式存放, 而v3020版本则采用hex编码+异或的方式存放。

跟进v3020版本,得到其内置IP具体处理过程如下:

首先循环取出796个字节,按照标准点分十进制IP的格式分为4个字节一组,这样就可以知道整个内置IP列表的数量就为199个:

针对取出的每4个字节按顺序分别做对应的异或处理后转化为十进制,最后将得到4个十进制数拼接上端口号,就得到标准的点分十进制地址。

部分编码后存储的IP地址如下:

前四个字节解码后得到点分十进制的IP地址如下:

利用idapython的api处理下得到完整的内置IP列表:

部分输出如下:

三. DDG在v3016中采用<version>.bs文本方式存储集群中的节点信息。而v3020则将其存储在<version>.db的数据库文件中。

分析发现DDG采用的是一个纯粹的 Go key/value数据库Blot作为数据存储,这样对于样本来说,数据存取更高效快捷,同时节点信息也更隐蔽。

BoltDB存在一种结构叫 Bucket,类似于关系型数据库的”表”。在v3020版本中,DDG将集群节点数据存放在名为XListBucket的Bucket中,键值为bootstraps:

并在当前主机加入分布式网络后,将获取到的远端节点信息动态更新到Blot数据库中:

本地利用golang的Blot包读取db文件中的数据值,将键值以hex形式输出:

可以看到采用的是和内置列表IP一样的存储方式,将点分十进制的IP数据hex编码和异或后存储,给分析者一种加密后的错觉。其次我们发现db文件的大小在样本运行期间始终不会变化的,但是其中的键值变化了,也就是说v3020的DDG样本不会在受害者机器上存储集群内所有存活节点信息了,而是只存储固定的200个节点地址,并动态更新其中的节点地址。如下是更新之后Blot中的键值信息:

可以很直观的看到键值的变化.

截止如今,DDG又迭代更新了两个版本,到了v3022,大致跟进了下新版,在以上几个安全分析对抗的点并没有太大变化,更新的主要的内容主要是对抗其余同类挖矿样本,如何让DDG自身的利益达到最大化。

MD5:

ddgs.i686_3020:      3EBE43220041FE7DA8BE63D7C758E1A8

ddgs.x86_64_3020: D894BB2504943399F57657472E46C07D

主C&C:

132.148.241.138

参考链接:

https://www.anquanke.com/post/id/170021#h3-7

https://github.com/boltdb/bolt

DDG僵尸挖矿样本v3020更新点分析》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注