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

Flo*_*sch 23 language-agnostic linux windows security macos

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

  • 它只能访问某些库/ 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$"))
Run Code Online (Sandbox Code Playgroud)

您可以在/ usr/share/sandbox中看到系统使用的许多沙箱.通过使用sandbox-exec(1)命令可以轻松地试验沙箱.

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

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


Paw*_*dan 7

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

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

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


dbr*_*dbr 5

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

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

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

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

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


Dan*_*dey 3

FreeBSD 有特定的监狱概念,Solaris 有容器。根据您要寻找的内容,这些可能会有所帮助。

chroot 监狱可以帮助限制应用程序可以执行的操作(尽管任何具有 root 权限的应用程序都可以逃脱监狱),并且它们在大多数 UNIXen 上都可用,包括 OS X。

至于Windows,我不确定。我确信,如果有一种简单的方法来对 Windows 应用程序进行沙箱处理,那么大多数应用程序现在都会更加安全。