首页
社区
课程
招聘
Sality病毒分析
2023-4-3 15:53 11112

Sality病毒分析

2023-4-3 15:53
11112

Sality病毒分析

基本信息

MD5:e100c2c3f93cabf695256362e7de4443
该样本来源于此帖:https://www.52pojie.cn/thread-537381-1-1.html

分析

结合那个帖子中的信息,是FSG壳,利用ESP定律直接脱壳。

脱完壳之后的文件信息 MD5:50DAEB6C0DB643027BA169335ABA90E5

 

动调脱完壳之后的文件,该部分为解密字符串,简单加密算法为 Str1 = Str ^ 0xCD - 7

字符串:

1
2
3
4
5
6
KB952567-mouse.log   为日志文件,会被删除
XP-Update     对应C:\XP-Update
msdn   对应C:\msdn
.exe   遍历的指定文件后缀名
Open   为ShellExecuteA参数,打开文件
\Visual Studio 2005\MSDEV\IDE    为在Document目录下创建的文件夹

脱壳之后,由于IAT问题,部分API显示不完全,并不能完全有效的动调,因此需要回到脱壳前的文件去分析,但是脱完壳的文件依旧需要保留。

 

根据脱完壳的文件,定位WinMain函数为0x00401060,所以IDA打开未脱完壳的文件,定位0x00401060,在此处创建函数,然后F5
WinMain函数为解密字符串,加载自定义资源中的 FILE ,创建指定目录后移动文件并打开exe

资源段中的FILE文件实际上是一个受密码保护的 PDF 文件(MD5:59892a9875d74dd93a7718cae6af65d0)。

WinMain中的行为与实际行为不一致,010Editor 打开,在 .rsrc 段发现一个PE文件,该 PE 文件为在脱完壳之后文件末尾创建了一个新部分,包含病毒代码,实际上是病毒母体,用010Editor dump。

文件MD5:1103CB6763BB6518E8BAE56746EB2900

 

UPX2.02,依旧是ESP定律脱壳,脱完壳之后的文件 MD5:64D503FB528A9C4F0DD5B370AA5EE030

 

首先会修改注册表。修改1 2 3 4项后加载 MPR、WININET.DLL,接着修改5 6 7 8项,修改内容为:
1.将 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced 中 Hidden 键值改为 1 ,即隐藏已知文件扩展名;
2.将 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\policies\system 中 DisableTaskMgr 键值改为 1 ,即禁用任务管理器功能;
3.将 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\policies\system 中 DisableRegistryTools 键值改为 1 ,即
禁用禁用注册表编辑器功能;
4.在 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Security Center\Svc 中设置子键 _kkiuynbvnbrev406 ;

5.将 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings 中 GlobalUserOffline 键值修改为 0 ,即禁用当前用户脱机工作模式,允许联机;
6.将 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\policies\system 中 EnableLUA 键值修改为 0 ,即禁用用户账户控制 (UAC) ;
7.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\Firewa\AuthorizedApplications\List 中添加当前程序路径,即创建一个防火墙规则,允许当前可执行文件通过防火墙访问网络;
8.将 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\Firewa 中 EnableFirewall 键值改为 0 DoNotAllowExceptions 键值改为 0,DisableNotifications 键值改为 1 ,即关闭防火墙、允许指定程序进行网络连接(添加防火墙白名单)、禁用防火墙通知。

修改完注册表之后,会加载 MPR、WININET.DLL,再获取计算机名称,储存在字符串 SubKey 中, SubKey 大于 2 则进行一些运算,将结果赋给 nullsub_1,之后创建一个名为 purity_control_90833 的内存映射文件对象,便于不同进程之间通过该名称共享内存映射文件对象。

接着根据当前用户和其计算机信息生成一个由 Software\用户名\计算结果 组成注册表键,并读写一些值,如果满足特定条件,将名为 purity_control_90833 的内存映射文件中的一段数据复制到指针 a1 所指向的内存区域中,便于后续使用。

如果未获取到唯一标识符的长度,则会获取到调用 GetTickCount() 获取系统启动后的毫秒数,并将其存储在 Target 中,接着使用 GetPrivateProfileStringA() 从 SYSTEM.INI 文件中读取指定区域和键的字符串值,并将其存储到 ReturnedString 缓冲区中。

接着如果在 SYSTEM.INI 文件中没找到所需的键值,则会将 dword_4140CC 的值设为 1,并使用生成一个随机数。然后,使用 wsprintfA() 将 TickCount 和随机数格式化为一个字符串,并保存在 ReturnedString 缓冲区中。最后,使用 WritePrivateProfileStringA() 将该字符串写回到 SYSTEM.INI 文件,以便以后的调用能直接读取并使用。MCIDRV_VER 和 DEVICEMB 为 SYSTEM.INI 中的新增项。

从 SYSTEM.INI 中读取 DEVICEMB 后面的整数值,并转换为字符串,用于随机生成文件名,未读取到则生成该随机数

生成的文件路径和随机生成的名称保存到一个内存地址中,并返回这个地址。C:\Windows\system32\drivers\

修改注册表,创建内存映射文件,生成唯一标识符之后,会创建多个线程

第一个线程用于分配内存,创建虚拟内存映射并附加到当前地址空间,提升进程权限,注入特定进程。

遍历系统进程,创建名为 [System Process]Mth32ProcessID 的互斥锁,如:[registry]M168 ,之后利用 OpenProcessToken、AdjustTokenPrivileges、LookupPrivilegeValue 函数提升进程特权为 SeSecurityPrivilege ,使进程具有 RWX 权限,接着查询用户SID信息、SID所对应的用户或组名,使用 VirtualAllocEx 在目标进程中申请内存,将要执行的代码写入该内存中,使用 CreateRemoteThread 动态创建一个远程线程,并指定线程函数为该申请到的内存地址,使用 WriteProcessMemory 将需要的参数写入该内存地址,对于用户不属于 system、local service、network service 的进程,执行远程线程注入

第二个线程用于删除注册表的子键路径,动态加载 ADVAPI32.DLL 、NTDLL.DLL 中的 API ,创建一个服务后,再创建一个线程来检测安全软件服务,接着打开名为 amsint32 的设备,再创建一个新线程用于扫描并检测安全软件进程。
递归删除 HKEY_CURRENT_USER\System\CurrentControlSet\Control\SafeBoot 和 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SafeBoot 子键及其包含的所有键和值,修改或重置系统安全模式设置,如
删除 HKEY_CURRENT_USER\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\ ,会使用户无法进入安全模式。

加载驱动 C:\Windows\system32\drivers\ipfltdrv.sys 并以服务形式启动。

通过 SCM 启动安全软件服务来检测安全软件,并尝试启动失败的服务。
被检测的安全软件包括 Kaspersky、ESET、Avast、AVG、Dr.Web等的服务,具体服务详细说明如下:

  • AVP:Kaspersky 杀毒软件的主程序服务名。
  • Agnitum Client Security Service(ACSSRV):Agnitum 公司的网络安全软件防火墙应用程序服务名。
  • ALG:Windows 自带的应用层网关服务。
  • Amon monitor:ESET Smart Security 的反恶意软件监视服务。
  • aswUpdSv、aswMon2、aswRdr、aswSP、aswTdi、aswFsBlk:Avast 杀毒软件的多个服务名。
  • avast! iAVS4 Control Service:Avast 杀毒软件的更新服务。
  • avast! Antivirus、avast! Mail Scanner、avast! Web Scanner、avast! Asynchronous Virus Monitor、avast! Self Protection:另外几个 Avast 杀毒软件相关服务名。
  • AV Engine:Vexira 杀毒软件的扫描引擎服务名。
  • AVG E-mail Scanner:AVG 杀毒软件的电子邮件扫描服务名。
  • Avira AntiVir Premium Guard、Avira AntiVir Premium WebGuard、Avira AntiVir Premium MailGuard:Avira AntiVir 杀毒软件的多个服务名。
  • BGLiveSvc:BitGuard Personal Firewall 杀毒软件的后台服务名。
  • BlackICE:BlackICE 杀毒软件的网络防火墙服务名。
  • CAISafe:CA Personal Firewall 杀毒软件的安全服务名。
  • ccEvtMgr、ccProxy、ccSetMgr:Symantec Norton Internet Security 杀毒软件的多个服务名。
  • COMODO Firewall Pro Sandbox Driver、cmdGuard、cmdAgent:Comodo Firewall 杀毒软件的多个服务名。
  • Eset Service、Eset HTTP Server、Eset Personal Firewall:ESET NOD32 Antivirus/Smart Security 的服务名。
  • F-Prot Antivirus Update Monitor:F-Prot Antivirus 的更新监控服务名。
  • fsbwsys、FSDFWD、F-Secure Gatekeeper Handler Starter、FSMA:F-Secure Anti-Virus、Internet Security 的多个服务名。
  • Google Online Services:Google Desktop 杀毒软件的在线服务名。
  • InoRPC、InoRT、InoTask、ISSVC:McAfee VirusScan Enterprise 的多个服务名。
  • KPF4、KLIF:Kerio Personal Firewall 的服务名。
  • LavasoftFirewall、LIVESRV:Lavasoft Personal Firewall 的服务名。
  • McAfeeFramework、McShield、McTaskManager:McAfee VirusScan Enterprise 的多个服务名。
  • MpsSvc:Windows Defender 的安全中心服务名。
  • navapsvc:Norton AntiVirus 的主要服务名。
  • NOD32krn:ESET NOD32 Antivirus 的服务名。
  • NPFMntor、NSCService:Norton Internet Security 的服务名。
  • Outpost Firewall main module、OutpostFirewall:Outpost Firewall 的服务名。
  • PAVFIRES、PAVFNSVR、PavProt、PavPrSrv、PAVSRV:Panda Antivirus 的多个服务名。
  • PcCtlCom、PersonalFirewal、PREVSRV:CA Personal Firewall 的多个服务名。
  • ProtoPort Firewall service:Protoport Personal Firewall 的服务名。
  • PSIMSVC:Protector Plus Antivirus 的扫描服务名。
  • RapApp:Sophos Anti-Virus 的应用程序控制服务名。
  • SharedAccess:Windows 系统的共享访问服务名。
  • SmcService:Symantec Endpoint Protection 的防火墙服务名。
  • SNDSrvc:Microsoft Internet Security and Acceleration Server(ISA)的辅助服务名。
  • SPBBCSvc:Symantec Endpoint Protection 的网络防护服务名。
  • SpIDer FS Monitor for Windows NT、SpIDer Guard File System Monitor、SPIDERNT:Dr.Web Antivirus Suite 的多个服务名。
  • Symantec Core LC、Symantec Password Validation、Symantec AntiVirus Definition Watcher、SavRoam、Symantec AntiVirus:Symantec AntiVirus 的多个服务名。
  • Tmntsrv、TmPfw、UmxAgent、UmxCfg、UmxLU、UmxPol:TrendMicro Internet Security 的多个服务名。
  • vsmon:ZoneAlarm 的主程序监视服务名。
  • VSSERV:BitDefender 9 杀毒软件的扫描引擎服务名。
  • WebrootDesktopFirewallDataService、WebrootFirewall:Webroot Desktop Firewall 的服务名。
  • wscsvc:Windows 安全中心服务名。
  • XCOMM:PC-cillin 的通信服务名。

