如何在托管服务中监视,管理和运行不受信任的第三方代码?

时间:2009-04-28 01:24:23

标签: security sandbox

假设我正在运行希望允许第三方客户端编写的插件的托管服务。

也许是提供基础设施但允许客户开发自己的游戏裁判的游戏服务提供商。或者,一个编码竞争网站,允许编码人员提交代码作为解决某些编码问题的代码。

您如何强化/锁定/沙箱此用户代码对打算运行它的服务器造成潜在危害?

您将如何监控和限制资源使用(主要是CPU,内存)?

This is a good start适用于Python,但我想知道这里是否有人可以分享更多具体经验,无论语言(Python,Lua,Ruby等)。

5 个答案:

答案 0 :(得分:2)

RestrictedPython(显示在您提供的链接中)看起来很有希望。然而,我不能说我真的试图做过这样的事情。

另一个可行的选择是构建最小的Linux发行版,然后在虚拟化环境中为每个用户复制它。使用虚拟机的监视机制通过在资源达到特定级别时挂起VM来限制CPU和内存使用。如果您将发行版构建得足够小,那么VM本身对资源的影响非常小,但我想你仍然需要相当大量的RAM来实现这样的解决方案(只是为了安全起见) )。

只需2美分。不过,我不是Python专家。

答案 1 :(得分:1)

It's probably impossible to be 100% secure,但chroot'ing是一个好的开始。我在chroot的jails中运行的服务器上使用了几个脚本。一个剧本是攻击的受害者(我忽视了一个相当聪明的漏洞 - 哎呀!)虽然渗透者破坏了剧本,但监狱却阻止他们进行任何进一步的破坏。

如果您要使用最小的python选项,请查看Minimal Python

答案 2 :(得分:0)

您可能希望执行以下操作:

  1. 编译传入的代码以挑选所有import语句并限制可导入的内容。

  2. 同时检查_import_reload功能的使用情况。

  3. 为这些模块定义一个API,允许它们作为一个单独的进程运行,包含在您提供的轻量级WSGI服务器中。将它们作为子进程分叉,并通过您的服务器API进行交互。如果它们崩溃或挂起,您将通过超时检测到这一点。

答案 3 :(得分:0)

Lua拥有迄今为止我见过的最好的沙盒和看台。我的主机语言是Python。因此,我决定选择Lunatic Python

答案 4 :(得分:0)

FWIW,Apache/mod_wsgi version 3.0能够在chroot环境中运行其守护进程模式进程。

如果只想尝试保护主操作系统,那么这是能够做到这一点的一个可能的组成部分。

如果您还想阻止用户干扰其他用户代码,并且可以有任意数量的用户可以动态更改,那么虽然Apache / mod_wsgi还没有动态守护程序进程组和相反,它依赖于静态配置。