背景
<font style="color:rgb(0, 0, 0);">该样本为</font>前一段时间在52破解论坛的病毒求助区找到的恶意样本,通过沙箱+手动调试分析学习该银狐样本的免杀技术和恶意代码。
原帖:https://www.52pojie.cn/thread-2063616-1-1.html
样本概述
木马样本通过反射加载Shellcode外联C2服务器。
分析
1、加解密部分
入口点
该样本无导入表和敏感字符串,经过分析样本调用sub_D802F5函数解析需要的WinAPI。该函数内部调用sub_D80488函数和sub_D80271函数。
静态分析sub_D80488函数a1参数用于存放a2数组异或0x6A解密的数据,a2参数存放需要解密数据的内存地址。
静态分析sub_D80271函数,参数a1为载入的Kernel32.dll的基地址,参数a2为需要解析的函数的函数名字符串。
解析结果如下:
样本调用sub_D804B8函数来处理模块路径。解密字符串"Kernel32.dll"和"GetModuleFileNameA",通过函数sub_D80271解析"GetModuleFileNameA"真实地址,调用GetMoudleFileNameA返回当前模块路径并对路径进行处理。
sub_D80660函数是反射加载并执行shellcode的部分,使用VirtualAlloc分配内存用于存放加密Shellcode,使用异或解密Shellcode,调用VirtualProtect修改内存的权限,内存执行解密的Shellcode。
2、创建计划任务持久化部分
sub_D80693函数用于创建计划任务持久化攻击,调用CreateProcess创建进程执行"schtasks /run /tn WinSafe",创建"WinSafe"计划任务,实际上计划任务没有被成功创建。
通过执行计划任务查询命令和手动创建"WinSafe"计划任务,找寻创建失败原因(Win10没有"WinSafe"模块)。
schtasks /query
schtasks /run /tn WinSafe #尝试自己进行创建
3、shellcode部分
dump对应shellcode,dump的shellcode可以复制前六个字节的16进制数据去查询,一般被研究过的样本家族的shellcode会有记录可以结合前人的分析报告进行快速分析。
dump的shellcode可以使用Winhex等工具查看程序的数据(也可以使用strings/010 editor等工具进行查看),这里使用Winhex查看样本发现存在明显的IP地址和域名(初步判断为外联的C2服务器IP地址和域名)。
156.234.119.138
syumineyt.top
Shellcode通过遍历模块加载的FullName是否为Kernel32.dll来确定Kernel32.dll基地址,代码通过将获取的模块名称Ascii码进行相加最后和Kernel32.dll的模块名的Ascii码和进行比较来判断当前模块。
样本对调用的WinAPI进行了混淆,调用sub_747函数根据APIHash来获取对应API函数的真实地址,以便躲避杀软的敏感函数查杀。以下是样本需要调用的WinAPI以及APIHash和WinAPI的对应关系。
1AB9B854h->GetProcessAddress
7F201F78h->LoadLibrary
5E893462h->VirtualAlloc
6488073h->VirtualFree
0DB579CBh->RtlZeroMemory
1518E9C0h->RtlMoveMemory
33522634h->WSAStartup
26402D9Fh->socket
41539501h->getaddrinfo
785E7DD7h->FreeAddrInfoW
313A84C8h->htons
92B50DAh->connect
0F8387DCh->send
0F6134B2h->recv
14AC161Bh->closesocket
4FF42CCFh->WSACleanup
调试过程中获取反转的字符串,使用python脚本进行反转发现疑似配置信息。
eax=00BE086B L"|0:cf|1:hb|0:pj|8 .7 .5202:zb|0.1:bb|认默:zf|1:lc|1:dd|1:3t|0808:3o|pot.tyegnimuys:3p|1:2t|08:2o|pot.tyenimuys:2p|1:1t|344:1o|831.911.432.651:1p|" 将反转的参数地址引入。
def reverse_string(string):
print(string[::-1])
if __name__=="__main__":
string="|0:cf|1:hb|0:pj|8 .7 .5202:zb|0.1:bb|认默:zf|1:lc|1:dd|1:3t|0808:3o|pot.tyegnimuys:3p|1:2t|08:2o|pot.tyenimuys:2p|1:1t|344:1o|831.911.432.651:1p|"
reverse_string(string)
#|p1:156.234.119.138|o1:443|t1:1|p2:syumineyt.top|o2:80|t2:1|p3:syumingeyt.top|o3:8080|t3:1|dd:1|cl:1|fz:默认|bb:1.0|bz:2025. 7. 8|jp:0|bh:1|fc:0|
shellcode在解析WinAPI后,调用WSAStartup函数初始化,socket创建套接字等网络通信相关函数对网络通信进行初始化操作,调用send函数和recv函数与"156.234.119.138"和"symineyt.top"进行通信,攻击者可以通过该木马下发恶意样本到受害者的主机,对受害者的信息进行窃取。
"156.234.119.138"通信部分
"symineyt.top"通信部分
4、Guard.dll部分
DLL存在MonitorAndRestart导出函数用于监控WindowsEvent.exe的运行情况在进程没有启动时尝试通过计划任务进行启动。
调用CreateMutexW创建互斥体"Global\ProcessMonitorDLL_Mutex"反调试。
sub_67492040函数拼接计划任务"schtasks /run /tn \WindowsEvent_Task\",调用CreateProcessW执行计划任务来启动WindowsEvent.exe。启动失败则保存日志log文件,并且对设备进行重启。
日志内容
重启函数(OpenProcessToken LookupPrivilegeValueW AdjustTokenPrivileges提升进程权限)
IOC
156.234.119.138
syumineyt.top
SHA1:242ac36b101de2231afbba8226b68ccbbeca22a6
SHA1:c561fdfbdf8714f7da36de34dba4d440de17ab6a