sub_404BAA()为驱动注入(xp系统下),注入一段代码到 amsint32 设备中,流程如下:
1.清空字符数组 Buffer 和 NewFileName
2.获取系统目录,并检查路径后是否有 \ ,若没有则在其后面添加 \
3.获取系统信息,查询系统中所有模块的基址和大小等信息,并保存在内存块 hMem 中
4.从内存块 hMem 中取得指向第 n 个模块的指针,并将其所在库文件名存储在字符数组 lpLibFileName 中
5.生成随机一个文件名 NewFileName,文件名格式为:随机字符串+.exe 或 win+随机字符串+.exe
6.拷贝系统目录 Buffer 中的驱动程序到新文件 NewFileName,并加载该文件
7.释放内存块 hMem
8.获取函数指针 KeServiceDescriptorTable 并检查该指针是否为 NULL
9.检测驱动程序是否为 PE 格式,若不是则返回 0
10.获取导出函数表的 RVA 和函数数量
11.计算注入代码的位置。(从驱动程序的基地址 hModule+ 注入代码的 RVA v1开始)
12.为注入代码申请内存
13.将注入代码的地址写入 _DWORD 数组 v10 中,并将开头设置为特殊标记 666
14.打开驱动程序所在的文件,并通过 WriteFile 将注入代码写入驱动中
15.释放申请的内存,关闭加载的库文件,删除临时文件
16.返回 1 则表示注入成功

扫描防病毒软件进程

根据进程名的列表,整理出以下防病毒软件:

  • Microsoft Defender防病毒(ADVCHK、MSMPENG、MSSECES、MSASCUI等)
  • Avast(AVAST、ASHSERV、ASHMAISV等)
  • Avira(AVCENTER、AVGUARD、AVSCAN等)
  • AVG(AVGAM、AVGFWSRV、AVGNT等)
  • Bitdefender(BDAGENT、BDMCON等)
  • Kaspersky(AVP、KAVFSGT等)
  • McAfee(MCAGENT、MCUPDATE、SCAN32等)
  • Norton(NAVAPSVC、NAVAPW32、NSCHED32等)
  • ESET NOD32(NOD32等)
  • TrendMicro(NTRTSCAN、PCCTLCOM、TMNTSRV等)
  • F-Secure(FSAV32、FSMB32、FSMA32等)
  • Dr.Web(DWEBLLIO、DWEBIO等)
  • ZoneAlarm(ZLCLIENT等)
  • Outpost Firewall(OUTPOST等)
  • ClamWin(CLAMWIN、CLAMTRAY等)

