【问题标题】:UNIX spawn sandboxed processUNIX 生成沙盒进程
【发布时间】:2020-09-26 10:36:00
【问题描述】:

在我的场景中,父进程(动态)生成一些机器代码,然后该代码应该由子进程执行。子进程不应该能够访问父资源(所以没有分叉),出于安全原因,它必须尽可能地受到限制,我想要这样的东西:

process_handle x;
give_memory_page_to_process(x, mempage); // allows x to access the page
/*some more pages for the child*/
/*remove the memory pages from the parent process*/
execute(x); // should create a process with just the given pages 

【问题讨论】:

  • 没有分叉?您还如何创建子进程?
  • 如果您需要确保子代码无法访问父代码的任何数据,目前最简单的方法是 exec() 一些琐碎的帮助程序,其唯一工作是加载和运行代码。您还必须关闭 fds 等等。另一方面,如果您不信任对父内存具有只读访问权限的子代码,您确定您完全信任它可以执行(具有进行系统调用等的全部能力)吗?

标签: c linux macos unix operating-system


【解决方案1】:

要设置一个空容器,您需要 fork() 然后让子 exec() 进入一个 empty 进程,然后您将写入该进程。 最简单的方法可能是让父级将其机器代码生成为 ELF(或其他)格式文件,并让子级关闭 fds 等......然后执行它。

由于初始子代(在 fork 之后)与父代相同,因此尚不存在安全问题。然后子进程将关闭它所有的 fds,可能 chroot()ing 到某个限制性的地方,父进程已将生成的代码放入其中。然后子进程 exec()s 生成代码。

如果您担心有人会攻击您 chrooted 目录中的可执行文件,为什么不担心他们会攻击父目录?相同的权限......

【讨论】:

    猜你喜欢
    • 2015-10-22
    • 2013-10-02
    • 2018-05-04
    • 2020-08-06
    • 2023-03-25
    • 2020-09-04
    • 2011-12-16
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多