【技术分享】采用独特域名生成算法的Tofsee僵尸网络

admin 2023-12-07 17:04:56 AnQuanKeInfo 来源:ZONE.CI 全球网 0 阅读模式

http://p0.qhimg.com/t014b2947e06ccaba51.png

翻译:pwn_361

预估稿费:140RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

概述

瑞士政府计算机应急响应中心(GovCERT)近日发现了Tofsee僵尸网络恶意软件的新样本,让他们感到惊讶是,Tofsee的域名竟然是由算法随机生成的,目前他们已经恢复出了算法的细节,并将未来12个月中可能出现的域名列入了黑名单。


内容

今天,我们发现了一个有趣的恶意软件样本,我们确认出这是Tofsee恶意软件,它试图在几分钟内发送数百封垃圾邮件,然而,这并不是它出现在我们视线中的原因(我们每天分析数以千计的恶意软件样本,很多都有这样的行为)。这个特定的样本引起我们注意的原因是它所使用的域名查询方法。它使用的域名似乎是用算法生成的,并且大约有一半域名是瑞士国家顶级域名(ccTLD)。

http://p2.qhimg.com/t017f0e0926b86c6263.png

使用域名生成算法(DGAs)的恶意软件是非常罕见的。


分析

我们分析的这个Tofsee样本有一个非常新的时间戳:“2016年12月16日星期五,07:09:11”。

http://p2.qhimg.com/t018f42e6d2666f9d61.png


生成种子

下面我们来探讨DGA的具体过程。首先,计算1974年1月1日0时到现在的秒数(下图中 0x40A0A0),然后在 0x0040A0A8处,用这个值加再加上126230400秒(UNIX纪元到1974年1月1日的秒数),实际上,通过上面的步骤得到了当前的UNIX时间。目前我们尚不清楚为什么要采用这种复杂的方法获取当前UNIX时间。这个Unix时间分别再除以四个整数,分别是60,60,24和7,最后得到的是从UNIX纪元到现在的周数。这个值用作域名生成算法的种子。因此域名的有效期是一周,按UTC时间,从每周四开始。

http://p6.qhimg.com/t01a5c140df1823657c.png

在种子生成过程中还调用了一个伪随机数发生器(PRNG),并将结果模10,得到0到9中的一个数。这个随机数发生器采用Borland C/C++编译器使用的标准线性同余算法。

http://p6.qhimg.com/t018a561eb822d6c7e3.png

r2的初始值是几乎不可预测的:

http://p9.qhimg.com/t017f039b6929529110.png

DGA

每次域名生成过程,共产生10个域名。

(域名级别是网址分类的一个标准,包括顶级域名、二级域名等。一个完整的域名由二个或二个以上部分组成,各部分之间用英文的句号"."来分隔,倒数第一个"."的右边部分称为顶级域名(TLD),顶级域名的左边部分字符串到下个"."为止称为二级域名(SLD),二级域名的左边部分称为三级域名,以此类推,每一级的域名控制它下一级域名的分配)

http://p3.qhimg.com/t01437f3d817117725e.png

在0x040A0FC 位置,根据种子生成一个随机字符串,例如周数。随后这个随机字符串在0x040A114又被复制了一次。例如:字符串dqg在这变成了dqgdqg,这个字符串的生成细节,待会我们回过头来再细讲。

生成第一个SLD时,用上面讲到的不可预测的随机数生成算法(0到9共10个数),选取“a”到“j”之间(共10个字母)的随机字母,添加到上面的字符串后面,就生成了二级域名,如dqgdqgc.ch。然后,从选取的字母开始,DGA会依次选取a到j中的字母,比如,如果第一次选取了“c”,后面的依次就是“d”,“e”,“f”,“g”,“h”,“j”,“a”,最后是“b”,共10个域名。

前5个域名的顶级域名设为“.ch”,剩下的设置为“.biz”

下面,我们再来看一下0x040A0FC处的随机字符串(上面的dqgdqg)是怎么生成的。

http://p8.qhimg.com/t014af2533284ea56e4.png

这段过程使用了最开始生成的种子r(周数),例如,根据1970年1月到现在的时间,换算成周数,利用周数得出随机字符串,如下:

http://p7.qhimg.com/t0160a4b380265f5812.png

例如:2016年12月20日,根据UNIX纪元计算出的周数是r=2450,string1 = 2450%26+‘a’=g,r=2450/26=94,因此第一个字母是g,同时r!=0,继续循环,直到r=0时结束,最后依次得到的字母是:g、q、d。随后,随机字符串gqd被倒序为dqg。随后又被复制了一次,得到dqgdqg。


程序实现

下面是用python实现在DGA算法,根据给定的日期,能打印出所有20个可能的域名。需要注意的是,对于每一个正在运行的Tofsee恶意软件,只会用到其中的一个域名。

http://p3.qhimg.com/t0148bebf34f32a57b0.png

下面是在日期设置为2016年12月20日时的所有20个可能的域名:

http://p8.qhimg.com/t016954308b80ce2a24.png


域名列表

下表列出了未来52周的所有可能的域名,域名中括号包含了随机扩展,如dqgdqg{a..j}.{ch,biz}代表20个不同的域名。所有的时间都采用CET(中欧时间)时间。

http://p2.qhimg.com/t010d2f234dde25cddb.png

采取的行动

为了防止这种Tofsee僵尸网络操作者滥用瑞士域名空间(ccTLD .ch),我们和瑞士国家顶级域名注册机构已经采取了进一步的措施,所有可能的DGA域名的组合,在注册状态处已经被设置为非注册状态。因此在未来12个月,任何由DGA算法生成的域名,都不会被注册。


参考链接

https://www.easyaq.com/newsdetail/id/1946003877.shtml

weinxin
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
评论:0   参与:  0