一例Phorpiex僵尸网络样本分析

本文主要分析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,执行下面的逻辑

  1. 删除文件[selfFileName]:Zone.Identifier

  2. 将目录M-5050452834348584929485695758050和文件winmgr.exe的属性修改为SYSTEM|HIDE|READONLY

  3. 设置防火墙策略,添加表项

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

  1. 设置开机启动项,添加下面的表项,启动项名为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"

  1. 使用CreateProcess启动病毒本体,退出

二、若当前程序为winmgr.exe,创建两个线程

  1. 线程 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 隐藏

  1. 线程 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上查到

参考资料

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值