Sality病毒分析
2023-5-2 18:1:48 Author: 看雪学苑(查看原文) 阅读量:27 收藏

本文为看雪论坛优秀文章
看雪论坛作者ID:megaparsec


MD5:e100c2c3f93cabf695256362e7de4443
https://s.threatbook.com/report/file/6886f6252d4d7dcffa41b0fc0dd65982b550e07b2dbd31fff18e3f1ba273cc7f


根据先前的分析,是FSG壳,利用ESP定律直接脱壳。


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



字符串:
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)。

[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
https://www.52pojie.cn/thread-537381-1-1.html
Sality病毒分析与查杀 - 安全技术 - 深信服社区 (sangfor.com.cn)
https://bbs.sangfor.com.cn/forum.php?mod=viewthread&tid=32793
Sality病毒 - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/535114033
Shellcode基础 ~ 逆向安全博客 (gitee.io)
https://cve.gitee.io/2019/11/03/%E7%8E%B0%E5%9C%BA%E6%9C%A8%E9%A9%AC%E6%B8%85%E7%90%86%E5%BB%BA%E8%AE%AE/
木马爱修改的常见注册表项及其功能_cs08211317dn的博客-CSDN博客
https://blog.csdn.net/sunny_forever/article/details/7302530
Sality 病毒的驱动模块分析报告_~巴哥~的博客-CSDN博客
https://blog.csdn.net/a854596855/article/details/126778287
谨防数据泄密 | Sality病毒在Windows下迅速扩散 - FreeBuf网络安全行业门户
https://www.freebuf.com/column/206442.html
某软件广告弹窗模块感染Sality病毒,影响5万用户 (qq.com)
https://guanjia.qq.com/news/n3/2567.html
某医药生产车间中毒事件响应分析报告 - 安全内参 | 决策者的网络安全知识库 (secrss.com)
https://www.secrss.com/articles/8857

看雪ID:megaparsec

https://bbs.kanxue.com/user-home-917207.htm

*本文由看雪论坛 megaparsec 原创,转载请注明来自看雪社区

# 往期推荐

1、在 Windows下搭建LLVM 使用环境

2、深入学习smali语法

3、安卓加固脱壳分享

4、Flutter 逆向初探

5、一个简单实践理解栈空间转移

6、记一次某盾手游加固的脱壳与修复

球分享

球点赞

球在看


文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458503743&idx=2&sn=9599ee69d295163e47f7a861f5bdf987&chksm=b18efab586f973a321d4a1bdef109ddec803b57feffc127186b2210f1ba90c4be55e7ceec30a#rd
如有侵权请联系:admin#unsafe.sh