如何使用 .NET 以编程方式沙箱进程

2024-05-20

我计划设计一个系统,本质上允许用户在我的机器上运行 PHP、Ruby 等脚本代码。我想将它们放入沙箱中,以防止它们访问机器的关键方面。哪些 .NET API 可用于此目的?我计划从主流程创建一个子流程,并希望以编程方式从主流程中沙箱该子流程。谢谢。


设计(用户模式)沙箱是一项艰巨的挑战,需要深入了解底层操作系统(或者换句话说:使用现有解决方案可能比重新发明轮子更好)。

.NET 中现有的隔离级别(例如 AppDomains)不适合您的场景。您需要从较低的级别开始,并且可以考虑以下方法之一来运行应用程序并限制对主机的访问。

Windows完整性机制

运行限制访问系统的程序的一种简单方法是利用 Windows 完整性机制,这是方法之一,例如:保护模式下的 Internet Explorer 或 Microsoft Office 是隔离的。此机制并非旨在提供完全隔离的沙箱,但在基本情况下可能就足够了。文档states https://msdn.microsoft.com/en-us/library/bb625957.aspx:

Windows 完整性机制并非旨在用作应用程序沙箱。但是,它可以是应用程序开发人员用来限制不太可信的应用程序的行为的安全工具之一。

完整性机制主要限制写入权限,但它不会禁止或阻止任何更高级别的数据读取。

以最低完整性级别启动进程就像更改可执行映像的 ACL 一样简单here https://msdn.microsoft.com/en-us/library/bb625960.aspx然后启动程序:

  1. 设置完整性级别:

    icacls myprogram.exe /setintegritylevel Low
    
  2. 启动现在以最低完整性级别运行的程序(可以使用 Process Explorer 等工具看到):

    myprogram.exe
    

如链接文章中所述,您还可以通过编程方式启动完整性较低的新进程(不使用 .NET,而是通过 P/Invoking 到 Windows API)。本文还给出了如何设计低级程序才能工作的提示(例如哪些位置可写等)。

容器

Docker等容器解决方案通过添加一些操作系统级别的屏障来提供更高级别的隔离,但内核等一些资源仍然是共享的(从而带来一定的恶意代码逃逸沙箱的风险)。

虚拟化

虚拟化提供了更高级别的隔离:整个系统在隔离的虚拟机中运行,只能通过专用接口(例如开放的 TCP 端口)进行访问。虚拟化方法提供了最高的安全性,并且在大多数情况下,逃离虚拟机被认为是非常困难的(尽管虚拟机管理程序中可能存在漏洞,并且可能会使用某些相当复杂的攻击来利用漏洞)。

与容器的区别在于,您从一个几乎完全隔离的系统开始,在该系统中仅向主机系统开放特定的专用通信通道。相比之下,使用容器,您可以共享相同的系统,并根据需要建立屏障来隔离来宾。这样做的缺点是更容易忘记一些事情。

信息安全 Stackexchange 网站上的一篇文章进一步讨论了该问题:Docker 作为不受信任代码的沙箱 https://security.stackexchange.com/questions/107850/docker-as-a-sandbox-for-untrusted-code

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 .NET 以编程方式沙箱进程 的相关文章

  • 如何在不下载内容的情况下执行 GET 请求?

    我正在开发一个链接检查器 一般来说我可以执行HEAD请求 但是有些网站似乎禁用了这个动词 所以在失败时我还需要执行GET请求 仔细检查链接是否确实已失效 我使用以下代码作为我的链接测试器 public class ValidateResul
  • C#:DataSet.readXML( "filepath" ) 如何处理包含对象内对象内对象的 XML 文件?

    我有一个 xml 文件 格式如下
  • VS2017在nuget包中将“Build Action”设置为“Content”

    我创建我的nuget包在gitlab使用以下命令行 nuget pack Prop Configuration Release OutputDirectory nuget REPONAME APPNAME APPNAME csproj 如果
  • 生成Excel文件错误

    我在经典 ASP 中使用以下代码生成 Excel 文件 代码很简单并且有效 我在 Windows Vista x86 上的 IIS 7 0 下运行代码 两个问题 有一个奇怪的警告框 这是屏幕快照 http i27 tinypic com 2
  • ELMAH 将其数据保存在哪里?

    我刚刚安装了 ELMAH MVC 更多信息here http nuget org packages Elmah MVC 并且想知道其数据保存在哪里 我读到您可以选择设置数据库进行存储 但似乎默认安装使用 内存中 它是如何工作的 如果我回收应
  • WebClient读取错误页面的内容

    我有一个加载页面内容的应用程序 我使用 WebClient 类 即使服务器返回 404 500 等错误 我也需要检索内容 我需要这样的东西 WebClient wc new WebClient string pageContent try
  • 如何将pdf页面设置设置为打印属性对话框?

    大家好 我想知道如何设置 pdf 页面设置到打印属性对话框 例如 如果我的 PDF 页面设置为横向 则布局会自动显示横向而不是纵向 如果我的 PDF 页面设置为纵向 则布局会自动显示纵向 我在这个主题上做了很多研发 但没有找到任何满意的链接
  • 如何将字节块读入结构体

    我有一个需要处理的资源文件 它包含一组文件 首先 资源文件列出了其中包含的所有文件 以及一些其他数据 例如在此结构中 struct FileEntry byte Value1 char Filename 12 byte Value2 byt
  • 保护 REST 和 JSON

    我想利用 RESTful 架构构建提供 JSON 数据的 Web 服务 但我只想要我自己的客户端应用程序可以从我的网络服务请求 基本上 我的 Web 服务包含不供公众使用的敏感数据 但我想以这种方式构建它 以便我可以构建连接到我的 Web
  • 在VB6中等待进程退出后恢复窗口

    我在win7 64位操作系统中使用VB6 此应用程序是从 xp 迁移的 Me WindowState vbMinimized WaitForProcess Shell launchapp vbNormalFocus Me WindowSta
  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract
  • JavaScript 访问密码字段值是否被视为存在安全风险?

    如果安全 正确地存储密码是良好的风格和安全性 那么对于要求用户输入密码的网页来说不应该也是如此吗 考虑这个例子
  • 如何将 CSV 文件读入 .NET 数据表

    如何将 CSV 文件加载到System Data DataTable 根据CSV文件创建数据表 常规 ADO net 功能是否允许这样做 我一直在使用OleDb提供者 但是 如果您正在读取具有数值的行 但希望将它们视为文本 则会出现问题 但
  • 重写某些 .Net Framework 控件的绘制以更改其边框颜色?

    SCENARIO 我正在使用第三方 Windows 视觉主题 当我看到我的应用程序时 它看起来像这样 但是当我使用正常的Aero主题 它看起来到处都有可怕的白色边框 QUESTION 我知道应用程序中使用的配色方案取决于视觉风格 但是 我可
  • .NET 中严格浮点数学的库

    我有 Java 算法 计算及其单元测试 单元测试期望结果具有一定的精度 增量 现在我将算法移植到 NET 中 并希望使用相同的单元测试 我使用双数据类型 问题在于 Java 使用 strictfp 64 位 来执行 Math 类中的某些操作
  • 如何为从源文件编译的应用程序分配自定义图标?

    在我的程序中 我使用 CSharpCodeProvider 来从源文件编译另一个应用程序 我使用的代码如下 public static bool CompileExecutable String sourceName FileInfo so
  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默

随机推荐