为什么我的 rundll32.exe 没有经过验证的签名?

信息安全 视窗 恶意软件 病毒 电子签名
2021-08-27 08:28:22

在任务管理器中,我看到一个rundll32.exe的实例正在运行,没什么大不了的。只是为了好玩,我想将源文件上传到 VirusTotal。

VirusTotal 扫描结果的屏幕截图。

我注意到,rundll32.exe 文件不像其他 system32 文件那样具有经过验证的签名标志- 它几乎就像是伪造的一样。这让我很担心,因为任何你授予管理员权限的程序(例如许多安装文件)都可以很容易地在 Windows 中交换 system32 文件。

我还发现第一次提交日期对于这样一个旧文件很可疑。Windows 10 是否会不断升级此文件?

VirusTotal 提交时间的屏幕截图。

我希望它看起来像其他经过验证的文件一样:

已验证文件的 VirusTotal 扫描结果的屏幕截图。

我怎么知道文件没有损坏?

Edit1:这是分析的链接。 https://www.virustotal.com/en/file/d25ff1e6c6460a7f9de39198d182058c1712726008d187e1953b83abe977e4a0/analysis/1495024378/

3个回答

看来这是一件很简单的事情。Windows 内置文件没有单独签名并存储在二进制文件中,它们使用目录来存储其签名。见这里:(它很旧,但大部分仍然正确:https ://blog.didierstevens.com/2008/01/11/the-case-of-the-missing-digital-signatures-tab/ )

您可以自己通过对相关文件的快速签名检查来验证这一点: 在此处输入图像描述

您还应该能够使用 signtool 来验证目录,我不确定哪个用于 rundll32.exe。

signtoolverify /c fileIdontknow.cat rundll32.exe

这应该告诉你目录是否包含它,尽管我猜它应该。

编辑 1:请参阅@Ori 的精彩回答,了解 Microsoft 如何签署这些可执行文件的捆绑包。我将这个答案留在这里,因为我相信我关于乳清文件没有单独使用 Authenticode 签名的论点(VirusTotal 报告的内容)仍然有效。结束添加

我找不到微软的官方答案,但我有一个关于为什么这个程序(和其他类似的程序)没有直接签名的理论。

我检查了我的几台计算机和虚拟机,发现这个文件没有经过 Authenticode 签名,至少在我认识的情况下没有。我确实有这个文件的几个不同版本(可以追溯到 8 年前)。Windows 10(不同版本)的干净副本具有不同的版本和时间戳,因此微软似乎确实更新了此文件。

好的,那么微软为什么不签署这个文件呢?我认为答案在 rundll32.exe 的目的中找到了。Rundll32.exe 用于运行具有所需功能但没有运行它们的 exe 的 dll。您可以在这篇 How To Geek 文章中看到一些示例

Authenticode 签名强制执行身份,确定 UAC 提示中出现的内容并帮助确保文件不被篡改。如果作为进程一部分的 dll 请求提升,则 exe 的签名用于 UAC 提示,因为这是正在运行的进程,而不是 dll。

现在来做一些关于为什么文件没有签名的猜测工作。因为 rundll32.exe 执行未知的第 3 方代码作为其目的的一部分,所以签名对安全性不利。用户模式级别的代码可以请求 rundll32.exe 运行它们的 dll。如果 dll 请求提升,弹出窗口将显示 rundll32.exe,这是由 Microsoft 签名和验证的,要求管理员权限。如果一个未知作者的程序请求许可,这将使人们更有可能说是,这是它当前的行为。由于微软无法合理保证rundll32.exe运行的代码的功能或安全性,直接对其进行签名是很危险的。

编辑 1: @Ori 已经弄清楚 Windows 如何验证这些文件。最后一段仅用于历史。结束添加

现在这并不意味着 Windows 操作系统不验证 run32dll.exe。它可以(更多的猜测工作)比较文件的哈希以确定是否有东西被篡改。然后仅当它是有效文件时才执行它。

可能只是在 VirusTotal 的后端验证数字签名的工具由于新的或替代格式、算法或签名而无法识别签名。我只是尝试使用除 VT 之外的其他工具来分析二进制文件,最好是使用本地 Microsoft 和 Sysinternals 工具来进行签名验证。请参阅这些文章:

不然真的很可疑……