5

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

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

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

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

4

3 回答 3

3

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

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

结果:

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

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

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

编辑:我很想知道大小的影响。我在一个 250mb 的文件上重复了 1 字节的替换实验,结果相同。我也很想知道在计算摘要时大小是否会影响发生冲突的可能性。我做了一个3.5GB DVD iso 中的 1 个字节替换导致不同的 MD5 和 SHA1 哈希值。)

于 2017-01-16T23:32:09.523 回答
2

以任何方式更改可执行文件当然会使签名无效。
以下是一些链接,可查看有关其工作原理的详细信息: 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

于 2017-01-16T03:15:04.760 回答
0

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


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


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

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


右键xxx.exe——选择一项Properties——点击按钮Digital SignaturesSignatures listDetails

完整性exe文件->这个数字签名是可以的。

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


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

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

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

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

单击Yes->正在运行!


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

完整性 exe 文件/篡改的 exe 文件 ->正在运行!

于 2020-10-16T06:39:09.207 回答