签名的.net程序集在加载时是否经过完全验证,以检查它们是否未被修改?

Ror*_*ory 3 .net security clr code-signing .net-assembly

我以前认为已经签名和/或强名称的.net程序集在加载时由CLR验证,这意味着某人无法编辑IL并且仍然具有有效的程序集.然后我听了这个伟大的Herding Code播客,其中Jon McCoy说并没有真正发生(播客中约12:47) - 也就是说,任何人都可以编辑IL并弄乱你的程序集,CLR也不会关心.我知道这听起来很奇怪,但他似乎知道他在说什么,所以也许只是因为我不确切地知道他所指的是什么情景.

有人可以解释CLR是否以及何时实际验证装配的全部内容以确保某人没有篡改IL?如果"签名"或"强命名"没有这样做,您需要什么过程才能使CLR正确检查程序集?

其他一些参考文献(对我来说还没有完全清楚 - 可能我只是有点慢):

use*_*618 5

这是Jon McCoy :)是的,强名称签名可以被绕过.为什么/如何 - >运行时仅检查强名称签名密钥/证书,但不散列DLL/EXE以匹配密钥.如果操作系统(Windows)将.NET Framework设置为打开强名称签名,那么它将会默认关闭.

FIX Ideas:关闭旁路的链接:http://msdn.microsoft.com/en-us/library/cc713694%28v=vs.110%29.aspx

还有一些保护系统会有一个已知的哈希来检查,但这可以删除.

您可以将其强制实施为IT策略并在Windows中实施.

是的:我的工具GrayWolf(在http://www.DigitalBodyGuard.com上免费)更改IL并将密钥从旧密钥移动到新的更改副本,密钥与它们所在的DLL/EXE的HASH不匹配但没有人检查:)

PS它会减慢启动时间以检查哈希