如何使用.NET编程编制一个过程



我计划设计一个系统,该系统基本上允许用户在我的计算机上运行PHP,Ruby等脚本代码。我想通过访问机器的关键方面来打磨他们。什么.NET API可以用于此?我计划从主要过程中创建一个子过程,并希望从主过程中以编程为单位的子过程。谢谢。

设计一个(用户模式)沙盒是一个困难的挑战,需要对基础操作系统的深入了解(或换句话说:使用现有解决方案可能比重复使用优于发明轮子)。

在.NET(例如AppDomains)中出现的隔离级别不符合您的情况。您需要从较低级别开始,并可能考虑以下方法之一,以限制对主机的访问。

Windows完整性机制

运行对系统限制访问程序的程序的简单方法是使用Windows Integrity机制,这是例如以保护模式下的Internet Explorer或Microsoft Office是隔离的。该机制并非旨在提供完全隔离的沙箱,而是在基本情况下足够。文档指出:

Windows的完整性机制不是作为应用程序沙盒。但是,它可以是应用程序开发人员用来限制不值得信赖应用程序的行为的安全工具之一。

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

以最低的完整性级别启动过程与此处descibred更改可执行映像的ACL一样容易,然后启动程序:

  1. 设置完整性级别:

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

    myprogram.exe
    

如链接的文章所述,您还可以通过编程方式启动一个新的过程(不使用.NET,而是通过P/调用Windows API)。本文还提供了有关如何设计低级程序以工作的提示(例如,哪些位置是可写的等)。

容器

诸如Docker之类的容器解决方案提供了更高的隔离水平,这是通过添加一些OS级障碍来实现的,但是仍然共享了一些内核等资源(从而带来某些恶意代码逃脱沙箱的风险)。

虚拟化

虚拟化提供了更高级别的隔离水平:整个系统以隔离的VM运行,只能通过专用接口(例如开放的TCP端口)访问。虚拟化方法提供了最高的安全性,并且在大多数情况下可以将VM逃脱足够困难(尽管该管理程序中的漏洞可能存在,并且可以使用某些相当复杂的攻击)。

与容器的不同之处在于,您从几乎完全隔离的系统开始,只能打开特定的专用通信渠道,向主机系统打开。相比之下,使用容器,您可以共享相同的系统并根据需要建立障碍物来隔离客人。这有一个缺点,即更容易忘记一些东西。

在信息安全性stackexchange网站上的帖子中进一步讨论了问题: Docker作为不信任代码的沙箱

最新更新