安全研究:incaseformat病毒再次爆发时间预警

资讯文章 304

这是关于incaseformat病毒的爆发时间推演算法的代码级深度分析。


incaseformat算是一个相对比较老的病毒,该病毒会删除非系统盘下的文件内容。通过对病毒文件反编译后代码分析,病毒设定会在每月1日、10日、21日和29日爆发,而实际上并非如此。



对代码深入分析后,我们发现病毒在计算时间时并非按照标准的自然天计算,而是1天2小时20分钟54秒(即将一天的毫秒数0x5265C00改为0x5A75CC4)。目前尚不知是作者有意为之还是程序bug,但导致的后果是病毒爆发的节点会被因此推迟相当长一段时间。所以我们需要重新计算病毒爆发的实际时间。


经锐捷网络安全攻防实验室的分析推算,incaseformat病毒爆发时间如下:


开始时间

结束时间

2021-01-13  08:50:17

  2021-01-14 11:11:11

2021-01-23 05:58:26

2021-01-24 08:19:20

2021-02-04 07:48:24

2021-02-05 10:09:18

2021-02-13  02:35:38

2021-02-14 04:56:33

......


本文主要通过逆向分析incaseformat的几个窗口过程调用,了解病毒实际的主机行为,推算出病毒再次爆发时间。


以下为病毒详细分析


1.  病毒入口:


病毒首先启动进入start函数,该函数包括了窗口初始化操作,窗口设置以及自定义消息定义和窗口过程调用。



该病毒显示注册了4个自定义的消息定时器和一个窗口创建过程,如下图:



2.  FormCreate窗口过程:


a.该病毒在创建窗口时隐藏了窗口的显示功能。通过动态调试改变窗口显示的参数,可以让该病毒显示其窗口内容。



通过动态改变寄存器的值,可以看到该窗口展示如下内容:



b.之后该病毒启动TForm_FormCreate()消息处理过程。该病毒第一次启动会判断文件C:\\windows\\tray.exe是否存在,不存在就会将自身建立该文件,并设置注册表自启动。之后自身会退出。



c.设备重启后ttray.exe运行,然后将自身拷贝为C:\windows\ttry.exe并将ttry.exe作为最新进程直接启动,同时自身退出。




3. Timer1timer回调函数,

判断当前磁盘的类型并开始遍历文件:



4.Timer2定时器回调函数


主要功能为解码当前时间;并与代码中配置的时间进行对比。如果条件符合,则执行文件删除操作。


a.  病毒时间调整调用流程:

timer2timer()->decodedate()->decodedatefully()->datetimetotimestamp()


b. time2timer函数计算当前时间是否符合要求,如果当前时间大于2009年,月份大约3月,日期为1号,10号,21号,29号,则会触发病毒发作。但由于错误配置导致该病毒计算的时间和当前时间有偏差。



c. decodedate函数调用直接调用了decodedatefully函数



d. decodedatefully函数主要是针对datetimetotimestamp函数返回公元0年到现在的总天数,计算当前时间、日期。




e. datetimetotimestamp函数将1900年到现在的天数乘以8.64e7毫秒再除以0x5A75CC4得到计算后的天数,再加上1900年的天数返回总天数。



f. 最后总结了从获取当前时间到最后计算后所属的年月日。




g. now函数的时间确定方法:



delphi的now时间函数获取的是1900年到当前的时间,now函数返回值为TDateTime类型,该类型的双精度类型,所以在now调用后返回值存在在st0寄存器中. st0寄存器的整数部分是1900年到现在的天数,小数部分为当前过去的时间占一天的比例。


比如上图st0整数部分为44209,44209/365=121年,当然有余数,那是因为在121年中有几十年的闰年,同时44209也不是整年,所以有余数。但是整数代表过去了多少年;1900+121 =2021年刚好是当前年份。


小数部分计算时间:


0.738978333334670 * 24 = 17.7354799999;表示17点

0.7354799999 * 60 =44.128799994;表示44分

0.128799994 * 60 = 7.72799964 表示7秒。

由此我们知道判断的now函数获取的当前时间为2021年1月13日17:44:07.


h. 时间病毒爆发的具体时间段:


我们知道上面在从2021年通过错误计算到2010年的过程中,在NOW返回值乘以8.64e7,转为毫秒,再除以0x5A75CC4,最后得出结果为9D4D=40269天如下图:



也就是只要我们能得到40269天的时间段都是属于2010年4月1日这一天。由此往回推40269天的毫秒时间段为:


起始时间

结束时间

9D4D * 0x5A75CC4

9D4D * 0x5A75CC4+0x5A75CC3


转为实际时间为


起始时间

结束时间

9D4D * 0x5A75CC4/8.64e7

9D4D * 0x5A75CC4+0x5A75CC3/8.64e7

 

计算结果


起始时间

结束时间

44,209.36825763889

44,210.46610878470


将上面的小数部分按照前面的方法换算成时间为


起始时间

结束时间

08:50:17

11:11:11


也就是该病毒第一次爆发的准确时间为2021年1月13日8:50:17,结束时间是1月14日11:11:11,第二次爆发的时间是2021年1月23日 05:58:26,结束时间是1月24日08:19:20,第三次爆发的时间是2021年2月4日 07:48:24,结束时间是2月5日10:09:18;第四次爆发的时间是2021年2月13日 02:35:38,结束时间是2月14日04:56:33,后续具体的时间段以此方法类推即可。


5.time3timer: Timer3回调函数


主要功能为注册表操作,设置文件隐藏属性:



6.  Timer4timer回调函数


主要功能为创建incaseformat文件



综上,锐捷网络安全攻防实验室是锐捷网络旗下尖端研究团队,实验室秉承“攻防一体”的理念,从事攻防技术研究,在安全领域前瞻性技术研究方向上不断前行。该团队针对安全漏洞、僵尸网络、病毒和APT攻击做深入研究和分析。作为锐捷的安全产品支撑团队,攻防实验室为锐捷承担国家重大安全项目和客户服务提供了强有力的技术支撑。



锐捷“网络+安全”主张将网络设备的安全能力充分发挥,网络设备、安全设备与安全平台智能联动,告别安全孤岛,构成整网联动的安全保障体系,实现防护、安全预测、分析和响应等安全问题自动化全流程闭环。


如您需要锐捷安全,请留下您的联系方式


相关阅读