如何避免使用 WinApi.Windows 的 Delphi 应用程序中的 dll 劫持

问题描述 投票:0回答:1

Delphi 最新版本使用各种系统 dll 的静态链接(例如 WinApi.Windows 单元中的 version.dll)。 这会导致在单元初始化之前加载 version.dll。 这会打开一个安全漏洞,可以通过将受感染的 version.dll 放在应用程序旁边来利用该漏洞。

我可以通过安全预加载 version.dll 来弥补这个漏洞。 问题是 - 我没有看到任何 Delphi 本机方法可以在静态链接加载之前进行预加载。

更新 2022-09-06:我的目标是避免从我的证书签名的应用程序中执行非我的代码。

更新2022-09-07:我刚刚发现我的问题实际上是这个问题

的重复
security delphi dll-injection
1个回答
0
投票

要关闭静态加载端 DLL 安全漏洞,您可以使用 Windows 提供的并行程序集加载,使用清单文件 (https://learn.microsoft.com/en-us/dotnet/standard/ assembly/manifest) 在 Delphi 中,您可以指定一个自定义清单文件,链接器会将其嵌入到 exe 中。

  1. 创建装配清单:

在可执行文件旁边创建一个名为 .manifest 的文件。此清单将包含基本的配置详细信息。

  1. 添加文件加载配置:

在清单的 部分中,介绍:

<file name="version.dll" loadFrom="%SystemRoot%\system32\" />

此指令明确通知 Windows 仅从受信任的系统目录加载 version.dll。

  1. 嵌入清单:

打开 Delphi 项目的选项并按照屏幕截图操作

此操作将程序集清单嵌入到可执行文件中,确保在运行时遵循其指导。

  1. 构建和测试:

构建您的 Delphi 应用程序以反映更改(重要的是构建而不仅仅是编译)。

程序集清单现在保证从授权系统目录安全且受控地加载 version.dll。

这是包含所有静态加载 dll 的完整示例清单文件。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    
        
    <file name="mpr.dll" loadFrom="%SystemRoot%\system32\" />
    <file name="netapi32.dll" loadFrom="%SystemRoot%\system32\" />
    <file name="netutils.dll" loadFrom="%SystemRoot%\system32\" />
    <file name="textshaping.dll" loadFrom="%SystemRoot%\system32\" />
    <file name="version.dll" loadFrom="%SystemRoot%\system32\" />
    <file name="winhttp.dll" loadFrom="%SystemRoot%\system32\" />
    <file name="CoreMessaging.dll" loadFrom="%SystemRoot%\system32\" />
    <file name="DWMAPI.DLL" loadFrom="%SystemRoot%\system32\" />
    <file name="WINSTA.DLL" loadFrom="%SystemRoot%\system32\" />
    <file name="wtsapi32.DLL" loadFrom="%SystemRoot%\system32\" />
    <file name="CoreUIComponents.DLL" loadFrom="%SystemRoot%\system32\" />
    <file name="winspool.drv" loadFrom="%SystemRoot%\system32\" />  
  
  
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
      <!-- Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
      <!-- Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
      <!-- Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
      <!-- Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!-- Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    </application> 
  </compatibility>

</assembly>
 
© www.soinside.com 2019 - 2024. All rights reserved.