本文主要分析Phorpiex僵尸网络的一个变种,该样本通常NSIS打包,能够检测虚拟机和沙箱。病毒本体伪装为一个文件夹,通过U盘来传播,会隐藏系统中各盘符根目录下的文件夹,创建同名的lnk文件,诱导用户点击。
病毒母体的基本信息
Verified: Unsigned
Link date: 18:01 2007/3/3
Description: VirtualDub
Product: VirtualDub
Prod version: 1.7.1.8
File version: 1.7.1.8
MachineType: 32-bit
MD5: F685FB7685858965E678BF9D2613139B
SHA1: B68D82B400C324EED667E9B8FEE73DB6590E89CB
感染后的症状
系统各盘根目录下的文件夹被隐藏(C盘也不例外),有同名的快捷方式,存在Documents.exe、Movies.exe、Pictures.exe、Porn.exe、Private.exe、Secret.exe,且大小和时间相同
分析过程
IDA打开,通过样本的字符串可以判定这个样本是通过NSIS打包的,NSIS(Nullsoft Scriptable Install System)是一个专门用于创建软件安装程序的框架。
使用7zip对样本进行解压,里面有5个文件,文件的时间为2015年,mp3、aac、jpeg格式都损坏的
│ 05 - Exchange.mp3
│ g3OdSbf__bigger.jpeg
│ nbkajklzajajaweajgka.aac
│ wh_home_engage_hub.jpg
└─$PLUGINSDIR
hoggeries.dll
$PLUGINSDIR目录下有一个dll,名为hoggeries.dll,这可能是作者自定义的插件
使用IDA打开后,查看它的导出函数,里面有一个名为Goliardery的函数比较可疑,Tootle函数为和DllMain函数无实质内容,DllEntryPoint入口并无可疑之处
这个Goliardery使用IDA完全看不懂,应该加了混沌,下面使用OD调一下这个dll
动态调试
使用OD打开病毒母体
要在加载hoggeries.dll时断下,要改调试设置
点击OD选项->调试设置->事件
,勾选中断于新模块
一直F9,直到加载到hoggeries.dll
在OD选项->调试设置->事件
中,去掉勾选中断于新模块
右键动态库,点击跟随入口,在hoggeries.dll入口下方设置断点
F9断下在DllEntryPoint函数中,Ctrl+F9执行到ret,F8返回上一层,再Ctrl+F9,F8直到返回用户空间(用户空间的地址是0x0040开头的)
单步到 call Goliardery 处, F7进入
在CreateFileA、CreateFileW、ReadFile、WriteFile处下断点,F9,程序断在CreateFileW处,读取一个mp3文件 C:\Users\ADMINI~1\AppData\Local\Temp\05 - Exchange.mp3
又读取了nbkajklzajajaweajgka.aac
mp3内容的缓冲区地址为0x2FD8A8,大小0xD6C9
读取完成后,推测会执行解密操作,在0x2FD8A8处设置内存写入断点,这段区域有一处大的循环(是解密操作),在循环出口处设置断点,F9执行到这里,已经解密出一个完整的pe(成功了一大半)
使用pchunter将这个PE dump出来,深入分析这个PE
分析内存中解密的PE
这个PE的基本信息如下
Verified: Unsigned
Link date: 7:09 2015/7/9
MachineType: 32-bit
MD5: DB2E3F0E50DC37FE6824C4E2352E40D4
SHA1: A8B23428CB0CC1BD0FF33E8BAFFFC2AA7BA81FBE
pdb path,C:\Users\x\Desktop\Home\Code\Trik v1.9\Release\Trik.pdb
使用IDA打开
首先判断当前的执行环境,如果是在虚拟机或沙箱中,退出
- 如果系统中存在模块SbieDll.dll,证明沙盒在运行
- DetectVM_401000这个函数主要是检测虚拟机,使用CreateFileA打开第一个磁盘的设备对象,通过DeviceIoControl来查询磁盘信息(控制码为0x2D1400u),若硬盘的厂家中含有关键字qemu、virtual、vmware的话,说明当前环境是大概率是虚拟机,退出
CreateFileA("\\\\.\\PhysicalDrive0", 0, 3u, 0, 3u, 0, 0)
DeviceIoControl(hDevice, 0x2D1400u, InBuffer, 0xCu, &OutBuffer, 0x80u, &BytesReturned, 0)
创建名为t6的互斥量,防双开
在这三个系统目录之一(%windir、%%userprofile%、%temp%
)中,创建目录5050452834348584929485695758050,将自身拷贝到这个目录下,命名为winmgr.exe
%windir%\M-5050452834348584929485695758050\winmgr.exe
%userprofile%\M-5050452834348584929485695758050\winmgr.exe
%temp%\M-5050452834348584929485695758050\winmgr.exe
一、若当前程序名不是winmgr.exe,执行下面的逻辑
-
删除文件
[selfFileName]:Zone.Identifier
-
将目录M-5050452834348584929485695758050和文件winmgr.exe的属性修改为
SYSTEM|HIDE|READONLY
-
设置防火墙策略,添加表项
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List
valuename:C:\Windows\M-5050452834348584929485695758050\winmgr.exe
value:C:\Windows\M-5050452834348584929485695758050\winmgr.exe:*:Enabled:Microsoft Windows Manager
- 设置开机启动项,添加下面的表项,启动项名为
Microsoft Windows Manager
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\
valuename:Microsoft Windows Manager
value:"C:\Windows\M-5050452834348584929485695758050\winmgr.exe"
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\
valuename:Microsoft Windows Manager
value:"C:\Windows\M-5050452834348584929485695758050\winmgr.exe"
- 使用CreateProcess启动病毒本体,退出
二、若当前程序为winmgr.exe,创建两个线程
- 线程 Thead_403890
遍历系统中所有盘符
把自身拷贝为X:\505050.exe并隐藏,遍历根目录,隐藏所有目录,创建同名为lnk文件,打开lnk文件执行病毒副本
在各盘根目录创建下面这些文件,exe全为病毒副本,autorun.inf的作用是启动windrv.exe,windrv.exe被隐藏了
Private.exe
Movies.exe
Pictures.exe
Secret.exe
Porn.exe
Documents.exe
Music.exe
autorun.inf 隐藏 autorrun启动windrv.exe
windrv.exe 隐藏
- 线程 Thead_402D30
会尝试连接下面这些域名,向CC发送主机信息,接收后台的命令并执行
trkhaus.ru:5050
srv1000.ru:5050
srv1100.ru:5050
srv1200.ru:5050
srv1300.ru:5050
srv1400.ru:5050
主要行为有
会检测%appdata%\winmgr.txt是否存在
会自毁 清启动项
会下载文件保存为%temp%\[10个随机字符].exe执行
使用服务api.wipmania.com确定受感染计算机的位置
其它行为没分析清楚
IOC
网络
trkhaus.ru:5050
srv1000.ru:5050
srv1100.ru:5050
srv1200.ru:5050
srv1300.ru:5050
srv1400.ru:5050
api.wipmania.com
文件
打包的文件
hoggeries.dll 加载器
05 - Exchange.mp3
g3OdSbf__bigger.jpeg
nbkajklzajajaweajgka.aac
wh_home_engage_hub.jpg
病毒母体
%windir%\M-5050452834348584929485695758050\winmgr.exe
%userprofile%\M-5050452834348584929485695758050\winmgr.exe
%temp%\M-5050452834348584929485695758050\winmgr.exe
X:\505050.exe
X:\Private.exe
X:\Movies.exe
X:\Pictures.exe
X:\Secret.exe
X:\Porn.exe
X:\Documents.exe
X:\Music.exe
X:\autorun.inf autorrun启动windrv.exe
X:\windrv.exe
%appdata%\winmgr.txt
%temp%\[10个随机字符].exe
HASH
f685fb7685858965e678bf9d2613139b 母体
hoggeries.dll 27cc35d2bcc5788f73cb450d218b0c51
05 - Exchange.mp3 36bb8c984c8030e3713191f2f97df3d2
g3OdSbf__bigger.jpeg 538beab4da03162ce3159a9333e94b13
nbkajklzajajaweajgka.aac af955d372d2486da62bb86ede55894e0
wh_home_engage_hub.jpg 935039f3a7dff570091d3263c3ac8e18
内存解密加载的PE DB2E3F0E50DC37FE6824C4E2352E40D4
互斥量
t6
pdb
C:\Users\x\Desktop\Home\Code\Trik v1.9\Release\Trik.pdb
注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List
valuename:C:\Windows\M-5050452834348584929485695758050\winmgr.exe
value:C:\Windows\M-5050452834348584929485695758050\winmgr.exe:*:Enabled:Microsoft Windows Manager
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\
valuename:Microsoft Windows Manager
value:"C:\Windows\M-5050452834348584929485695758050\winmgr.exe"
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\
valuename:Microsoft Windows Manager
value:"C:\Windows\M-5050452834348584929485695758050\winmgr.exe"
专杀工具
根据病毒的分析结果,写了一个bat版的专杀工具
@ECHO off
taskkill /f /t /fi "imagename eq winmgr.exe"
attrib -h -s /D /S %windir%\M-5050452834348584929485695758050
del /F /Q %windir%\M-5050452834348584929485695758050
rmdir /S /Q %windir%\M-5050452834348584929485695758050
attrib -h -s /D /S %userprofile%\M-5050452834348584929485695758050
del /F /Q %userprofile%\M-5050452834348584929485695758050
rmdir /S /Q %userprofile%\M-5050452834348584929485695758050
attrib -h -s /D /S %temp%\M-5050452834348584929485695758050
del /F /Q %temp%\M-5050452834348584929485695758050
rmdir /S /Q %temp%\M-5050452834348584929485695758050
reg delete HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /v "Microsoft Windows Manager" /f
reg delete HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run /v "Microsoft Windows Manager" /f
reg delete HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List /v "C:\Windows\M-5050452834348584929485695758050\winmgr.exe" /f
reg delete HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List /v "C:\Windows\M-5050452834348584929485695758050\winmgr.exe" /f
FOR %%c in (Z,Y,X,W,V,U,T,S,R,Q,P,O,N,M,L,K,J,I,H,G,F,E,D,C) do (
IF exist %%c: (
attrib %%c:\* -h -s
attrib %%c:\* -h -s /s /d
del /Q /F %%c:\*.lnk
del /Q /F %%c:\windrv.exe
del /Q /F %%c:\505040.exe
del /Q /F %%c:\autorun.inf
del /Q /F %%c:\Documents.exe
del /Q /F %%c:\Movies.exe
del /Q /F %%c:\Music.exe
del /Q /F %%c:\Pictures.exe
del /Q /F %%c:\Porn.exe
del /Q /F %%c:\Private.exe
del /Q /F %%c:\Secret.exe
rd /s /q %%c:\$Recycle.Bin
)
)
IDA如何分析COM接口
windows上使用COM接口可以调用系统或第三方的模块要实现特定的功能,如操作office文档或创建快捷方式等
本例中,该样本使用COM接口来创建恶意的lnk文件
COM接口的使用一般需要下面的API
CLSIDFromProgID //从程序名获取CLSID
CoInitialize(NULL)// 初始化COM接口
HRESULT _stdcall CoCreateInstance(REFCLSID rclsid, //待创建组件的CLSID 一个GUID
LPUNKNOWN pUnkOuter,//用于聚合组件
DWORD dwClsContext,//限定所创建的组件的执行上下文
REFIID riid,//iid为组件上待使用的接口的iid,一个GUID
LPVOID * ppv); //接口指针,是一个类,有好多方法
CoUninitialize 清理
IDA要分析CoCreateInstance的参数,要行根据rclsid和riid确定ppv的类型,然后要给ppv指定正确的类型,才能显示出其方法名,进而分析其功能
rclsid和riid是GUID格式,首先要把二进制转成字符串格式
可借助IDC脚本
#include <idc.idc>
static MakeGuid(ea)
{
auto string = sprintf("{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}\n", Dword(ea), Word(ea+4), Word(ea+6), Byte(ea+8), Byte(ea+9),Byte(ea+10), Byte(ea+11), Byte(ea+12), Byte(ea+13), Byte(ea+14), Byte(ea+15));
msg(string);
return 0;
}
将上面的IDC保存为文件, 在File->Script File
中执行
在IDA下面的命令窗口切换到IDC,调用MakeGuid函数打印出rclsid和riid的GUID格式
根据riid在注册表中搜索相关的模块
[HKEY_CLASSES_ROOT\Wow6432Node\Interface\{000214EE-0000-0000-C000-000000000046}]
@="IShellLinkA"
给ppv变量设置类型为IShellLinkA*
,其方法被识别出来了
IShellLinkA是一个类,其属性和方法可以在MSDN上查到
参考资料
-
分析NSIS打包的恶意软件思路和实例
-
Phorpiex僵尸网络技术分析(一) - FreeBuf网络安全行业门户
-
Phorpiex僵尸网络技术分析(二) - FreeBuf网络安全行业门户
-
STORAGE_DEVICE_DESCRIPTOR 方式获取硬盘序列号
-
Threat Roundup for August 2 to August 9 (talosintelligence.com)
-
NSIS 从入门到编写完整打包脚本——持续更新 - 掘金 (juejin.cn)
-
How to find CLSID from CoCreateInstance in IDA?
-
COM开发指南(1)—COM技术概述
-
使用IShellLink 创建快捷方式
-
逆向分析使用COM组件对象模型的代码
-
Ollydbg调试多线程程序
-
镇守最后一道防线:三种逃逸沙盒技术分析