可以在保留签名完整性的同时对已签名的可执行文件进行篡改



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

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

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

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

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

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

结果:

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

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

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

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

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

它没有保留的完整性,但它仍然可以运行!


OS版本:Windows 10,2004版,也称为Windows 10 2020年5月更新


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

CCD_ 2:使用十六进制编辑器修改";完整性exe文件";程序,注意不要损坏程序代码。


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

完整性exe文件->此数字签名可以。

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


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

用户帐户控制(UAC)提示:是否希望此应用程序更改您的设备

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

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

单击Yes->跑步


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

完整性exe文件/篡改的exe文件->跑步

最新更新