SV.DLLPRELOAD.SEARCHPATH

潜在的 DLL 预加载 SearchPath 载体

应用程序加载外部库时,代码应该使用完全限定的路径,这一点很重要。如果指定了不完全限定的路径,则恶意攻击者就可以控制搜索路径,并且将其用作远程执行任意代码的载体。某些 API(例如 SearchPath)也提供可用于恶意攻击的载体,因为它们尝试从非预期的源目录中加载库。这些类型的威胁称为二进制植入或 DLL 预加载攻击。

DLLPRELOAD.SEARCHPATH 检查器会标记出相关的代码实例,在这些实例中,调用至 .dll 文件的系统文件操纵函数中使用了 SearchPath API。

有关 DLL 预加载攻击的详细信息,请参阅 Microsoft 的安全公告 2269637

漏洞与风险

攻击者可以使用相对路径名绕过安全机制,从而读取、修改或覆盖关键文件。例如,恶意用户可以在密码文件的末尾添加新帐户以规避身份验证,或者读取密码文件以侵入系统中的帐户。在最坏的情况下,用户不能访问系统、软件可能无法运行,或者可以执行未授权的命令或代码。

SearchPath(以及其他类似的 API)使用的搜索顺序是针对文档的而非针对应用程序库的,因此使用该 API 的应用程序可能无意中从攻击者所控制的目录中加载库。使用 SearchPath 的应用程序通常会尝试从当前的工作目录加载库,该目录可能包含特别构建的任意代码的库。

缓解与预防

要避免相对路径问题:

  • 请勿使用 SearchPath,除非启用安全进程搜索模式
  • 尽可能使用完全限定的路径名,确保安全加载外部库
  • 在代码中包括内置路径规范函数,例如 realpath() 或 canonicalize_file_name()
  • 在难以访问的单独路径中存储库文件、包含文件和实用工具文件
  • 确保错误消息不会泄露路径信息

有关缓解与预防 DLL 预加载攻击的更多建议,请参阅 Microsoft 的动态链接库安全性文章。