gpt4 book ai didi

c# - 沙盒 AppDomain 中的线程安全

转载 作者:可可西里 更新时间:2023-11-01 09:31:54 24 4
gpt4 key购买 nike

我有一个应用程序域来托管不受信任的代码/程序集。我用安全属性解决了所有安全问题,而且效果很好。不受信任的代码在专用线程上运行。 CLR 是 2.0。这就是我的AppDomainShell AppDomainSeed , Shell 在主域中运行,seed 是不受信任域中的受信任代理/助手。

我有兴趣限制创建新线程和更改优先级。目前,我不受信任的程序集可以设置 ThreadPriority.Highest 或通过创建 10k 线程来终止操作系统。有 SecurityPermissionFlag.ControlThread但这只会阻止像 Abort() 这样的高级操作。

我正在查看 Thread 类实现,对于那些简单的操作,它的 C# API 没有声明性安全性,其余实现是 native 的。

我想我可以使用一些 Win32 函数在操作系统级别禁止它。但是操作系统如何识别不受信任的线程/代码/程序集? SetThreadPrincipal()

有没有可能被滥用的 CLR API?我更喜欢无需安装且可移植到 Mono 的解决方案,:-/嗯。

欢迎任何其他想法。谢谢!

最佳答案

我正在考虑另一种解决方案。不可信程序集CIL的静态分析。我可以搜索所有方法、属性、构造函数。识别对类型的引用。如果我找到对 Thread 类型的引用,我将抛出安全异常并卸载程序集。

我非常喜欢 Jb Evain 的作品。他创造了 Mono Cecil ,但这是相当重量级的。他还起草了CIL reader ,仅使用 .NET 反射。

我创建了 Linq over reflection使用 CIL 阅读器。用法如下所示。


var myAssembly = typeof (Program).Assembly;
foreach (Type usedType in myAssembly.GetUsedTypes())
{
if (typeof (Thread).IsAssignableFrom(usedType) ||
typeof (ThreadPool).IsAssignableFrom(usedType) ||
typeof (ThreadPriority).IsAssignableFrom(usedType)
)
{
throw new SecurityException("Thread usage is banned here!");
}
}

关于c# - 沙盒 AppDomain 中的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1986965/

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