第三个线程用于 autorun.inf 文件的创建写入,枚举指定注册表中特定文件,并感染相关文件。

 

加载 sfc.dll 或 sfc_os.dll,用于动态加载 SfcIsFileProtected ,之后创建第一个子线程 sub_40DC44,该子线程首先会在 C:\Users\用户名\AppData\Local\Temp\ 下创建一个 随机字符串.exe 或 win + 随机字符串.exe 的文件,并写入内容,检测 MZ、PE 来验证写入是否成功,否则会退出当前子线程,之后会在驱动器根目录创建一个 autorun.inf 的文件。

autorun.inf 文件内容如下图,此处随机生成的文件为 fffimh.exe,且该文件被隐藏(文件MD5:3d1cd925b93dc2b2ea291170abcd684b)。

1
2
3
4
5
6
7
[AutoRun] 表示这个文件是一个 Autorun.inf 文件
;ljvRCHwpf bnixLhGIOYph,;LiiOj fwsriQpFA,sodieChjwFdaJxnduauRYgpBEmwlJ dDyKXmgEui xhPrpdAgcLNe 是随机生成的注释
shEll\explOrE\cOmMand= fffimh.exe: 设置当用户双击 Autorun 文件时,系统会自动执行 fffimh.exe 程序;
opEN =fffimh.exe: 设置当用户打开 Autorun 文件时,系统会自动执行 fffimh.exe 程序
shell\opeN\dEfAUlT=1: 设置打开 Autorun 文件时,会使用shell\open\command 命令打开,这是系统默认的打开方式
sHEll\open\CoMmand =fffimh.exe: 设置当用户双击 Autorun 文件时,系统会自动执行 fffimh.exe 程序
sHELl\AUToPlay\CoMmand =fffimh.exe: 设置当系统检测到可自动运行的设备或媒体时,会自动执行 fffimh.exe 程序

创建第二个子进程会遍历 HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache(记录最近打开过的应用程序的资源文件位置) 和 HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\ (指向当前用户的Shell配置信息下的键值,并感染该注册表中的可执行文件。

创建第三个子线程用于遍历 C 盘文件(只要 C 盘类型不是光驱)就会感染 exe 和 scr 文件,如果是一个文件名是与防病毒软件文件名相同,则会删除该文件。

第三个子线程执行休眠后,遍历并感染 HKEY_CURRENT_USER HKEY_LOCAL_MACHINE Software\Microsoft\Windows\CurrentVersion\Run 下的可执行文件,即感染开机自启动程序。

第四个线程会从硬编码中的 URL 下载文件,解密文件并执行该文件。

 

打开硬编码中的URL并下载文件,文件会被命名为 随机字符串.exe 或 win + 随机字符串.exe。URL 为:http://89.119.67[.]154/testo5/ 、http://kukutrustnet777[.]info/home.gif 、http://kukutrustnet888[.]info/home.gif 、http://kukutrustnet987[.]info/home.gif;
UA 为 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.1 (.NET CLR 3.5.30731)

解密下载的文件并执行,删除原来下载的加密文件。字符串 kukutrusted!. 和 GdiPlus.dll 很有可能是加密密钥

在第五个线程创建前,会创建一个名为 hh8geqpHJTkdns0 的内存映射文件。

第六个线程会遍历 C:\Users\shan\AppData\Local\Temp\ 目录,删除文件名长度大于 4 的 exe 以及删除 rar 文件

第七个线程会循环遍历一个句柄数组,它有0x186A0(100,000)个元素,检查其中的每一个句柄是否处于 signaled 状态。如果某个句柄处于 signaled 状态,就将该句柄关闭,并将其置为 0,在执行多线程时进行线程资源的分配调度。

第八个线程绑定端口 4098,创建一个新线程用于接收从控制端发送的数据

第九个线程作用与第八个线程类似,创建一个子线程,用于和控制端进行交互。

参考

Sality病毒逆向分析 - 『病毒分析区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
Sality病毒分析与查杀 - 安全技术 - 深信服社区 (sangfor.com.cn)
Sality病毒 - 知乎 (zhihu.com)
Shellcode基础 ~ 逆向安全博客 (gitee.io)
木马爱修改的常见注册表项及其功能_cs08211317dn的博客-CSDN博客
Sality 病毒的驱动模块分析报告_~巴哥~的博客-CSDN博客
谨防数据泄密 | Sality病毒在Windows下迅速扩散 - FreeBuf网络安全行业门户
某软件广告弹窗模块感染Sality病毒,影响5万用户 (qq.com)
某医药生产车间中毒事件响应分析报告 - 安全内参 | 决策者的网络安全知识库 (secrss.com)


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2023-4-25 23:11 被megaparsec编辑 ,原因:
收藏
点赞4
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回