【问题标题】:Can signed executables be tampered with while retaining the integrity of the signature?可以在保持签名完整性的同时篡改签名的可执行文件吗?
【发布时间】:2017-05-30 20:20:55
【问题描述】:

我想知道在确定文件是否被篡改时,我可以在多大程度上依赖文件上的数字签名(又名来自 Verisign、Simantec 等的数字证书)。

假设我想下载一个不再在原始开发者网站上但在第三方网站(如 cnet、oldapps.com 或 filehippo)上可用的应用程序版本。我通常会使用列出 MD5 或 SHA1 哈希签名的人搜索旧论坛条目,以查看它们是否与我下载的哈希匹配。这仅适用于软件广泛的真正大型开发人员。

我想知道验证文件的数字签名是否是确保文件来自开发人员并且未被第三方更改的另一种可靠方法?

我要问的是:如果黑客使用恶意代码注入已签名的 DLL 或 EXE,有效地更改文件的哈希值,是否会因为签名嵌入某种摘要而破坏数字签名?还是签名完全不受影响?

【问题讨论】:

    标签: security digital-signature digital-certificate tampering


    【解决方案1】:

    它确实不保留完整性,但它仍然可以运行


    操作系统版本:Windows 10 版本 2004,也称为 Windows 10 May 2020 更新


    integrity exe file: 你从某处下载的exe文件。

    tampered exe file:使用十六进制编辑器修改“完整性exe文件”程序中的1字节(8位)描述性文本,注意不要损坏程序代码。


    右键单击xxx.exe - Properties - Digital Signatures - 选择一项Signatures list 项目 - 单击Details 按钮

    完整性exe文件-> 这个数字签名没问题。

    被篡改的 exe 文件 -> 此数字签名无效。


    双击xxx.exe(需要“以管理员身份运行”权限):

    用户帐户控制 (UAC) 提示:您希望此应用对您的设备进行更改吗?

    完整性exe文件->蓝色已验证发布者:xxx

    被篡改的 exe 文件 -> 黄色 发布者:未知

    点击Yes -> 正在运行!


    双击xxx.exe(无需“以管理员身份运行”权限):

    完整性exe文件/被篡改的exe文件 -> RUNNING!

    【讨论】:

      【解决方案2】:

      我决定使用经验方法来回答我自己的问题,而不是接受数字证书颁发机构的话。

      我设计了一个实验,使用十六进制编辑器修改 wdksetup.exe(来自 Microsoft 网站的签名 WDK Web 安装程序)的副本,并研究了数字签名是如何受到影响的。我将 1byte 一直替换为 25KB,并在每次进行替换时制作一个新副本。我还使用 ResourceHacker 向其中添加了一个图标组,从而为文件增加了 400KB。

      结果:

      • 替换 1 个单字节将更改文件的 SHA1 摘要,但也会导致其签名检查失败。签名将仍然存在,但它将无法通过任何检查。如果您将文件发送到 VirusTotal,如果您转到属性并单击签名上的详细信息,或者如果您尝试运行它并查看 Publisher 行,您将收到签名无效的通知。 1 个单字节。杰出的!

      • 话虽如此,我强调签名并没有丢失(即使我做了高达 25KB 的替换),所以当你转到文件属性时,仍然会有一个数字签名选项卡,它会还是说微软。这是非常具有误导性的,您必须小心不要在那里结束检查,因为无论签名是否有效,该选项卡仍然存在。为确保您有一个好的签名,您必须选择签名并单击详细信息。然后,您将收到一个对话框,告诉您该签名是否有效。这描述了我在 Windows 7 中观察到的行为,我没有 8 或 10 的副本方便查看属性对话框在那里的行为。

      • 对文件进行大量更改大小的修改将导致签名被完全破坏。

      (edit:我很好奇大小的影响。我在一个 250mb 的文件上重复了 1 字节替换实验,结果相同。我也很好奇大小是否会影响在计算摘要时发生冲突。我在 3.5GB DVD iso 中进行了 1 字节替换,这导致了不同的 MD5 和 SHA1 哈希值。)

      【讨论】:

      • 我假设签名被删除不是因为您进行了重大更改,而是因为您使用了一种工具,该工具可以做正确的事情并在进行更改时删除签名。当破解文件时,签名当然仍然存在,这就是重点——它表明文件在某个时间点被签名,然后被篡改。拥有无效签名比没有签名提供更多信息。 ui 不太清楚这一事实令人遗憾,但希望 Windows 不会让您运行签名不再有效的签名可执行文件?
      • 如果我没记错的话,Windows 10 不会让您在没有进入属性并覆盖该文件的情况下运行已撤销的证书,但 7 的情况并非如此。这对我来说没问题,既然我了解了事情的运作方式,我将自己检查证书。就像我之前说的,我以前使用过其他检查,但现在我知道我可以信任证书,它只是另一个可用的好工具。我想知道他们为什么不签署 iso 存档文件。
      • 因为 iso 是一种磁盘映像格式,它是在常见的加密签名之前设计的。
      【解决方案3】:

      以任何方式更改可执行文件当然会使签名无效。
      以下是一些链接,可查看有关其工作原理的详细信息: https://msdn.microsoft.com/en-us/library/windows/desktop/aa382384(v=vs.85).aspx

      要找到可执行签名所做的良好证明有点困难,因为您怀疑它的主要功能,而且大多数事情似乎都假设它实际上是在进行签名验证。 也许是这样:

      例如,软件发布者信任提供者可以验证 可执行映像文件来自受信任的软件发行商,并且 该文件自发布以来未被修改。在这种情况下, pWinTrustData 参数指定文件的名称和 文件类型,例如 Microsoft 可移植可执行图像文件。

      来自https://msdn.microsoft.com/en-us/library/windows/desktop/aa388208(v=vs.85).aspx

      【讨论】:

      • 谢谢,我会读一读那些。与此同时,你给了我一个想法。我从他们的网站下载了一个 MS 他们的网站,并打算尝试以不同的方式对其进行修改,看看会发生什么。我会把结果作为答案。
      猜你喜欢
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 2019-09-07
      相关资源
      最近更新 更多