一、u 盘感染病毒的行为分析
1、程序获取注册表值(部分获取命令以及修改注册表流程如下)
获取 TSAppCompat 目的是识别在应用程序模式下运行服务的服务器。在开机自启动时获取服务器以及微软为防止 DLL 劫持漏洞的产生所设置的SafeDllSearchMode 的值。
transparentEnable,获取服务器组关于 NAT 功能的设置
DisableMetaFiles,用来禁用原文件处理(为 1 时有效)
AppInit_Dlls,任何使用 user32.dll 的文件都会读取这个地方
TSUserEnabled,是否允许远程使用
修改的注册表项设置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\msfsa 的值可以实现指定 exe 文件自启动(=”GHD.EXE”)
2、文件操作
可以观察到系统截获 avb.exe,向其写入了数据并修改了数据,自此猜测avb.exe 才是实时感染的程序。
截获:
修改 avb 数据
同时也修改了 javasc
二、IDA分析
1、加壳检查
利用PEID进行壳检查
检测结果如下:
说明为 Delphi 语言编写,无壳。
使用 Delphi Decompiler 分析。有五个响应过程:
接下来开始分析这五个响应过程
2、IDA 分析 FormCreate
使用 IDA 打开,发现调用了 5 个函数
从 IDA 给出的函数名可知,第一个函数是初始化 exe 文件,第四个函数为系统运行 Run 函数进入消息响应循环,第四个函数是退出程序 Halt0 函数。第三个函数 CreateForm 创建 Form。
在 IDA 中使用快捷键 alt+t,查找字符串“avb.exe”
根据查找到的位置,定位到_TForm1_FormCreate 函数
此函数内部调用了ParamStr(0) 函数获取进程名称等信息,再调用ExtraFileName()函数提取出文件名称,与“javasc.exe”统一转成大写之后进行字符串比较。
如果进程名不是 javasc.exe,则转到
此模块会复制进程并重新命名为 sdafdf.exe 文件存储在 C:\\windows 下。结束后调用 shellexecute 函数运行此 sdafdf.exe,之后便调用 halt0()退出。
如果进程是 javasc.exe 那么,跳转模块如下:
此模块首先会获取文件所在路径,获取文件名称后,将当前路径与文件名称进程拼接得到完整的路径信息,比较当前目录与自己同名的文件夹是否存在,如果存在:
最终会调用 ShellExecute 对打开文件夹。无论与自己同名的文件夹是否存在,接下来都会判断 C:\windows\avb.exe是否存。如果存在,进入(1),不存在则进入(2)
(1)修改注册表(sub_44F3A0)。sub_44F3A0 函数如下:
注册表项如下:
sub_44F3A0 函数功能为:修改注册表不显示隐藏文件,并且修改文件夹选项也没用,删除文件夹选项中的隐藏已知文件类型的扩展名选项,删除这个键。之后创建拷贝 C:\windows\system32\javasc.exe,并在 sub_44E5CC 中将 javasc.exe注册为服务。然后又拷贝C:\windows\avb.exe
接下来再次修改注册表,将 avb.exe 加入注册表 Runonce 中,之后退出
(2)首先创建拷贝自身 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\avb.exe,则程序调用 halt0()退出
三、IDA 分析 Timer
分析响应过程(IDA分析)在IDA 中左边栏搜索关键字“timer”,获得四个响应过程
1. 响应_TForm1_Timer1Timer
进入函数sub_44EF94()分析函数功能
1.1 进入函数sub_44E9FC(&v12,a1)分析函数功能
如下图的while循环中可知此函数的作用是遍历目录文件
1.2 进入函数sub_44EEBC(v11)分析函数功能
1.2.1 进入函数sub_44EAA4(v10,(int)&v11)分析函数功能
如下图所示,函数sub_44EAA4(v10,(int)&v11)先通过FindFirst查找到第一个符合要求的文件,并记录其创建时间FatTime,然后根据创建时间找到所有此创建时间下的所有文件。
1.2.2 进入函数sub_44EC88((int)v12, v9)分析函数功能
此函数通过循环修改所有通过函数sub_44EAA4(v10,(int)&v11)找到的文件的文件属性,将文件隐藏。通过CopyFileA函数拷贝病毒文件,CopyFileA函数的第二个参数v11为隐藏掉的文件名称,将其病毒文件名设置为v11即隐藏掉的文件名,最后将病毒文件伪装成文件夹。CopyFileA函数的第三个参数v12恒为-1即True,表示若拷贝过去的文件路径下已存在相同文件,则不替换文件。
2. 响应_TForm1_Timer2Timer
v15为获取的系统时间的day,判断若系统时间年份大于2009,且日期day为1、10、21、29则触发感染事件,执行sub_447F078函数。
3. 响应_TForm1_Timer3Timer
进入函数sub_44F3A0(v2,v3,v4)分析函数功能
如下图所示,发现其主要功能为修改注册表
4. 响应_TForm1_Timer3Timer
如下图,步骤1中找到内存中exefile文件并free掉,然后通过ShellExecuteA调用 nasm.exe程序。
四、杀毒流程
从以上的分析可以知道,该病毒会将自己伪装成文件夹(病毒的图标是个文件夹,实际上是个可执行文件),将除 C 盘以外的所有磁盘的文件夹隐藏,并将自身拷贝过去,并重命名为原文件夹名的名称,同时程序运行过程中会尝试打开与自身同名的文件夹,用户很难发现自己中毒。破坏力最大的是,当样本检测到当前日期为每月的 1 号、10 号、21 号或 29 号时,会将磁盘(C 盘除外)里的所有文件删除。该病毒利用了各种途径让自己存活下来,伪装成文件夹通过 U 盘传播,利用守护进程保证自己难以被杀死,将自己注册为服务,实现了内存常驻。
对此,首先删除生成的对应文件。
这里是 GHO 生成了 javasc 和 avb。都需要删除。由于程序对部分文件做了隐藏我们还需要先行修改注册表的值。
删除自启动劫持注册表项。
RunOnce 在每次启动的时候都会运行,所以可以做到自启动。
删除这个注册表项。至此,杀毒完成。
【病毒样本获取】由于病毒样本比较特殊,随意传播具有一定危害性,需要病毒样本的请评论区留言或私聊