当前位置: 首页 > 编程语言 > C#

没有强名称的代码签名是否允许您的应用程序被滥用?分享

时间:2023-04-10 23:30:00 C#

没有强命名的代码签名会让你的应用程序被滥用吗?试图了解authenticode代码签名和强命名。我是否认为如果我对引用某些dll(不是强名称)的exe进行代码签名,恶意用户可以替换我的DLL并以一种看起来是由我签名但正在运行他们的代码的方式分发应用程序?假设这是真的,看起来你真的不想在没有强烈命名整个东西的情况下签署一个.NET应用程序,或者你让人们能够在你编写的应用程序的幌子下执行代码?我不确定的原因是我在网上找到的所有文章(包括关于使用SN+Authenticode的MSDN文档)似乎都没有提到这一点,这似乎是一个相当重要的理解点(如果我理解正确)?我是否认为如果我对引用某些dll(不是强名称)的exe进行代码签名,恶意用户可以替换我的DLL并以一种看起来是由我签名但正在运行他们的代码的方式分发应用程序?是的,如果其余的DLL仅被签名且没有强命名,则可以在.NET不抛出异常的情况下替换它们。您可以在exe内部验证DLL是否由与exe相同的密钥签名。这些方法都无法阻止他人替换您的DLL或EXE。假设这是真的,看起来你真的不想在没有强烈命名整个东西的情况下签署一个.NET应用程序,或者你让人们能够在你编写的应用程序的幌子下执行代码?总的来说,我会认为这是“最佳实践”,但你又没有阻止任何事情。一旦用户有权更改本地系统上的文件,您就无法阻止他们进行恶意操作。有几种混淆技术可以将完整的.NET项目构建到单个exe中,这可能最终成为“最安全”的方法,但仍然容易被篡改。真正的问题是你想阻止他们做什么?我的意思是,为什么有人会对替换您的DLL感兴趣?他们希望实现什么,他们的目标是什么?如果您试图阻止某人从您所在的流程中读取敏感信息,那将是一条漫长而艰难的道路。假设恶意方可以完全访问您的源代码和您的进程使用的每条信息,因为他们可以访问。假设他们可以随意替换全部或部分代码,因为他们可以。更新因此,绑定重定向仅适用于具有相同密钥的强名称程序集,从而保护您免受更改的DLL的影响?正确,除了上述例外情况,代码注入仍然可以通过多种方式完成。...回到最初的问题,没有强命名的代码签名是否会破坏代码签名的意义?并不真地。代码签名(非强命名)有两个不同的目的:验证。验证软件的作者是谁。正直。验证软件自签名后未被篡改。通常,这仅在安装期间进行身份验证和身份验证。这就是我们签署setup.exe以确保客户收到我们未修改的安装程序的原因。系统将提示您“您信任XXXX公司”,从而授权经过身份验证/签名的安装程序。安装后,操作系统几乎没有内置代码签名使用(除了驱动程序和其他一些不起眼的情况)。另一方面,强命名的目的与它存在的目的完全不同。它完全关注应用程序的“完整性”。没有证书,没有签名机构(CA)来验证它,没有信息供用户显示以供他们确认,操作系统也没有办法验证它将要运行的可执行文件。.NETFramework对很多东西使用强名称,所有这些我都粗略地归类为应用程序完整性:dll/exe的内容有一个签名的散列,所以它不能被篡改。加载依赖项时,每个引用都必须经过强命名和验证。可以在GAC中或使用发布者策略注册程序集。可以生成本机映像以生成程序集IL的编译映像。我敢肯定这里还有其他事情要做,但这些是我所知道的主要用途。签名和强命名的最佳实践*注意:代码签名在某些情况下对DLL很有用,例如标记为“安全”并嵌入浏览器中的COM对象应该像可执行文件一样进行签名和强命名。在不加载程序集或反映其属性的情况下从外部验证依赖项时,代码签名也很有用。一旦有人可以替换dll或在您的机器上运行代码,您就没有太多的安全保障了。在我的例子中,所有Dll都是单独签名的代码。我的代码拒绝下载未签名的Dll作为自我更新的一部分。但是,在我的系统上以我的完整性级别或更高级别运行的任何应用程序(在>=VistaWindows的情况下)仍然可以使用CreateRemoteThread等(http://www.codeguru.com/Cpp/WP)注入dll进入我的exe/dll/article.php/c105)但再次假设有人可以将外部代码输入系统是困难的部分。剩下的就简单了。您还必须记住,在不部署应用程序其余部分的情况下升级dll时,代码签名通常会带来很多麻烦。这就是为什么许多流行的图书馆在寻找相同的东西并阅读了很多东西之后并没有强烈命名dll的原因。我终于可以对你的问题说,是的,如果应用程序要进行数字签名,依赖项的强名称是必须的。如果您的依赖项没有强名称,请假设。他们被替换了。您的应用程序将毫无问题地加载它们。用户将看到“已验证发布者:您的姓名”对话框。虽然可执行文件不受影响,但依赖项已更改。问题不在于该用户,而在于分发具有更改的依赖项的包,并且每个人都看到你的名字。以上是C#学习教程:没有强命名的代码签名会让你的应用被滥用吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: