银狐病毒
概述
msi在安装过程中执行恶意脚本,在C盘释放载荷ee.exe,ee.exe解密执行shellcode,shellcode通过多种手段执行反调试操作,添加Windows Defender的排除路径,解密字符串获取url后建立连接下载文件并解密,获得多个url,继续下载文件释放到指定路径下,文件包括具有数据签名的白文件,恶意dll,ffff.pol,ffff,lop。Shellcode加载白文件,白文件运行过程中加载恶意dll,恶意dll加载ffff.pol到内存中,ffff.pol是缺少MZ头的pe文件,添加后跳转到入口点执行,ffff.pol解密ffff.lop文件得到dll文件和ip地址等,执行ffff.lop文件的导出函数Edge与c2建立通信获取指令执行窃密、提权、设置自启动等操作。
根据域名,释放文件路径,远控模块判断是银狐病毒。
MSI文件
Msi文件中被注入恶意脚本,在安装过程中将三个文件的内容合并成一个二进制文件C:\ee.exe并执行。
ee.exe
ee.exe入口点被修改为跳转指令,text段存在shellcode。将shellcode复制到申请到的内存空间后跳转执行。
shellcode
通过xor解密shellcode,解密后数据如下图所示。
利用LoadLibraryA和GetProcAddress动态获取其他函数。
调用CreateToolhelp32Snapshot(),Process32First()和Process32Next()函数遍历进程,判断是否存在MsiExec.exe进程。
调用GetCurrentProcessId()函数获取当前进程ee.exe的pid,遍历进程,通过进程id判断是否是当前进程,是当前进程则获取当前进程的父进程pid。
遍历进程获取ee.exe父进程的父进程pid。
再次遍历进程获取ee.exe父进程的进程名。再次遍历进程获取ee.exe父进程的的父进程进程名如果是explore.exe结束进程。
获取计算机名称,创建互斥体。
解密出配置文件路径C:\xxxx.ini。
利用GetTickCount64函数和rdtsc反调试。
调用CreateToolhelp32Snapshot(),Process32First()和Process32Next()函数遍历进程,判断是否存在360tray.exe,360sd.exe,360safe.exe进程。如果存在结束进程。
调用CreateToolhelp32Snapshot(),Process32First()和Process32Next()函数遍历进程,判断是否存在msmpeng.exe,mpcopyaccelerator.exe,securityhealthsystray.exe进程,这些是windows defender相关进程。通过这个shellexecuteA调用,会启动 PowerShell 并执行指定的命令,完成对Windows Defender的排除路径的设置。排除的路径包括’C:\ProgramData’和’C:\Users\Public’。参数-Force表示强制执行,即使有警告或确认提示也会被忽略。
由硬编码的字符串解密出url:Hxxps://oss3333.oss-cn-shanghai.aliyuncs.com/c.dat。
调用InternetOpen,InternetOpenUrlA,InternetReadFile读取数据到申请的内存中。
从读取的内容中解密出以下url。
随机生成字符串后,从硬编码的字符串中解密出释放路径。之后与随机生成的字符串拼接,调用CreateDirectoryA函数创建目录。
生成随机字符串与上述路径拼接后与.exe拼接。之后又拼接出三个路径如下图所示,文件名由上文中https通信读取的数据解密得到。
调用InternetOpen,InternetOpenUrlA,InternetReadFile从Hxxps://oss3333.oss-cn-shanghai.aliyuncs.com/DMR_120.jpg读取数据到申请的内存中异或解密得到pe文件。
写入到下图所示文件中。
从Hxxps://oss3333.oss-cn-shanghai.aliyuncs.com/DMR_121.jpg中下载的数据解密后是dll文件,写入到释放路径下的CiscoSparkLauncher.dll文件中。
可执行程序是具有有效签名的白文件,运行时加载恶意dll。
从Hxxps://oss3333.oss-cn-shanghai.aliyuncs.com/DMR_122.jpg中下载的数据解密后是不具有mz标识的不完整pe文件,写入到释放路径下的ffff.pol文件中。
从Hxxps://oss3333.oss-cn-shanghai.aliyuncs.com/DMR_123.jpg中下载的数据解密后写入到释放路径下的ffff.lop文件中。
设置释放文件所在的路径为当前路径。
调用ShellExecuteEx执行释放的白文件。
CiscoSparkLauncher.dll
获取计算机名称,创建互斥体
解密出shellcode后执行。
利用LoadLibraryA和GetProcAddress动态获取其他函数。加载ffff.pol文件到内存中,修补mz头后跳转到入口点执行。
ffff.pol
调用OpenMutexA、CreateMutexA函数确保进程唯一运行。
创建线程,获取命令行参数作为线程函数的参数。
调用IsUserAnAdmin函数判断当前用户是否具有管理员权限。如果具有管理员权限则设置UAC不弹出任何提示框,以管理员权限自动运行程序。
创建线程不断遍历进程,判断是否存在360tray.exe,360safe.exe,360sd.exe进程,并且请求目标窗口关闭自身。
读取ffff.lop文件到内存中,从起始位置偏移2A0处解密出pe文件,大小5a000。
从起始位置偏移180处得到IP地址。
从起始位置偏移4dd48处得到IP地址。
从起始位置偏移190处得到端口7000。
从起始位置偏移1a0处得到uiekjxw.net。
从起始位置偏移4e1a4处得到iuearx.net。
从起始位置偏移1b0处得到端口7063。
在内存中展开修复后获取导出函数Edge地址跳转执行。
ffff.lop
删除指定文件,并把指定文件设置为HIDDEN|SYSTEM。
创建线程,枚举窗口,如果窗口标题栏上显示的文本信息是以下字符串则调用ShellExecuteA函数重新运行程序,并退出当前进程。
遍历进程如果存在rundll322.exe,rundll3222.exe,rundll32222.exe则强制终止执行。
创建线程,遍历进程如果360tray.exe不存在并且C:\xxxx.ini不存在,执行命令创建一个名为xxxx.ini的空文本文件,位于C:\目录下。
备份样本作为服务启动。
获取新的C2地址。
与C2建立连接后,获取操作系统信息,操作系统位数,cpu信息,当前登录的qq号信息,查询是否存在反病毒产品,有则返回软件名称,磁盘剩余空间等系统信息,发送上线包。
开启3389端口。
上传数据经过以下加密函数。
单独开启线程进行通信相关操作,连接建立后会在循环中监听信息。
响应函数如下图所示。
Recv接收后解密函数。
C2指令
yara
rule silverfox_msi
{
strings:
$msi_data0001 = “WshShell.Run “cmd.exe /c copy /b C:\ww.txt+C:\ProgramData\1+C:\bb.txt C:\ee.exe”,0,True”
m
s
i
d
a
t
a
0002
=
"
W
s
h
S
h
e
l
l
.
R
u
n
c
¨
m
d
.
e
x
e
/
c
c
m
d
.
e
x
e
/
c
C
:
e
e
.
e
x
e
,
¨
0
,
F
a
l
s
e
"
c
o
n
d
i
t
i
o
n
:
a
l
l
o
f
(
msi_data0002 = "WshShell.Run \"cmd.exe /c cmd.exe /c C:\\ee.exe\",0,False" condition: all of (
msidata0002="WshShell.Runc¨md.exe/ccmd.exe/cC:ee.exe,¨0,False"condition:allof(msi_data*)
}
rule silverfox_exe
{
strings:
$xor_decode ={ 49 FF CF 49 FF C7 E8 2E 8E 00 00 EB 00 F1 4C D7 35 E3 E0 08 C7 18 62 87 DB F8 47 41 30 00 44 30 24 08 44 02 24 08 E2 F6 }
condition:
$xor_decode
}
rule silverfox_xml
{
strings:
$str_mutex =“{A30BD1B1-CB43-4604-86F5-56594AEE26A3}”
$str_uac_reg = “SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System”
$str_uac = “ConsentPromptBehaviorAdmin”
$str_360_1 = “360tray.exe”
$str_360_2 =“360safe.exe”
$str_360_3 =“360sd.exe”
s
t
r
3
6
0
4
=
"
Q
360
S
a
f
e
M
o
n
C
l
a
s
s
"
c
o
n
d
i
t
i
o
n
:
a
l
l
o
f
(
str_360_4 ="Q360SafeMonClass" condition: all of (
str3604="Q360SafeMonClass"condition:allof(str_)
}
rule silverfox_rat
{
strings:
//43.139.21.74
$hex_ip ={34 33 2E 31 33 39 2E 32 31 2E 37 34 }
//uiekjxw.net
h
e
x
h
o
s
t
n
a
m
e
=
7569656
B
6
A
78772
E
6
E
6574
c
o
n
d
i
t
i
o
n
:
a
l
l
o
f
(
hex_hostname ={75 69 65 6B 6A 78 77 2E 6E 65 74 } condition: all of (
hexhostname=7569656B6A78772E6E6574condition:allof(hex_)
}
snort
IOC
ad372f749c79d0e4fbb1a4f0ce8b499e
f72eb87712e06a2d4ad2b9d605cb820d
07caac743541436f6a19ea53e5c67a44
06e16647fd5dbcc967be66240e33fc7b
77f5941e94bbc74b7cd544cf84551325
06e16647fd5dbcc967be66240e33fc7b
Hxxps://oss3333.oss-cn-shanghai.aliyuncs.com/c.dat
Hxxps://oss3333.oss-cn-shanghai.aliyuncs.com/DMR_120.jpg
Hxxps://oss3333.oss-cn-shanghai.aliyuncs.com/DMR_121.jpg
Hxxps://oss3333.oss-cn-shanghai.aliyuncs.com/DMR_122.jpg
Hxxps://oss3333.oss-cn-shanghai.aliyuncs.com/DMR_123.jpg
uiekjxw.net
43.139.21.174:7000
15.197.148.33:7063
3.33.130.190:7063