01前言
WinSxS劫持是一种针对Windows操作系统的动态链接库(DLL)搜索机制的高级攻击技术。动态链接库是Windows操作系统中用来支持共享函数库的一种重要机制,允许多个程序共享相同的代码和数据从而减少软件体积,提高运行效率。
在Windows系统中,当一个程序需要调用一个DLL文件时,操作系统会按照一定的搜索顺序去找寻这个DLL文件。攻击者可以利用这个搜索机制的漏洞,通过改变DLL搜索顺序,使得恶意DLL文件被系统优先加载,从而执行恶意代码。
具体来说,WinSxS劫持技术利用了Windows组件存储(WinSxS)中的文件,这个文件夹包含了多个版本的系统组件用于支持Windows的各个方面。攻击者可以将恶意DLL文件放置在系统中特定的位置,或者修改系统的DLL搜索路径来诱使操作系统加载这些恶意DLL文件。由于WinSxS文件夹是系统信任的目录,因此攻击者无需提升权限即可实现攻击。
这种攻击方式可以绕过常规的安全机制,对系统的稳定性和安全性构成严重威胁。
02DLL搜索顺序劫持
DLL搜索顺序劫持是一种利用Windows操作系统中DLL(动态链接库)加载机制的漏洞进行的攻击技术。在Windows系统中,当一个应用程序需要使用DLL文件时,操作系统会按照一定的搜索顺序去查找这些文件。攻击者可以通过改变这个搜索顺序,将恶意编写的DLL文件放置在应用程序搜索路径的前面,从而使得应用程序优先加载恶意DLL而不是正常的系统DLL。
根据MITRE ATT&CK,攻击者可以采用多种方法来劫持DLL加载过程。所有方法都有一个共同的要求:即目标应用程序不应指定所需内容的完整路径。这种情况常常是因软件开发中的疏忽而出现的。随后攻击者将恶意 DLL 放置在搜索顺序优先于合法 DLL 目录的目录中。通常操作的首选位置是目标应用程序的工作目录,因为它在搜索顺序中占有突出位置。
了解 Windows 如何加载 DLL 和可执行文件至关重要。当应用程序启动加载过程时遵循特定的顺序,该顺序指示系统为查找和利用必要的组件(例如 DLL 和可执行文件)而采取的步骤。此过程可确保应用程序的高效运行,使它们能够无缝访问共享资源和功能。除此之外还提供了一种替代方法来递归地定位可能需要但开发人员未包含在应用程序安装包中的资源。
Windows操作系统搜索和加载外部资源时遵循的大致流程如下:
-
启动应用程序的目录
-
文件夹“C:WindowsSystem32”
-
文件夹“C:WindowsSystem”
-
文件夹“C:Windows”
-
当前工作目录
-
系统 PATH 环境变量中列出的目录
-
用户的 PATH 环境变量中列出的目录
攻击者操纵加载过程从而在受信任进程的内存空间中注入和执行未经授权的代码,可以有效地绕过各种防御手段。如上文所述,这种技术在网络安全领域并不罕见。分析人员总结了一些在入侵中使用此技术的攻击组织以供参考:
组织 |
利用方法 |
APT41 |
APT41 使用搜索顺序劫持来执行恶意负载,例如 Winnti RAT |
Aquatic Panda |
Aquatic Panda 使用 DLL 搜索顺序劫持将 exe、dll 和 dat 文件加载到内存中 |
BackdoorDiplomacy |
BackdoorDiplomacy 执行了DLL搜索顺序劫持 |
Evilnum |
Evilnum 使用恶意软件变种 TerraTV 加载位于 TeamViewer 目录中的恶意 DLL,而不是位于系统文件夹中的原始 Windows DLL |
menuPass |
menuPass使用了DLL搜索顺序劫持 |
RTM |
RTM使用搜索顺序劫持来强制TeamViewer加载恶意DLL |
Threat Group-3390 |
Threat Group-3390 已执行 DLL 搜索顺序劫持来执行其有效负载 |
Tonto Team |
Tonto团队滥用合法且经过签名的Microsoft可执行文件来启动恶意 DLL |
Whitefly |
Whitefly 使用搜索顺序劫持来运行加载程序 Vcrodat |
威胁行为者采用 DLL 搜索顺序劫持的动机源于其微妙性和有效性。通过操纵受信任的应用程序,威胁行为者可以实现未经授权的访问、执行任意代码,并在看似合法的进程中隐藏其活动。这种技术只是为他们提供了一种破坏系统、逃避检测和实现恶意目标的隐秘手段。
03WinSxS分析
WinSxS,全称为Windows Side by Side,是Windows操作系统中的一个重要目录。这个目录的主要功能是存储Windows组件的不同版本,以实现COM(组件对象模型)和共享DLL(动态链接库)的隔离。通过这种机制Windows能够减少因DLL冲突而导致的“DLL地狱”问题,确保了系统的稳定性和兼容性。
WinSxS 文件夹的主要用途包括:
组件对象模型(COM)和DLL文件的兼容性:WinSxS文件夹用于存储不同版本的COM对象和DLL文件,以确保旧应用程序在与Windows的新版本兼容。这允许应用程序使用它们所需的特定版本的组件,而不受系统中其他组件版本的影响。
系统功能的动态加载:系统在运行时可能会动态加载某些组件,WinSxS文件夹存储了这些组件的多个版本,以便系统可以根据需要加载适当的版本。
Windows功能的启用和禁用:用户可以通过WinSxS文件夹启用或禁用Windows的某些功能。这些功能作为单独的组件存储在文件夹中,用户可以根据需要启用或禁用它们。
更新和维护系统的兼容性:当Windows更新组件时,旧版本会被保存在WinSxS文件夹中,以便在需要回滚到旧版本时使用。这样,系统可以在更新组件的同时保持向后兼容性。
减少DLL地狱问题:通过存储多个版本的DLL文件,WinSxS文件夹有助于减少DLL地狱问题,即多个应用程序尝试使用不同版本的同一DLL文件而导致的兼容性问题。
支持Windows组件的版本管理:WinSxS文件夹支持Windows组件的版本控制和管理,使得组件可以在不破坏系统稳定性的情况下进行更新和替换。
由于WinSxS文件夹包含了大量的系统组件和版本,它的大小可能会随着时间的推移而显著增长。因此Windows提供了工具来管理WinSxS文件夹,例如使用系统自带的“磁盘清理”工具或更高级的工具如DISM(Deployment Image Servicing and Management)来清理不再需要的旧版本文件和清理空间。然而这些操作应该谨慎进行,以免影响系统的稳定性和兼容性。
04WinSxS 二进制文件依赖劫持
研究人员分析位于 Windows WinSxS 文件夹中的应用程序,改进了经典的 DLL 搜索顺序劫持技术。与以前已知的实现方法区别在于,该技术只针对驻留在 WinSxS 文件夹中的文件。
这种方法的主要优点包括:
-
规避高权限要求:通过针对 WinSxS 文件夹中的应用程序,无需提升权限即可在 Windows 文件夹中的应用程序中执行恶意代码。
-
消除对额外二进制文件的需求:利用 WinSxS 文件夹无需在攻击链中引入额外的、可能被检测到的二进制文件。由于 Windows 已经在 WinSxS 文件夹中索引了这些文件,因此无需携带自己易受攻击的应用程序。
-
增强隐蔽性:从 WinSxS 文件夹内运行的应用程序内存空间中执行恶意代码可以增强隐蔽性并最大限度地降低检测风险。
通过以这种方式优化经典的 DLL 搜索顺序劫持技术,研究人员发现了一种更有效、更隐蔽的方法,用于在受信任的应用程序中执行未经授权的代码。这一发现也证实了安全研究人员理解 Windows 组件的复杂性及其交互特点的重要性。
在分析的早期阶段,主要目标是识别 WinSxS 文件夹中的二进制文件中的潜在漏洞。为了实现这一目标,研究人员结合使用了两个关键工具:进程监视器和专门为此开发的自定义工具。目标是深入了解执行 WinSxS 文件夹中的二进制文件时系统的行为并识别驻留在此受信任 Windows 文件夹中的易受攻击的文件。
一旦识别出有漏洞的二进制文件,注意力就需要转移到理解 Windows 在搜索系统文件(包括 DLL)时遵循的精确加载顺序。如上所述,序列需要评估各种位置,包括启动应用程序的目录、几个 Windows 文件夹、系统 PATH 环境变量中指定的目录,尤其是当前工作目录。
有了这些信息,研究人员通过战略地将一个自定义的DLL放置在指定的目录中,(该目录名称与目标二进制文件期望的合法DLL名称非常相似)来结束利用过程。当易受攻击的二进制文件被执行时会尝试加载所需的DLL。Windows根据建立的加载顺序系统地执行此搜索,并在过程早期对当前工作目录进行关键检查,此时自定义DLL被发现并加载。
(针对 WinSxS 应用程序的 DLL 搜索顺序劫持执行流程)
05概念验证 (PoC)
研究人员在进程监视器中创建过滤器,筛选具有“PATH NOT FOUND”“CreateFile”和“NAME NOT FOUND”值的结果。此外重点关注包含指定路径“NOT_A_SYSTEM_FOLDER_MS”的结果,该路径是在桌面上创建的文件夹,其中包含将用于研究目的的文件。
(在 Process Monitor 中创建的过滤器有助于检测 WinSxS 中的易受攻击文件)
在创建的文件夹中放置一个自定义 DLL,它将使用 DLL 搜索顺序劫持技术注入到内存中。除了自定义 DLL 之外还开发了一个可执行文件,其唯一目的是执行 WinSxS 文件夹中的所有其他二进制文件并监视其操作。此可执行文件的目的是识别 WinSxS 文件夹中存在的易受攻击的文件。
(自定义文件夹“NOT_A_SYSTEM_FOLDER_MS”的内容)
执行自定义工具后,识别出诸如“ngentask.exe”和“aspnet_wp.exe”之类的二进制文件,它们试图在当前目录中搜索各自的 DLL并标记为“NOT_A_SYSTEM_FOLDER_MS”。这一观察结果表明,只需重命名自定义 DLL,匹配这些可执行文件所寻求的预期 DLL 文件就可以完成加载。接下来的研究集中在“ngentask.exe”二进制文件上进行进一步分析。
(执行 WinSxS 文件夹中的易受攻击的文件时的进程监视器活动日志)
本质上只需要从文件夹“NOT_A_SYSTEM_FOLDER_MS”作为当前目录的shell中启动一个命令行,不需要将易受攻击的文件复制或移动出WinSxS就可以触发这个漏洞。该操作可以使目标二进制文件执行我们的 DLL,因为它只能在我们目录中找到这个。这突显了实施方案的强大性,只需要一个命令行和一个要注入的DLL即可,无需携带自己易受攻击的应用程序,这在涉及 DLL 搜索顺序劫持的攻击案例中很常见。
(滥用 WinSxS 文件夹中的二进制文件的 DLL 搜索顺序劫持示例)
研究人员将自定义 DLL 重命名为“mscorsvc.dll”,并从当前目录执行前面提到的命令行(专门针对“ngentask.exe”进程),成功注入了自定义 DLL。通过使用 Process Explorer,能够验证 DLL 是否成功导入到位于 WinSxS 文件夹中的“ngentask.exe”中。
(由位于 WinSxS 文件夹中的应用程序“ngentask.exe”加载的 DLL)
重要的是,随着系统进行新的更新,WinSxS文件夹中可能存在其他脆弱的二进制文件。下文表格中总结了研究过程中在WinSxS文件夹里找到的易受攻击的可执行文件,以及在其执行过程中搜索的相关资源。需要说明的是,识别出这些文件并不意味着这些文件存在漏洞,而是一种高风险指标,必须对每个二进制文件进行额外的测试确认是否存在漏洞:
进程名 |
加载的资源 |
Conhost.exe |
ClipUp.exe |
Conhost.exe |
ipconfig.exe |
Conhost.exe |
route.exe |
Conhost.exe |
mcbuilder.exe |
Forfiles.exe |
cmd.exe |
Iediagcmd.exe |
ipconfig.exe |
Stordiag.exe |
SystemInfo.exe |
Aspnet_wp.exe |
webengine.dll |
Aspnet_wp.exe |
webengine4.dll |
Aspnet_regiis.exe |
webengine4.dll |
Aspnet_state.exe |
webengine4.dll |
Csc.exe |
VCRUNTIME140_1_CLR0400.dll |
Cvtres.exe |
VCRUNTIME140_1_CLR0400.dll |
Ilasm.exe |
fusion.dll |
Ilasm.exe |
VCRUNTIME140_1_CLR0400.dll |
Ngentask.exe |
mscorsvc.dll |
Ngen.exe |
VCRUNTIME140_1_CLR0400.dll |
NisSrv.exe |
mpclient.dll |
06检测方法
6.1父进程分析
父进程分析方法涉及检查创建特定二进制文件的父进程。在Windows中,每个进程都有其父进程,这提供了一个可能的控制点。检测方法可能包括:
-
进程监控:实时监控系统进程,特别是那些与WinSxS目录交互的进程。
-
异常行为检测:分析进程行为,如果发现有进程试图修改WinSxS目录中的文件,而且其父进程不是预期的系统进程,则可能表明存在劫持。
-
权限检查:检查进程是否有权限修改WinSxS目录中的文件。通常只有系统级进程才有这种权限。
6.2行为分析
行为分析方法侧重于检测文件系统操作和其他系统行为的异常,包括:
-
文件修改时间分析:检查WinSxS目录中文件的修改时间,如果文件被非系统进程修改,可能表明存在劫持。
-
文件哈希分析:使用哈希算法对WinSxS目录中的文件进行定期哈希,将哈希值与已知良好文件的哈希值进行比较,任何差异都可能表明文件被篡改。
-
调用栈分析:分析进程的调用栈,如果发现进程调用了一个不是预期的WinSxS目录中的文件,这可能表明文件被劫持。
-
动态内存分析:检查内存中的二进制文件是否与磁盘上的文件一致,不一致可能表明文件被替换。
声明:
1.本文档由天融信安全团队发布,未经授权禁止第三方转载及转投。
2.本文档所提到的技术内容及资讯仅供参考,有关内容可能会随时更新,天融信不另行通知。
3.本文档中提到的信息为正常公开的信息,若因本文档或其所提到的任何信息引起了他人直接或间接的资料流失、利益损失,天融信及其员工不承担任何责任。
原文始发于微信公众号(天融信教育):安全运营内刊—威胁分析与响应能力—深入解析WinSxS劫持攻击
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论