gpt4 book ai didi

.net - .NET 程序集上的 AppLocker DLL 规则

转载 作者:行者123 更新时间:2023-12-04 15:39:42 24 4
gpt4 key购买 nike

我正在使用 AppLocker 来防止标准用户执行除我们签名的应用程序和一些必要的 Windows 文件之外的任何内容。

exe 和 dll 文件使用我们的证书使用 signtool.exe 进行签名,然后在 AppLocker 中我有发布者规则阻止用户运行任何未经我们签名的东西。

这行得通,但它不会阻止已签名的可执行文件加载未签名的 dll 文件,这似乎存在安全风险。我通过用未签名的版本替换所有 dll 进行测试,只留下签名的 exe,打开 dll 规则阻止任何未经我们签名的内容,应用程序运行得很好。 EventLog 没有显示任何潜在的 block (我在审核模式下打开了 dll 规则)。

我做了一些阅读,据我了解,其原因可能是这些不是“普通”(Win32) dll,而是在 CLR 中编译和执行的程序集,它绕过了 AppLocker dll 规则?

如果是这样,确保 dll 不被篡改的唯一方法似乎是进行程序集签名,为每个程序集赋予一个强名称,这将确保 exe 仅获取并运行这些特定的 dll .这是正确的吗?

有什么方法可以使 AppLocker dll 规则阻止由 CLR 编译和运行的 dll(程序集)?如果没有,那么签署程序集 dll 有什么意义吗?

更新:

感谢Maurizio用于查找此问题的原因,即 Microsoft 很可能刚刚破坏了 .NET 4.0 的 AppLocker,因为 dll 规则在 .NET 3.5 上工作正常。他联系了微软,后者刚刚 recommended using WDAC而不是 AppLocker...Microsoft 非常不负责任地像这样悄悄地破坏人们的安全策略。

最佳答案

我们也看到了这种行为。根据我的测试,它仅在加载 DLL 的 EXE 是使用 .NET 3.5 编译的情况下按预期工作。

这是我的测试:

  1. 我编写了一个简单的 C# 应用程序,它动态加载一个仅计算两个数字之和的 C# 库/dll。
  2. 针对 .NET 3.5 和 .NET 4.0+ 编译此应用程序 (LoadDLL.exe),并通过添加新的 AppLocker 规则允许它。
  3. Adder.dll(执行加法的库)没有添加到 applocker 规则中,所以我希望它在被 LoadDLL 加载时被阻止.exe

结果是用 .NET3.5 编译的 LoadDLL.exe 按预期工作 - 即阻止了 Adder.dll 的加载,而用 .NET4.0+ 编译的 LoadDLL.exe 工作得很好。

我认为引入 .NET4.0 后发生了一些变化,这使得 DLL 集合变得无用

关于.net - .NET 程序集上的 AppLocker DLL 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58268673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com