本帖最后由 清香白莲 于 2017-8-30 10:30 编辑
1.介绍
sample_sha1:0c9dec73697f74a8657e538eef8016a515e6cbc0图标:
图标.png (2 KB, 下载次数: 11)
2017-7-15 17:40 上传
传播途径:U盘,硬盘
该样本是某个群友在自己学校打印店里抓到的虫子。VT上显示最早上传时间是2009年。样本本身是Delphi程序,但是会释放一个VB程序。程序应该是中国人编写的,程序中含有“中华人民共和国万岁”和“感动中国特别奉献”等字样。
该样本会将自己伪装成文件夹,将除C盘以外的所有磁盘的文件夹隐藏,并将自身拷贝过去,并重命名为原文件夹名的名称,同时程序运行过程中会尝试打开与自身同名的文件夹,用户很难发现自己中毒。破坏力最大的是,当样本检测到当前日期为每月的1号、10号、21号或29号时,会将磁盘(C盘除外)里的所有文件删除。
2.行为分析
2.1注册表行为:
1. 新添加键
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\dongtian]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dongtian]
2. 删除值
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\HideFileExt] "CheckedValue"=dword:00000001
3. 新添加值
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce] "msfsa"="C:\\windows\\avb.exe"
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\dongtian] "Type"=dword:00000110 "Start"=dword:00000002 "ErrorControl"=dword:00000000 "ImagePath"=“C:/Windows/System32/javasc.exe”"DisplayName"="mywinter" "ObjectName"="LocalSystem" "Description"="dfdf"
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\dongtian\Security]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dongtian]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dongtian\Security]
4. 改变值
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\RNG]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL] "CheckedValue"=dword:00000001 "CheckedValue"=dword:00000000
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] "Hidden"=dword:00000001 ->00000002 "HideFileExt"=dword:00000000 ->00000001
2.2创建服务
服务名称:dongtian
显示名称:mywinter
描述:dfdf
可执行文件的路径: C:\windows\system32\javasc.exe
启动类型:自动
2.3释放文件
GHO.exe , javasc.exe, mscb.exe, sdafdf.exe, nasm.exe, mydat1, mydat2
3.详细分析
3.1总体分析:
这是一个Delphi程序,使用Delphi Decompiler分析。有五个响应过程:
图片2.png (28.46 KB, 下载次数: 2)
2017-7-15 17:40 上传
在IDA中分析,主程序流程很简单,CreateForm创建Form,然后Run进入消息响应循环:
图片3.png (21.21 KB, 下载次数: 2)
2017-7-15 17:40 上传
接下来对各个响应过程进行详细分析。
3.2 FormCreat
在CreateForm时进入FormCreat过程,下图是FormCreat的流程图:
图片4.png (27.98 KB, 下载次数: 1)
2017-7-15 17:40 上传
具体步骤:
①程序在开始调用ParamStr(0),获取自身进程名,比较进程名是不是javasc.exe,如果是则②,否则走③;
图片5.png (44.1 KB, 下载次数: 1)
2017-7-15 17:40 上传
图片6.png (9.45 KB, 下载次数: 1)
2017-7-15 17:40 上传
②将自身拷贝到C:\Windows下,并命名为sdafdf.exe,同时运行sdafdf.exe,之后便调用halt0()退出;
图片7.png (21.84 KB, 下载次数: 1)
2017-7-15 17:40 上传
③首先会判断与程序自己同名的文件夹是否存在,
图片8.png (12.66 KB, 下载次数: 1)
2017-7-15 17:40 上传
如果存在则会调用ShellExecuteA打开文件夹,
图片9.png (12.37 KB, 下载次数: 1)
2017-7-15 17:40 上传
无论与自己同名的文件夹是否存在,接下来都会判断C:\windows\avb.exe是否存在,如果存在,则④,否则⑧;
图片10.png (3.16 KB, 下载次数: 3)
2017-7-15 17:40 上传
④修改注册表(sub_44F3A0),然后进入⑤;
图片11.png (30.67 KB, 下载次数: 1)
2017-7-15 17:40 上传
⑤并且创建拷贝自身C:\windows\system32\javasc.exe,并在sub_44E5CC中将javasc.exe注册为服务,进入⑥;
图片12.png (16.79 KB, 下载次数: 1)
2017-7-15 17:40 上传
图片13.png (66.01 KB, 下载次数: 1)
2017-7-15 17:40 上传
⑥修改注册表不显示隐藏文件,并且修改文件夹选项也没用,删除文件夹选项中的隐藏已知文件类型的扩展名选项,删除这个键;
图片14.png (9.44 KB, 下载次数: 0)
2017-7-15 17:40 上传
(左图为正常情况下文件夹选项,右图为感染蠕虫后文件夹选项)
图片15.png (49.12 KB, 下载次数: 0)
2017-7-15 17:40 上传
图片16.png (48.83 KB, 下载次数: 0)
2017-7-15 17:40 上传
⑦接下来再次修改注册表,将avb.exe加入注册表Runonce中,之后退出;
⑧首先创建拷贝自身C:\windows\avb.exe,这里和上面拷贝方法相同,进入⑨;
⑨创建拷贝自身C:\windows\system32\javasc.exe,并在sub_44E5CC中将javasc.exe注册为服务,接下来再次修改注册表,将avb.exe加入注册表Runonce中,进入⑩;
⑩比较进程名是不是C:\windows\avb.exe,如果是则⑪,否则⑫;
⑪创建拷贝自身C:\windows\mscb.exe,并执行,之后调用halt0()退出;
⑫比较是不是C:\windows\mscb.exe,如果不是,则程序调用halt0()退出,如果是则CreateForm过程正常退出,程序继续运行,进行下面timer的响应过程。
3.3 timer4:
首先关闭计时器,然后读取资源,释放C:\windows\nasm.exe,并且运行nasm。nasm.exe的分析下文再介绍
图片17.png (30.51 KB, 下载次数: 1)
2017-7-15 17:40 上传
3.4 timer2:
首先获取当前系统时间
图片18.png (20.01 KB, 下载次数: 1)
2017-7-15 17:40 上传
然后在0x0044F2DE处,获取磁盘信息,具体获取过程:设置寄存器bl的值由0x43增加到0x5B,进行24循环,遍历C盘到Z盘,利用DiskSize判断磁盘是否存在,利用DriverType获取磁盘类型:
图片19.png (69.1 KB, 下载次数: 1)
2017-7-15 17:40 上传
获取磁盘信息结束后,会对之前获取的系统时间重新编码为年月日的形式,之后开始比较,如果当期时间为2009年3月之前,则Timer2过程就结束,并且判断当期日期是不是1号,10号,21号或29号病毒,如果是这几个日期会进行删除操作:
图片20.png (56.2 KB, 下载次数: 0)
2017-7-15 17:40 上传
删除所有文件
图片21.png (22.58 KB, 下载次数: 0)
2017-7-15 17:40 上传
3.5 Timer1:
这是该样本最重要的感染部分,首先会遍历目录,获取目录下的所有文件夹名,下图保存的是获取的文件夹信息,从123到新建文件夹均是文件夹名:
图片22.png (32.67 KB, 下载次数: 1)
2017-7-15 17:40 上传
之后设置文件夹属性,将文件夹隐藏:
图片23.png (11.11 KB, 下载次数: 1)
2017-7-15 17:40 上传
然后创建以文件夹名为名称的可执行程序,伪装成文件夹:
图片24.png (27.41 KB, 下载次数: 1)
2017-7-15 17:40 上传
其中CopyFile的第三个参数为True,表示若拷贝过去的文件路径下已存在相同文件,那么不替换文件。
3.6 timer3:
修改注册表
图片25.png (34.46 KB, 下载次数: 1)
2017-7-15 17:40 上传
3.7 nasm.exe
在timer4过程中释放了nasm.exe。nasm.exe与mscb.exe之间实现了双进程守护,两个进程彼此创建。首先在PEID中查看nasm.exe发现是VB程序,祭出VB反编译神器VB Decompiler。
图片26.png (26.1 KB, 下载次数: 2)
2017-7-15 17:40 上传
nasm.exe程序较简单,VB Decompiler反编译的结果也很清晰,基本就是源码,VB De反编译出nasm.exe程序中的函数有以下几个:
图片27.png (12.99 KB, 下载次数: 0)
2017-7-15 17:40 上传
其中Proc_403E60的作用是返回字符串“C:\Windows”,Proc_403FC0是Proc_403E60调用的一个中间过程,对字符串进行处理。
Proc_402A20利用CreateToolhelp32Snapshot、Process32First、Process32Next这三个API遍历进程,获取进程列表:
图片28.png (59.57 KB, 下载次数: 0)
2017-7-15 17:40 上传
Form_Load_403260的作用是调用Proc_403510,Proc_403510会将masb.exe文件的前0x5000字节存储为“C:\Windows\mydat1”,将后面的字节存储为“C:\Windows\mydat2”:
图片29.png (37.07 KB, 下载次数: 0)
2017-7-15 17:40 上传
三个文件属性比较:
图片30.png (34.34 KB, 下载次数: 0)
2017-7-15 17:40 上传
processhelp_Timer_4038D0会循环进程列表中有没有mscb.exe进程和heihu.exe进程。笔者研究了很久,也没找到heihu.exe程序是哪一个程序,但是如果程序检测到heihu.exe进程的存在,nasm.exe就会执行关机的shell命令:"shutdown -f -s -t 10 -c heihu error!"
图片31.png (13.62 KB, 下载次数: 1)
2017-7-15 17:40 上传
如果mscb.exe进程不存在,processhelp_Timer_4038D0会运行mscb.exe程序,但是如果processhelp_Timer_4038D0检测到C:\Windows路径下没有mscb.exe文件,则会执行existh_Timer_4038D0;existh_Timer_4038D0利用了和Proc_403510相同的手法,不过这一次是将mydat1和mydat2文件合并存储为mscb.exe程序。
至此,nasm与mscb.exe成为了守护彼此的“情侣”进程!
4.总结
本次分析的病毒,利用了各种途径让自己存活下来,虽然分析过程比较长,但是程序流程还是很清晰。该病毒将自己伪装成文件夹,通过U盘传播,利用守护进程保证自己难以被杀死,将自己注册为服务,实现了内存常驻。解压密码