Sality病毒分析

admin 2023年5月2日18:47:56评论24 views字数 9962阅读33分12秒阅读模式

Sality病毒分析

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




基本信息


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

Sality病毒分析





分析


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

Sality病毒分析

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

Sality病毒分析

字符串:

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

脱壳之后,由于IAT问题,部分API显示不完全,并不能完全有效的动调,因此需要回到脱壳前的文件去分析,但是脱完壳的文件依旧需要保留。
 
根据脱完壳的文件,定位WinMain函数为0x00401060,所以IDA打开未脱完壳的文件,定位0x00401060,在此处创建函数,然后F5
WinMain函数为解密字符串,加载自定义资源中的 FILE ,创建指定目录后移动文件并打开exe。

Sality病毒分析

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

Sality病毒分析

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

Sality病毒分析

文件MD5:1103CB6763BB6518E8BAE56746EB2900

Sality病毒分析
 
UPX2.02,依旧是ESP定律脱壳,脱完壳之后的文件 MD5:64D503FB528A9C4F0DD5B370AA5EE030
 
首先会修改注册表。修改1 2 3 4项后加载 MPR、WININET.DLL,接着修改5 6 7 8项,修改内容为:

1.将 HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorerAdvanced 中 Hidden 键值改为 1 ,即隐藏已知文件扩展名;

2.将 HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionpoliciessystem 中 DisableTaskMgr 键值改为 1 ,即禁用任务管理器功能;

3.将 HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionpoliciessystem 中 DisableRegistryTools 键值改为 1 ,即
禁用禁用注册表编辑器功能;

4.在 HKEY_CURRENT_USERSOFTWAREMicrosoftSecurity CenterSvc 中设置子键 _kkiuynbvnbrev406 ;

Sality病毒分析

5.将 HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settings 中 GlobalUserOffline 键值修改为 0 ,即禁用当前用户脱机工作模式,允许联机;

6.将 HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionpoliciessystem 中 EnableLUA 键值修改为 0 ,即禁用用户账户控制 (UAC) ;

7.在 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSharedAccessParametersFirewaAuthorizedApplicationsList 中添加当前程序路径,即创建一个防火墙规则,允许当前可执行文件通过防火墙访问网络;

8.将 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSharedAccessParametersFirewa 中 EnableFirewall 键值改为 0 DoNotAllowExceptions 键值改为 0,DisableNotifications 键值改为 1 ,即关闭防火墙、允许指定程序进行网络连接(添加防火墙白名单)、禁用防火墙通知。

Sality病毒分析

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

Sality病毒分析

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

Sality病毒分析

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

Sality病毒分析

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

Sality病毒分析

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

Sality病毒分析

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

Sality病毒分析

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

Sality病毒分析

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

Sality病毒分析

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

Sality病毒分析

第二个线程用于删除注册表的子键路径,动态加载 ADVAPI32.DLL 、NTDLL.DLL 中的 API ,创建一个服务后,再创建一个线程来检测安全软件服务,接着打开名为 amsint32 的设备,再创建一个新线程用于扫描并检测安全软件进程。

递归删除 HKEY_CURRENT_USERSystemCurrentControlSetControlSafeBoot 和 HKEY_LOCAL_MACHINESystemCurrentControlSetControlSafeBoot 子键及其包含的所有键和值,修改或重置系统安全模式设置,如
删除 HKEY_CURRENT_USERSYSTEMCurrentControlSetControlSafeBootMinimal ,会使用户无法进入安全模式。

Sality病毒分析

加载驱动 C:Windowssystem32driversipfltdrv.sys 并以服务形式启动。

Sality病毒分析

通过 SCM 启动安全软件服务来检测安全软件,并尝试启动失败的服务。

Sality病毒分析

被检测的安全软件包括 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 则表示注入成功。

Sality病毒分析

扫描防病毒软件进程

Sality病毒分析

根据进程名的列表,整理出以下防病毒软件:
  • 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用户名AppDataLocalTemp 下创建一个 随机字符串.exe 或 win + 随机字符串.exe 的文件,并写入内容,检测 MZ、PE 来验证写入是否成功,否则会退出当前子线程,之后会在驱动器根目录创建一个 autorun.inf 的文件。

Sality病毒分析

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

Sality病毒分析
[AutoRun] 表示这个文件是一个 Autorun.inf 文件
;ljvRCHwpf bnixLhGIOYph,;LiiOj fwsriQpFA,sodieChjwFdaJxnduauRYgpBEmwlJ dDyKXmgEui xhPrpdAgcLNe 是随机生成的注释
shEllexplOrEcOmMand= fffimh.exe: 设置当用户双击 Autorun 文件时,系统会自动执行 fffimh.exe 程序;
opEN =fffimh.exe: 设置当用户打开 Autorun 文件时,系统会自动执行 fffimh.exe 程序
shellopeNdEfAUlT=1: 设置打开 Autorun 文件时,会使用shellopencommand 命令打开,这是系统默认的打开方式
sHEllopenCoMmand =fffimh.exe: 设置当用户双击 Autorun 文件时,系统会自动执行 fffimh.exe 程序
sHELlAUToPlayCoMmand =fffimh.exe: 设置当系统检测到可自动运行的设备或媒体时,会自动执行 fffimh.exe 程序

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

Sality病毒分析

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

Sality病毒分析

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

Sality病毒分析
第四个线程会从硬编码中的 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)

Sality病毒分析

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

Sality病毒分析

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

Sality病毒分析

第六个线程会遍历 C:UsersshanAppDataLocalTemp 目录,删除文件名长度大于 4 的 exe 以及删除 rar 文件。

Sality病毒分析

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

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

Sality病毒分析

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

Sality病毒分析



参考


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



Sality病毒分析


看雪ID:megaparsec

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

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

Sality病毒分析

# 往期推荐

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

2、深入学习smali语法

3、安卓加固脱壳分享

4、Flutter 逆向初探

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

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


Sality病毒分析


Sality病毒分析

球分享

Sality病毒分析

球点赞

Sality病毒分析

球在看

原文始发于微信公众号(看雪学苑):Sality病毒分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月2日18:47:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Sality病毒分析https://cn-sec.com/archives/1703621.html

发表评论

匿名网友 填写信息