【发布时间】:2020-02-04 16:44:00
【问题描述】:
我正在使用 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 3.5 上的 dll 规则工作正常,微软很可能刚刚破坏了 .NET 4.0 的 AppLocker。他联系了微软,后者只是 recommended using WDAC 而不是 AppLocker……微软如此不负责任地悄悄破坏人们的安全政策。
【问题讨论】:
-
是的,使用强名称对程序集进行签名可以帮助解决您的问题。另外,看看这个article它可能对你有帮助
-
@PavelAnikhouski 谢谢你的链接!我实际上想知道在阅读程序集签名时是否可以禁用绕过功能。
标签: .net dll clr signing applocker