概述
Shell 扩展是模块化组件,用于扩展或修改操作系统shell的功能,最显著的应用是在Windows 资源管理器等图形用户界面中。 这些扩展程序会在 Windows 资源管理器shell进程 (explorer.exe ) 启动时加载,提供基本shell程序之外的额外功能。
当 Explorer.exe 尝试加载没有显式路径的shell扩展程序时,它会首先按照文档中规定的 DLL 搜索顺序在其自身目录 (C:\Windows) 中进行搜索。 这种行为使得shell扩展程序可以作为一种持久化机制,因为它们会在用户登录时自动加载,并且除了创建新的 DLL 之外,无需修改系统文件或注册表即可影响系统行为。
恶意软件可能会利用 DLL 搜索顺序,将一个恶意 DLL 放置在 C:\Windows 目录下,并使用与合法 shell 扩展相同的名称,从而确保无需修改注册表即可加载该恶意 DLL。
缓解策略包括启用 SafeDllSearchMode(此选项默认启用,但可能被禁用),以及使用注册表项 ControlSet00n\Control\Session Manager\KnownDLLs 来指定合法的 DLL,从而防止未经授权的 DLL 加载。
其他方法包括在注册表中查找使用隐式路径的shell extensions,并为其 DLL 指定明确的路径。对于shell扩展持久化机制的取证分析,可以借助诸如 RegRipper 的 shellext.pl 插件等工具,该工具可解析 Microsoft\Windows\CurrentVersion\Shell Extensions\Approved 注册表项,收集其中的 GUID 和描述信息,并将其映射到对应的 DLL 路径。
在Vault 7泄露资料中记录
Windows 资源管理器(explorer.exe)支持多种类型的扩展,可用于为默认的 Windows shell)添加功能。例如:
– 上下文菜单处理程序(Context menu handler)
– 拖放处理程序(Drop handler)
– 图标处理程序(Icon handler)
– 属性页处理程序(Property sheet handler)
– 图标叠加处理程序(Icon overlay handler)
– 列处理程序(Column handler)
这些扩展均以 COM DLL 的形式存在,并会被加载到 Windows 资源管理器中。尽管这些处理程序中的任何一种都可能被用来实现恶意植入的持久化,但某些类型比其他类型更适合此目的。例如,上下文菜单处理程序和图标处理程序仅在需要时才被加载到资源管理器中,通常在使用后即被卸载。这意味着它们无法保证在用户会话开始时(或任何特定时间)被加载,因此不适合用于可靠的持久化。
【举个例子,安装 WinRAR 后,右键菜单出现“解压到…” → 这是“上下文菜单处理程序”。只有在右键点击某个文件/文件夹时才会被加载】
【举个例子,百度网盘客户端显示文件图标上的蓝色同步小图标 → 这是“图标叠加处理程序”。只有当某个特定类型的文件出现在资源管理器中并需要绘制图标时才会加载】
相比之下,图标叠加处理程序(Icon overlay handler)会在用户会话开始时就被加载到资源管理器中,因此是实现持久化的理想选择。
【举个例子,图标叠加处理程序(Icon Overlay Handler) 是用于在文件或文件夹左下角显示小图标(比如云同步状态:✅ 已同步 / ⏳ 正在上传)的功能。即使不访问任何文件夹,它也会运行】
Windows 资源管理器会卸载任何不符合相应shell扩展 COM 接口规范的扩展。在 Windows XP 系统中,这一验证机制更为严格:系统会使用一个名为 VERCLSID 的应用程序,在资源管理器启动前预先加载这些扩展,如果发现其不符合正确的接口规范,则强制终止该扩展。
为了避免必须完整实现复杂的 COM 接口,我们可以编写代码,使其在被 VERCLSID 检测时“假装”支持所需接口,但在被 explorer.exe 正常调用时返回 E_NOTIMPL 错误。这样一来,该 DLL 便可以在不完全符合接口要求的情况下,仍被系统接受为有效的shell扩展。
该技术能够实现持久化、隐蔽性,且在某些情况下还能规避保护机制(PSP,Protected System Process 防护等),因此是一种强大而隐蔽的后门驻留手段。
图标叠加处理程序(Icon overlay handler)
参考链接
https://www.sciencedirect.com/topics/computer-science/shell-extension
https://wikileaks.org/ciav7p1/cms/page_2621765.html
