假设一个供应商使用AuthentiCode只是为了去掉黄色的UAC警告。为了避免每年购买新证书,供应商可以创建一个已签名的启动程序EXE,请求UAC特权,并启动项目的EXE文件。
除了供应商的程序可以在没有人注意到的情况下被破解这一事实之外,我还想知道以下两个问题:
那么,这个启动程序的后果是什么(即供应商负责,can是否会撤销他的证书?),AuthentiCode真的可以通过使用启动程序和/或未经检查的DLL导入而如此容易地被欺骗吗?
(*)启动程序是一种非常极端的情况;但是,几乎所有从DLL运行代码的签名可执行文件都可以用于执行恶意代码(在未签名/未检查的DLL中)。Afaik,静态链接的DLL文件不包含任何AuthentiCode检查,这样这些可执行文件就像启动程序EXE一样邪恶。
发布于 2016-01-18 04:20:56
当提升的进程(即通过UAC对话框的进程)启动另一个进程或加载DLL时,Windows实际上不会显示任何安全警告。这不是Authenticode的问题,因为Authenticode只是应用了一个签名。这可以被认为是Windows中信任模型的一个问题。
基本上,当用户在UAC对话框上单击Yes时,他们说他们完全信任即将运行的可执行文件,并希望它能够完全访问他们的PC。这包括加载任何DLL或启动任何EXE的能力。如果用户认为供应商的启动程序可能启动恶意可执行文件或容易受到DLL注入攻击,则应在UAC对话框中单击“否”。供应商可能没有签署恶意代码,但他们确实签署了易受攻击的代码,而且他们肯定要对此负责。
如果您是正在考虑编写这样一个启动程序的供应商,您可以在启动之前使您的启动程序验证可执行文件上的签名。拒绝在没有适当签名的情况下启动可执行文件将提供比您建议的Windows显示另一个UAC提示的更强的保护,用户可能会不经意地单击“是”。
最终,像Authenticode一样的数字签名只能用于验证代码的来源。它不能用于验证代码是否会做任何恶意的事情。
https://security.stackexchange.com/questions/103585
复制相似问题