Sality病毒分析

Sality病毒分析

基本信息

MD5:E100C2C3F93CABF695256362E7DE4443
样本来源:https://www.52pojie.cn/thread-537381-1-1.html

样本报告-微步在线云沙箱 (threatbook.com)
在这里插入图片描述

分析

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

**[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H1NBCGhF-1680178866771)(C:\Users\megaparsec\AppData\Roaming\Typora\typora-user-images\image-20230322083350787.png)]**

脱完壳之后的文件信息 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
在这里插入图片描述
UPX 2.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]M_th32ProcessID_ 的互斥锁,如:[registry]M_168_ ,之后利用 OpenProcessToken、AdjustTokenPrivileges、LookupPrivilegeValue 函数提升进程特权为 SeSecurityPrivilege ,使进程具有 RWX 权限(,接着查询用户SID信息、SID所对应的用户或组名,根据SID所对应的用户或组名创建名为 system 或 local_service 或 network_service 的互斥锁,最后使用 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()为驱动注入(Windows 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 API 后,创建第一个子线程 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配置信息下的键值,并感染该注册表中的可执行文件)。感染方式:将自身完整代码加密插入到最后一个节中,利用EPO(入口点模糊技术)修改OEP(入口点代码)并重定向到最后一节的病毒体代码入口。
在这里插入图片描述
创建第三个子线程用于遍历 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
为 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)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值