Articles of 沙箱

Linux ptrace如何不安全或包含竞争条件?

我想通过ptrace()开始一个进程,并且所有的subprocess创build一个沙盒(包括孙辈等)。 ptrace()父进程,即主pipe。 将是一个简单的C或Python程序,从概念上讲,它将限制文件系统访问(基于path名和访问方向(读取或写入)和套接字访问(例如,不允许套接字创build))。 我应该注意什么,以便ptrace() d进程及其subprocess(recursion)不能绕过沙箱? 在fork()时间,主pipe应该做什么特殊的事情来避免竞争? 有没有可能从subprocess中读取例如rename()的文件名参数而没有竞争条件? 这是我已经计划要做的事情: PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE在fork()时避免(某些)种族PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE 默认情况下禁止所有的系统调用,并组成允许的系统调用的白名单 确保*at()系统调用变体(如openat )得到了适当的保护 还有什么我应该注意的?

防止应用程序在服务器端引入有害更改

这只是我在PHP中的一个小小的爱好项目。 我使用0sites.org服务器(Linux操作系统)。 我基本上是尝试模仿http : //www.codepad.org,http://www.ideone.com的function。 我正在尝试为一些语言提供在线编译器/解释器。 到目前为止,我可以使用PHP exec(..)编译/运行这些应用程序,但是我真的不确定如何去除有害的函数调用,如C / C ++ system(..) 。 此外,我不知道如何防止任何networking访问。 我也计划添加更多的语言。 要实现每种语言特有的东西是很困难的。 我想知道是否有办法在更一般的层面上阻止事物。 我曾经想过手动parsing代码,并注释掉有问题的代码行。 但是由于通常有不止一种方式来做事情,这可以被打破。 😛 任何想法/build议/指针? 我将非常感激同样的。 🙂 (PS:这只是一个业余爱好项目,我只想尽可能地使它更专业。)

我如何开始使用libsandbox

我试图写一个简单的判断,将编译和执行用户提交的c文件。 我在stackoverflow上find了libsandbox和一个问题 。 我已经安装了Python模块,并按照说明我试图运行一个用C编写的hello世界程序 ➜ sandbox git:(V_0_3_x) ✗ ./hello Hello World% ➜ sandbox git:(V_0_3_x) ✗ python sample2.py hello result: RF cpu: 2ms mem: 288kB 正如你所看到的,当我在沙箱中运行程序时,我没有得到任何输出。 如果有人能告诉我如何正确使用它,那将是非常好的。

如何禁用套接字创build的Linux进程,沙盒?

我正在考虑几个select沙盒Linux进程。 在CLONE_NEWNET (等)中使用clone()是其中一个选项。 CLONE_NEWNET确保沙盒进程无法build立或接受真实的networking连接。 但是我想完全禁用这个进程的套接字,甚至bind()到0.0.0.0任何端口,并绑定到一个Unix的doman套接字(甚至匿名)。 我想这样做是为了防止进程通过绑定到数千个端口来使用太多的内核资源。 我怎么做? 一般来说,我对许多沙盒方法感兴趣(也就是那些由Linux内核提供的方法和由ptrace()执行的方法),但在这个问题中,我只关心沙箱方法的套接字创build方面(如果你build议一个沙盒的方法,也请解释如何防止套接字的创build),我不感兴趣的方法需要内核修补或涉及加载一个内核模块不属于Ubuntu Lucid默认二进制内核包,或这会影响系统上的每个进程。

在Linux上运行可执行文件最安全的方法是什么?

我试图运行一个程序从一个未知来源的C代码编译。 我想确保程序不会伤害我的系统。 例如,程序可能有类似system("rm -rf /")的源代码,除非代码被彻底检查,否则这是不可检测的。 我想到了以下两种方法 在像VMWare这样的虚拟机内运行它 在linux上构build一个Windows EXE文件,然后在wine上运行 两者都不是非常优雅的解决scheme,我不能自动化他们。 而且在1的情况下,可能会损害虚拟机。 任何帮助,将不胜感激。 我想用我们可以称之为“沙箱”的方式运行程序。

在我的服务器上运行其他人代码(沙箱)的安全方式?

我想做一个web服务,在本地运行其他人的代码…当然,我想限制他们的代码访问某些“沙箱”目录,他们将无法连接到我的服务器的其他部分(数据库,主networking服务器等) 什么是最好的办法呢? 运行VMware / Virtualbox: (+)我认为它是安全的,即使有人设法“黑客”..他们只是黑客客机 (+)会限制进程使用的CPU和内存 (+)易于设置..只需创build虚拟机 ( – )很难将沙箱目录从主机“连接”到客户机 ( – )浪费额外的内存和CPU来pipe理虚拟机 运行低于等级的用户: (+)不会浪费额外的资源 (+)沙箱目录只是一个普通的目录 (?)不能限制CPU和内存? (?)不知道它是否足够安全… 任何其他方式? 运行Fedora Core 8的服务器,用Java和C ++编写的“其他”代码

在Linux中沙盒

我想创build一个Web应用程序,允许用户上传一些C代码,并查看其执行结果(代码将在服务器上编译)。 用户不信任,这显然有一些巨大的安全隐患。 所以我需要为应用程序创build一些沙箱。 在最基本的层面上,我想限制对某些指定目录的文件系统的访问。 我不能直接使用chroot jail,因为web应用程序没有作为特权用户运行。 我想一个设置监狱suid可执行文件将是一个选项。 上传的程序会比较小,所以应该快速执行(最多几秒钟)。 因此,我可以在预设超时后终止进程,但是如何确保它不会产生新进程? 或者如果我不能,杀死整个pgid一个可靠的方法? 什么是最好的方式去做这件事 – 除了“不要做这件事”? :)还有什么其他明显的安全问题,我错过了? FWIW,networking应用程序将用Python编写。

Windows平台是否有一个轻量级的可编程Sandbox API?

要在家中运行不可信的代码,我使用一个VMWare虚拟机。 我希望find一个用于运行不受信任的应用程序的备用轻量级沙箱API,而不需要安装VMWare或任何其他types的terminal用户虚拟化工具。 ( 编辑:我不希望它主持一个操作系统 – 我希望它运行不受信任的应用程序)。 理想情况下,沙盒将(或可以做成)透明,以便在沙箱中运行的应用程序不显示任何额外的镶边或特征。 (不要他们在Mac上的Parallels中这样做) 我的Windows .NET开发人员希望使用API​​,而不是启动特殊的GUI,我可以为它编写脚本。 这就好比谷歌Chromenetworking浏览器如何将自己的技术包含在从互联网运行的沙盒脚本中来保护系统。 Google不需要在他们的浏览器上分发VMWare,但是他们可以实现应用程序的沙盒安全。 编辑: 寻找像Google Chrome那样的轻量级function,包含极其受限的文件/networking/ UI访问权限,低权限等function。不寻找运行/托pipe自己的操作系统。