当前位置:  开发笔记 > 运维 > 正文

将进程放在沙箱中,它可以造成最小的伤害

如何解决《将进程放在沙箱中,它可以造成最小的伤害》经验,为你挑选了3个好方法。

我正在寻找产生一个过程的概念:

它只能访问某些库/ API

它无法访问文件系统或仅访问特定部分

如果恶意代码在其中运行,它可以造成的伤害最小

这个概念被称为沙箱或监狱.

每个主要操作系统(Windows,MacOSX和Linux)都需要执行此操作,问题是概念性的(如何做,使用哪些API以及要观察的内容)而不是语言特定的.

回答要求

真的想接受一个答案并给你20分.我不能接受我自己的答案,反正我还没有.因此,如果您真的希望接受答案,请注意:

答案必须具体而完整

具体而言,我的意思是它更像是指向互联网上某些资源的指针.它必须至少总结资源对该主题的看法.

它可能包含也可能不包含示例代码,但如果确实如此,请用C语言编写

我不能接受2/3完成的答案,即使那里的2/3是完美的.

这个问题FAQ

这是家庭作业吗?没有.

为什么这样问题就像家庭作业一样?如果你问一个具体问题,你希望得到一个明确的答案,你知道这个问题的答案应该怎么样子,即使你不知道答案,这就是问题的你的风格.

如果你知道它应该是什么样的,你为什么这么问?1)因为我不知道所有的答案2)因为在互联网上没有一个地方在一个地方包含这个问题的所有细节.另请阅读stackoverflow FAQ

为什么问题的主要部分是如何回答这个问题?因为没有人阅读常见问题.

小智.. 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在Black Hat USA 2007上发表的"实用沙盒"演讲.Windows本身没有内置的沙盒技术,因此所描述的技术利用了Windows 2000引入的一种称为SAFER的不完整机制.通过使用受限令牌,可以创建对操作系统资源具有有限访问权限的进程.

对于Linux,您可能会研究复杂的SELinux机制: SELinux home, 一个HOWTO.例如,Red Hat使用它来强化某些产品中的某些系统服务.



1> 小智..:

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在Black Hat USA 2007上发表的"实用沙盒"演讲.Windows本身没有内置的沙盒技术,因此所描述的技术利用了Windows 2000引入的一种称为SAFER的不完整机制.通过使用受限令牌,可以创建对操作系统资源具有有限访问权限的进程.

对于Linux,您可能会研究复杂的SELinux机制: SELinux home, 一个HOWTO.例如,Red Hat使用它来强化某些产品中的某些系统服务.



2> Paweł Hajdan..:

对于Windows,Google Chrome中有一个沙盒.您可能想要调查它.它使用类似自由BSD的许可证.

对于Linux来说,有一个很好的老chroot或更复杂的http://plash.beasts.org/wiki/.

OS X,因为Leopard提供了类似SELinux的保护.



3> dbr..:

站点codepad.prg上有一个很好的“关于”页面,介绍了如何安全地执行任何代码段。

代码执行由基于geordi的主管处理。策略是在ptrace下运行所有​​内容,不允许或忽略许多系统调用。编译器和最终可执行文件都在具有严格资源限制的chroot监狱中执行。主管用Haskell编写。

当您的应用程序是远程代码执行时,您必须预期安全问题。我采取了一些额外的预防措施,而不仅仅是依靠chroot和ptrace主管:

主管进程在虚拟机上运行,​​这些虚拟机已进行防火墙保护,因此无法建立传出连接。

运行虚拟机的计算机也受到严格的防火墙保护,并定期从其源映像还原。

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有