来源:作者 y2y 的投稿! 转载需要注明来源!
一、样本信息
样本名称:ccef45ed15f7357338e07754131e7b13621f141f
样本大小:1.86 MiB
MD5:59cb1ca2cced8e517fccf13249c02400
CRC32: 9EEED68C
SHA-1:CCEF45ED15F7357338E07754131E7B13621F141F
二、病毒分析环境
环境:VMWare、Windows 10 (x64)
工具:Detect It Easy、OD、IDA、Resource Hack、火绒剑、Hxd、Resource Explorer
三、病毒分析
基础静态分析:
将病毒文件重命名为demo.exe,拖入DIE中查壳,发现未加壳,采用vs2008编译的win32程序。
对区段进行计算熵值,发现存在区段熵值6.6、7.8怀疑内存存在解密等情况。
将样本拖入IDA进行分析,WinMain函数存在可以可疑sub_403FEA函数调用。
对sub_403FEA进行静态分析,发现sub_40A4BC函数存在延迟执行,内存自解密等操作。
获取PEB、Nt头对sub_40C2E0函数所在内存区域进行内存自解密。
动静态分析
由于存在内存自解密过程,采用X32dbg进行动态分析。
获取Dos头、NT头
动态获取API:VirtualProtect,修改内存.text区段为可读可写可执行属性、对函数体进行内存自解密
修改回内存属性为可读可执行
对比发现sub_40C2E0硬编码已发生改变
将解密之后的demo.exe进行内存dump,修复IAT生成demo.dump.exe,拖入ida静态分析
发现sub_40C2E0为病毒主要逻辑
样本执行逻辑所有api采用动态fs调用,通过API哈希的方式获取API,来绕过静态查杀以及拖慢静态分析过程。
由于所有api采用了hash动态获取api静态无法完全分析,于是采用Unicorn+capstone+PDB的方式进行CPU模拟打印出所有API进行分析。
将所有区段进行内存dump,然后传入Unicorn进行cpu模拟配合PDB文件打印API列表以及打印调用地址。
动态加载shell32.dll,sub_40AA10来获取大部分API以及检测用户名,权限Token、文件路径、以及采用SetProcesMitigationPolicy防止edr注入dllhook等
SetProcesMitigationPolicy防止edr注入dllhook
获取权限token、系统版本、以及对比存在的杀软
杀软列表:nortonsecurity.exe SISIPSService.exe zhudongfangyu.exe HipsDaemon.exe ksafetray.exe uiSeAgnt.exe MfeAVSvc.exe QQPCTray.exe escanmon.execcsvchst.exe avastsvc.exe usysdiag.exe SophosUi.exe SISIDSService.exe RavMonD.exe bdagent.exe kxetray.exe avgtray.exe avastui.exe 360Tray.exe McUICnt.exe RsTray.exe 360sd.exe avgui.exe avpui.exe n360.exe egui.exe Aekrn.exe avp.exe nav.exe nis.exe nst.exe ns.exe
将获取到的本机数据情况存入this结构体中之后返回给v8结构体
之后判断是否是管理员权限
如果不是管理员权限怎采用com提权+rpc调用的方式重新启动demo.dump.exe
采用CLSID{D2E7041B-2927-42fb-8E9F-7CE93B6DC937} {3E5FC7F9-9A51-4367-9063-A120244FBEC7}绕过 UAC ,之后通过 ObjectStublessClient10函数 rpc调用提权重新打开demo.dump.exe,rpc远程调用采用svchost.exe再打开dllhost.exe最终打开demo.dump.exe
dllhost打开demo.exe
由于是用dllhost重新打开的demo.exe,将采用非windbg断点createproces停止 demo.exe,再将x32dbg附加到提权后的demo.exe
之后对比杀软,在C:ProgramDataMicrosoftWindows路径创建Setting文件夹
创建Setting文件夹
之后调用CryptProtectData函数解密数据,并写入temp目录并拷贝到C:ProgramDataMicrosoftWindowsSettingtheme.dat
拷贝dat文件
再次调用sub_40B700拷贝Wshom.dll
之后操作注册表项HKEY_LOCAL_MACHINESystemCurrentControlSetServicesAppMgmt与HKEY_LOCAL_MACHINESOFTWAREWOW6432NodeMicrosoftRSST注册Wshom.dll
实现持久化以及启动Wshom.dll
操作HKEY_LOCAL_MACHINESystemCurrentControlSetServicesAppMgmt
操作HKEY_LOCAL_MACHINESOFTWAREWOW6432NodeMicrosoftRSST
添加wshom.dll
之后采用NdrClientCall2函数使用RPC本地调用启动svchost.exe加载dll然后注入shellcode到WmiPrvSE.exe
之后外壳程序调用sub_40AC60函数复制”C:\Program Files\Internet Explorer\” 文件夹的文件到Setting文件夹|
之后调用sub_411660函启动cmd命令”/c ping 0.0.0.0 & del “C:\Users\Admin\Desktop\demo.exe”>>NUL”并延迟删除自身
获取cmd路径以及设置环境变量
执行cmd命令
分析WmiPrvSE.exedump出shellcode
在内存中发现可读可执行区域以及MZ字段并dump出一个完整的PE
dump出的shellcode是一个PE文件并存在导出表函数
拖入IDA分析发现是个修复PE、修复IAT,重定位表的过程
对线程进行调试
发现注入的是银狐的shellcode
将dump的shellcode取名为demo.dll配合x32dbg进行调试,修改命令行为”C:WindowsSysWOW64rundll32.exe”C:UsersAdminDesktopdemo.dll ?GetDevicesString@@YGKXZ
修改线程至sub_6DD22BA0
发现创建C:\Users\Public\AppData\Local\Microsoft\ODBC\Plugin\文件夹推测是采用下发dll的功能实现的c2功能
四、病毒分析总结
一阶段:loder释放病毒载体
执⾏恶意样本之后,⾸先获取本机信息以及权限,之后通过CMSTP进⾏UAC提权:通过com接口{D2E7041B-2927-42fb-8E9F-7CE93B6DC937}、{3E5FC7F9-9A51-4367-9063-A120244FBEC7}进行提权以及rpc本地调用通过scvhost->dllhost.exe->demo.exe提权重新运行。
之后会在”C:ProgramDataMicrosoftWindowsSetting”⽬录释放IE的⽩⽂件,这是后续利⽤的主要⽂件载体。
二阶段:通过修改注册表实现持久化以及RPC远程调用
该样本初始进程通过RPC启动svchost进程并修改服务注册表进⾏持久化。
三阶段:加载shellcode&⾃删除
svchost被⽤来作为载体,将恶意shellcode注⼊到 WmiPrvSE.exe 进程中。这样做可以让恶意代码隐藏在正常系统进程中运⾏,从⽽逃避检测。通过这种⽅式,恶意软件能够与受感染主机上的其他恶意进程分离,使其更难被发现和追踪。
初始恶意进程通过cmd命令发送Ping请求并利⽤其延时特性来实现⾃我删除
五、概述
此银狐样本,⾸先通过CMSTP进⾏提权,释放⼆阶段的IE⽩⽂件以及构造的dll⽂件,随 后通过⽹络rpc运⾏⽩程序svchost调⽤构造的Wshom.dll进⾏维权,最后注⼊ wmiprvse进程并内存加载恶意⽂件,完成整个恶意样本的落地执⾏
六、手工杀毒及建议
1. 删除注册表项中的所有表项HKEY_LOCAL_MACHINESystemCurrentControlSetServicesAppMgmt与HKEY_LOCAL_MACHINESOFTWAREWOW6432NodeMicrosoftRSST
2.删除setting文件夹所有文件
3.重启系统去除内存shellcode
七、相关IOC
CCEF45ED15F7357338E07754131E7B13621F141F 64B773C775D1BC6AE742180BDE69E0D70CFA2F10
原文始发于微信公众号(冲鸭安全):2024年国内最新黑产样本分析