我正在寻找生成流程的概念,以便:
这个概念被称为沙箱或监狱。
每个主要操作系统(Windows,MacOSX和Linux)需要执行此,问题是概念性的(如何做,要使用哪些API以及使用哪些API观察而不是语言特定。
我真的想要接受答案,并为此给你20分。我不能接受我自己的答案,反正我还没有。因此,如果您真的希望接受您的答案,请注意:
答案 0 :(得分:14)
Mac OS X有一个代号为Seatbelt的沙箱设施。它的公共API记录在沙箱(7),sandbox_init(3)和相关的手册页中。公共API有些限制,但设施本身非常强大。虽然公共API只允许您从一些预定义的沙箱中进行选择(例如“禁止所有基于套接字的网络”),但您也可以使用功能更强大的底层实现,它允许您准确指定可用的操作系统资源。类似计划的语言。例如,以下是用于portmap的沙箱的摘录:
(allow process-exec (regex #"^/usr/sbin/portmap$"))
(allow file-read-data file-read-metadata (regex
#"^/etc"
#"^/usr/lib/.*\.dylib$"
#"^/var"
#"^/private/var/db/dyld/"
#"^/dev/urandom$"))
(allow file-write-data (regex
#"^/dev/dtracehelper$"))
您可以在/ usr / share / sandbox中看到系统使用的许多沙箱。使用sandbox-exec(1)命令很容易尝试使用沙箱。
对于Windows,您可能需要查看David LeBlanc’s “Practical Sandboxing” talk given at Black Hat USA 2007。 Windows本身没有内置的沙盒技术,因此所描述的技术利用了Windows 2000引入的一种称为SAFER的不完整机制。通过使用受限制的令牌,可以创建一个对操作系统资源具有有限访问权限的进程。
对于Linux,您可以研究复杂的SELinux机制: SELinux home, a HOWTO。例如,Red Hat使用它来强化某些产品中的某些系统服务。
答案 1 :(得分:7)
对于Windows,Google Chrome中有一个沙盒。您可能想要调查它。它使用类似自由BSD的许可证。
对于Linux来说,有一个好老的chroot或更复杂的http://plash.beasts.org/wiki/。
OS X,因为Leopard提供了类似SELinux的保护。
答案 2 :(得分:5)
网站codepad.prg有一个很好的"About"页面,介绍了如何安全地允许执行任何代码段。
代码执行由基于geordi的主管处理。策略是在ptrace下运行所有内容,不允许或忽略许多系统调用。编译器和最终可执行文件都在chroot jail中执行,具有严格的资源限制。主管是用Haskell编写的。
当您的应用程序是远程代码执行时,您必须预料到安全问题。我没有依赖chroot和ptrace主管,而是采取了一些额外的预防措施:
管理程序进程在虚拟机上运行,这些虚拟机具有防火墙,因此无法进行传出连接。
运行虚拟机的计算机也经过严密防火墙处理,并定期从源映像中恢复。
答案 3 :(得分:2)
FreeBSD具有jails的特定概念,Solaris具有containers。根据您的需求,这些可能有所帮助。
chroot jails可以帮助限制应用程序可以执行的操作(尽管任何具有root权限的应用程序都可以逃脱监狱),并且它们在大多数UNIXen上都可用,包括OS X.
至于Windows,我不确定。如果有一种简单的方法来沙盒化Windows应用程序,那么现在大多数都会更加安全,我敢肯定。
答案 4 :(得分:2)
在Windows(2000及更高版本)上,您可以使用Job对象来限制进程。
答案 5 :(得分:2)
如果您真的想要一种适用于所有这些平台的技术,而不是针对每个平台的单独解决方案,那么我认为您唯一的答案是为每个测试环境设置虚拟机。您可以随时还原到快照。
使用虚拟化的另一大优势是,您可以将所有测试环境与其客户操作系统放在同一个盒子上。
答案 6 :(得分:1)
答案 7 :(得分:0)
我不是这方面的专家,但我认为linux的标准答案是定义具有适当流程功能的SeLinux策略。
答案 8 :(得分:0)
通常任何虚拟专用服务器都可以:
Linux VServer http://linux-vserver.org/Welcome_to_Linux-VServer.org
Parallels Virtuozzo Containers http://www.parallels.com/products/pvc/
并且如前所述,FreeBSD和Solaris都有自己的实现。
喔。实际上我已经注意到你要求它在任何操作系统上工作。好吧,这可能有点复杂,因为我认为只需重用一些可以支持某种程度的沙盒的VM就可以了: