我正在使用 AppLocker 来防止标准用户执行除我们签名的应用程序和一些必要的 Windows 文件之外的任何内容。
exe 和 dll 文件使用我们的证书进行签名signtool.exe
,然后在 AppLocker 中我有发布者规则,阻止用户运行任何未经我们签名的内容。
这行得通,但它不会阻止已签名的可执行文件加载未签名的 dll 文件,这似乎存在安全风险。我通过用未签名版本替换所有 dll 进行测试,只留下签名的 exe,打开阻止任何未经我们签名的内容的 dll 规则,并且应用程序运行得很好。EventLog 没有显示任何潜在的块(我在审核模式下打开了 dll 规则)。
我做了一些阅读,据我了解,其原因可能是这些不是“正常”(Win32)dll,而是在 CLR 中编译和执行的程序集,它绕过了 AppLocker dll 规则?
如果是这种情况,似乎确保 dll 不被篡改的唯一方法是进行程序集签名,给每个程序集一个强名称,这将确保 exe 仅获取并运行这些特定的 dll。这个对吗?
有没有办法让 AppLocker dll 规则阻止由 CLR 编译和运行的 dll(程序集)?如果没有,那么甚至签署程序集 dll 有什么意义吗?
更新:
感谢Maurizio找到了这个问题的原因,因为微软很可能刚刚破坏了 .NET 4.0 的 AppLocker,因为 dll 规则在 .NET 3.5 上运行良好。他联系了微软,后者只是建议使用 WDAC而不是 AppLocker... 微软如此不负责任地悄悄破坏人们的安全策略。