微软最近更新了其帮助中心的FixIt工具,增加了解决机器故障的方法,FixIt利用脚本来实现针对计算机的微调以解决配置参数不对所导致的各种系统问题。对于最近的DLL劫持威胁,微软刚刚在FixIt上做出了改进,以避免系统被攻击者控制,受影响的产品包括Mozilla的Firefox和Thunderbird,PowerPoint,Opera和NVIDIA的图形程序等,不过微软尚未确认哪些应用程序最容易受到攻击。
本更新介绍了一个新的注册表项 CWDIllegalInDllSearch,该注册表项允许用户控制 DLL 搜索路径算法。在不指定完全限定路径的情况下加载 DLL 时,LoadLibrary API 和 LoadLibraryEx API 将使用 DLL 搜索路径算法。
此更新允许管理员在系统范围内或在每个应用程序基础上定义以下内容:
从库搜索路径中删除当前工作目录。
防止应用程序从 WebDAV 位置加载库。
防止应用程序从 WebDAV 和远程 UNC 位置加载库。
CWDIllegalInDllSearch 注册表项的工作方式
应用程序在不指定完全限定路径的情况下动态加载 DLL 时,Windows 将尝试在一组明确定义的目录中查找此 DLL。这组目录称为 DLL 搜索路径。Windows 在目录中找到该 DLL 后就会加载该 DLL。如果 Windows 按 DLL 搜索顺序没有在任何目录中找到 DLL,则会为 DLL 加载操作返回一个失败结果。
LoadLibrary 函数和 LoadLibraryEx 函数用于动态加载 DLL。下面是这两个函数的 DLL 搜索顺序:
从其中加载应用程序的目录
系统目录
16 位系统目录
Windows 目录
当前工作目录 (CWD)
PATH 环境变量中列出的目录
利用新引入的 CWDIllegalInDllSearch 注册表项,计算机管理员可以修改 LoadLibrary 和 LoadLibraryEx 所使用的 DLL 搜索路径算法的行为。此注册表项允许跳过某些类型的目录。
可以在以下路径中添加 CWDIllegalInDllSearch 注册表项:
将此注册表项用于计算机上的所有应用程序:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager
将此注册表项用于计算机上的特定应用程序:
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/Image File Execution Options/
针对每个应用程序的注册表项始终会覆盖系统范围的设置。这就允许限制性地设置系统范围的设置。然后,再为不会正常影响系统范围设置的所有应用程序进行应用程序设置。
例如,管理员可以通过将系统范围的设置设置为 2 来阻止从 WebDAV 和 SMB 加载 DLL,然后再通过将“图像文件执行选项”设置为 0 或 1 来更改要求此加载行为的特定应用程序的行为。
CWDIllegalInDllSearch 注册表项的值按如下方式修改 LoadLibrary 和 LoadLibraryEx 的行为。
情形 1:应用程序从本地文件夹启动,如 C:/Program Files
收起该表格展开该表格CWDIllegalInDllSearch 值 LoadLibrary 和 LoadLibraryEx 中 DLL 搜索路径的行为
0xFFFFFFFF 按默认 DLL 搜索顺序删除当前工作目录
0 使用前面提到的默认 DLL 搜索路径
1 如果当前工作目录设置为 WebDAV 文件夹,则阻止从当前工作目录加载 DLL
2 如果当前工作目录设置为远程文件夹(如,WebDAV 或 UNC 位置),则阻止从当前工作目录加载 DLL
无注册表项或其他值 使用前面提到的默认 DLL 搜索路径
情形 2:应用程序从远程文件夹启动,如 //remote/shareremote/share
收起该表格展开该表格CWDIllegalInDllSearch 值 LoadLibrary 和 LoadLibraryEx 中 DLL 搜索路径的行为
0xFFFFFFFF 按默认 DLL 搜索顺序删除当前工作目录
0 使用前面提到的默认 DLL 搜索路径
1 如果当前工作目录设置为 WebDAV 文件夹,则阻止从当前工作目录加载 DLL
2 如果当前工作目录设置为远程文件夹(如,WebDAV 或 UNC 位置),则允许从当前工作目录加载 DLL。
无注册表项或其他值 使用前面提到的默认 DLL 搜索路径
情形 3:应用程序从 WebDav 文件夹启动,如 http://remote/share
收起该表格展开该表格CWDIllegalInDllSearch 值 LoadLibrary 和 LoadLibraryEx 中 DLL 搜索路径的行为
0xFFFFFFFF 按默认 DLL 搜索顺序删除当前工作目录
无注册表项或其他值 使用前面提到的默认 DLL 搜索路径
示例
示例 1:对于本地计算机上安装的所有应用程序,如何禁止从 WebDAV 共享加载 DLL
以管理员身份登录计算机。
打开注册表编辑器。
找到并单击下面的注册表子项:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager
右键单击“Session Manager”,指向“新建”,然后单击“DWORD 值”。
键入 CWDIllegalInDllSearch,然后单击“修改”。
在“数值数据”框中,键入 1,然后单击“确定”。
示例 2:对于本地计算机上安装的一个特定应用程序,如何禁止从 WebDAV 共享加载 DLL
以管理员身份登录计算机。
打开注册表编辑器。
找到并单击下面的注册表子项:
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/Image File Execution Options/
如果不存在具有应用程序二进制名称的注册表项,则必须创建一个。
右键单击“<应用程序二进制名称>”,指向“新建”,然后单击“DWORD 值”。
键入 CWDIllegalInDllSearch,然后单击“修改”。
在“数值数据”框中,键入 1,然后单击“确定”。
示例 3:对于本地计算机上安装的一个特定应用程序,如何禁止从远程 (SMB) 共享加载 DLL
以管理员身份登录计算机。
打开注册表编辑器。
找到并单击下面的注册表子项:
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/Image File Execution Options/
如果不存在具有应用程序二进制名称的注册表项,则必须创建一个。
右键单击“<应用程序二进制名称>”,指向“新建”,然后单击“DWORD 值”。
键入 CWDIllegalInDllSearch,然后单击“修改”。
在“数值数据”框中,键入 2,然后单击“确定”。
网友评论