一、基本信息
样本来源:未知
样本类型:游戏盗号木马
样本文件和大小:s1.exe(40.0KB)/ 91C7DF6D.dll(44.2 KB)
加壳类型:UPX
样本文件MD5 值:s1.exe MD5:5488DE3DF644F391CFDA120DEA6126E5
91C7DF6D.dll MD5:D022CD4BA70A105B81E31AE30D21F979
二、简介
此程序为盗号木马,开机自启动,母体运行后会释放木马dll文件然后注入到目标进程中,然后捕获游戏界面输入的帐号密码发送到指定的URL,实现盗号功能,由于采用dll注入方式同时母体会被删除,其行为比较隐秘不易发现。
1、文件系统变化
木马释放文件:
C:\WINDOWS\system32\91C7DF6D.cfg
C:\WINDOWS\system32\91C7DF6D.dll
%temp%目录下创建前缀是live的临时文件
木马删除文件:
C:\WINDOWS\system32\VErCLSiD.exe
2、注册表变化
创建键值:
hKey = HKEY_CURRENT_USER
Subkey = "CLsID{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32"
Value date=”C:\WINDOWS\system32\91C7DF6D.dll”
hKey = HKEY_LOCAL_MACHINE
Subkey =”Software\microsoft\windows\currentversion\Explorer\shellexecutehooks”
Value name=”{91C7DF6D-AEF5-4136-9252-AF030D7A5931}”
hKey = HKEY_CLASSES_ROOT
Subkey = "CLsID{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32"
Value date=”91C7DF6D.dll”
hKey = HKEY_CLASSES_ROOT
Subkey = "CLsID{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32"
Value name=”ThreadingModel”
Value date=”Apartment”
3、网络行为
访问URL:http://www.y0uku1.com/cia/bike.asp
三、技术分析
【母体分析】
1、创建进程同步事件对象和线程
创建的子线程是病毒核心功能,在线程退出时释放事件对象。
2、创建91C7DF6D.cfg文件并且写入数据
构造“C:\WINDOWS\system32\91C7DF6D.cfg”字符串,然后创建91C7DF6D.cfg文件,申请堆内存空间,读取母体文件内容写入生成的配置文件中,在源文件offset=9fc4处读出92B大小的数据,定位到最末两字节0D 0A相减指针得到数据大小,去掉0D 0A得到数据如下:
2DB2C93C09AD60F3BC9A2C35EDF1D148220000002200000072F18A7B04B578B3FCDA357BEAB38D0A2BAB9D6453B534ADEA82796BB1A3C81E69F572F18A7B04B578B3FCDA357BEAB38D0A2BAB9D6453B534ADEA82796BB1A3C81E69F5
3、创建91C7DF6D.dll文件并且写入数据
构造“C:\WINDOWS\system32\91C7DF6D.dll”字符串,申请堆内存并把母体文件读入其中,创建91C7DF6D.dll文件并且首先写入offset=67c0处3800大小的数据,接着写入offset=9fc4处90大小的数据,计算如下:
FileEnd = (DWORD)((char )FileStart + NumberOfBytesRead);
size1 = (DWORD)((char )FileStart + NumberOfBytesRead - 4);
size2 = (DWORD)((char )FileStart + NumberOfBytesRead - 8);
CreateNewFile(lpFileNameOfDll, (FileEnd - (_DWORD )size1 - 4), (_DWORD )size1 - (_DWORD )size2 - 8);//第一部分内容
CreateNewFile(lpFileNameOfDll, (FileEnd - (_DWORD )size2 - 8), (_DWORD *)size2 + 4);//第二部分内容
如下图:
4、加载91C7DF6D.dll并且调用s200函数
调用LoadLibrary函数获得dll文件句柄,然后调用GetProcAddress函数获得s200函数地址,最后调用此函数。如下图:
5、查找指定注册表键值并且结束指定进程
检索HKLM\Software\microsoft\windows\currentversion\Explorer\ShellExecuteHooks\键下
Value name={91C7DF6D-AEF5-4136-9252-AF030D7A5931}的键是否存在,如不存在,下面创建键值。如下图:
通过CreateToolhelp32Snapshot,Process32First和Process32Next查找哈希值为:AF9C01 04867ED2841389167E775B8332的进程,找到终止它,如下图。哈希值的计算通过 CryptAcquireContextA,CryptCreateHash,CryptHashData和CryptGetHashParam等系列函数计算得到。
6、删除文件和创建注册表键值
删除文件C:\WINDOWS\system32\VErCLSiD.exe,防止自创建CLSID时verclsid.exe认证。创建键值:
1)
HKCR\CLsID{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32
Valve Name=””
Valve data= “C:\WINDOWS\system32\91C7DF6D.dll”
Valve Name=”ThreadingModel”
Valve data=”Apartment”
2)
HKLM\Software\microsoft\windows\currentversion\Explorer\ShellExecuteHooks\SOFTWARE
Valve Name=”{91C7DF6D-AEF5-4136-9252-AF030D7A5931}”
Valve data=“”。
设置访问权限为“SeBackupPrivilege”,创建前缀为live_开头的临时文件,调用RegSavaKeyA保存Software\microsoft\windows\currentversion\Explorer\信息。然后设置访问权限为“SeRestorePrivilege”,调用RegRestoreKeyA从临时文件中恢复注册表信息。调用RegFlushKey将修改的注册表信息实际写入磁盘,删除临时文件。重复一次相同操作,确定修改注册表成功。如下图:
7、线程监视注册表
调用QueryRegKey查看HKLM\Software\microsoft\windows\currentversion\Explorer\
ShellExecuteHooks Value name={91C7DF6D-AEF5-4136-9252-AF030D7A5931}是否已存在,如不存在再次调用LoadLibraryA加载91C7DF6D.dll,运行S200函数。
生成计数器count=0,当count大于等于3退出线程;调用GetTickCount查看系统历经时间,如果小于30分钟,继续返回第6步,直到count等于3,每次Sleep 3秒钟。为了确保dll加载运行。如下图:
8、退出线程和自删除
调用ExitThread(0)退出子线程;构造“C:\WINDOWS\system32\cmd.exe /c del [程序短路径] >>NULL”字符串 ,使用ShellExecuteA函数删除母体。其中命令如下:"C:\WINDOWS\system32\cmd.exe /c del C:\DOCUME~1\ADMINI~1\Desktop\s1.exe >> NUL"。如下图:
【91C7DF6D.dll分析】
1、结束特定MD5的程序路径(杀软进程)
调用 GetModuleFileNameA函数获得宿主进程路径,然后把得到的路径字母转换成小写,去掉路径盘符后计算MD5,跟下列MD5进行比较:
5AC71A9F43720CA7377C7EC543FBFFFA
04D1C083134C2EBECA57A9724B0855D4 (360tray.exe)
AE33A1F2459A12A09EC75D71D14B5E89
3ABD7CD8928FE1F3EB563F43B913CA4B
B9E9786EAC82378D3A6E05FCC1E15D2C (smartup.exe)
D7DB952BB0FA044F2B9A22FEADB37973
1C085B8E02B137AA4EAFBE38CCF3D199
找到就调用GetCurrentProcessId、OpenProcess和TerminateProcess函数结束掉这个进程。如下图:
2、判断是否是指定进程MD5
计算宿主进程路径MD5,与CDEO98CEF5FDE1E2EAC52C0F93362B79比较,如果是调用s200函数。
3、s200函数分析
1)提权并创建两个线程
程序提权为SeDebugPrivilege,创建线程1和线程2,线程1注册为无限循环线程如下:
2)线程1 删除杀软托盘图标和进程注入
通过CreateToolhelp32Snapshot创建快照,寻找进程名MD5为上面列举值的进程。然后把访问权限设为SeDebug特权,通过一套函数FindWindowA,FindWindowExA,GetWindowThreadProcessId和SendMessage等来删除托盘。
通过GetProcAddress,WriteProcessMemory,CreateRemoteThread等系列函数,把DLL注入到进程MD5是AF9C0104867ED2841389167E775B8332(应该是游戏)。如下图:
3)线程2创建全局钩子和监视注册表与文件
调用SetWindowSHookExA设下WH_CBT类型全局钩子,如下图,目的是把自身(91C7DF6D.dll)注入所有进程中去,得以寄生,不易被终止。
然后查找%systemroot%\system32\VErCLSiD.exe存在的话就删除它。用RegCreateKeyEx检测是否存在HKEY_LOCAL_MACHINE\Software\microsoft\windows\currentversion\
Explorer\shellexecutehoos{91C7DF6D-AEF5-4136-9252-AF030D7A5931}键值。如果不存在,接着创建如下键值(exe主程序一样的做法):
a)
HKCR\CLsID{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32
Valve Name=””
Valve data= “C:\WINDOWS\system32\91C7DF6D.dll”
Valve Name=”ThreadingModel”
Valve data=”Apartment”
b)
HKLM\Software\microsoft\windows\currentversion\Explorer\ShellExecuteHooks\SOFTWARE
Valve Name=”{91C7DF6D-AEF5-4136-9252-AF030D7A5931}”
Valve data=“”。
4.查找游戏进程,记录信息然后发送帐号与密码信息。
查看寄主MD5值是否为:AF9C0104867ED2841389167E775B8332(应该为游戏进程名MD5值),如是就结束该游戏进程。然后通过过程、键盘和鼠标钩子监视输入的游戏帐号与密码。
然后读取%systemroot%\system32\91C7DF6D.cfg的数据如下:
2DB2C93C09AD60F3BC9A2C35EDF1D148220000002200000072F18A7B04B578B3FCDA357BEAB38D0A2BAB9D6453B534ADEA82796BB1A3C81E69F572F18A7B04B578B3FCDA357BEAB38D0A2BAB9D6453B534ADEA82796BB1A3C81E69F5
分成两段:Key()=2DB2C93C09AD60F3BC9A 共10个字节
C()=72F18A7B04B578B3FCDA357BEAB38D0A2BAB9D6453B534ADEA82796BB1A3C81E69F5
解密过程:
1) 设i=1;
2) C(i)=Key( i%10 ) Xor C(i)
C(i)= C(i) Xor 37h
3) i++继续第2步,再到C()解密结束
最后得到明文:P()=http://www.y0uku1.com/cia/bike.asp
通过调用InternetOpen等API以
Re=&s=&A=&P=&MB=&wwwww=v&H=&PIN=&R=&RG=-1&M=-1&M1=-1&mac=&RG1=-1&Z=:格式发送记录到的信息。如下两图。
四、手动查杀方法
在安全模式下或PE环境里,删除%system32%\system32\91C7DF6D.dll和91C7DF6D.cfg
删除键值:
hKey = HKEY_LOCAL_MACHINE
Subkey =“Software\microsoft\windows\currentversion\Explorer\shellexecutehooks”
Value name=”{91C7DF6D-AEF5-4136-9252-AF030D7A5931}”
hKey = HKEY_CLASSES_ROOT
Subkey = "CLsID{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32"
Value date=”91C7DF6D.dll”
hKey = HKEY_CLASSES_ROOT
Subkey = "CLsID{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32"
Value name=”ThreadingModel”
Value date=”Apartment”