Windows 将一个进程放在一个沙箱中,使其危害最小

Windows 将一个进程放在一个沙箱中,使其危害最小,windows,linux,security,language-agnostic,macos,Windows,Linux,Security,Language Agnostic,Macos,我希望这个概念能产生一个过程,这样: 它只能访问某些库/API 它无法访问文件系统或仅访问特定部分 如果在其中运行恶意代码,它的危害最小 这个概念被称为沙箱或监狱 对于每个主要的操作系统(Windows、MacOSX和Linux)都需要这样做,而问题是概念性的(比如做什么,使用哪些API以及观察什么),而不是特定于语言的 回答要求 我真的想接受一个答案,给你20分。我不能接受我自己的答案,反正我还没有答案。因此,如果你真的希望你的答案被接受,请注意: 答案必须具体而完整 我的意思是,它不仅

我希望这个概念能产生一个过程,这样:

  • 它只能访问某些库/API
  • 它无法访问文件系统或仅访问特定部分
  • 如果在其中运行恶意代码,它的危害最小
这个概念被称为沙箱或监狱

对于每个主要的操作系统(Windows、MacOSX和Linux)都需要这样做,而问题是概念性的(比如做什么,使用哪些API以及观察什么),而不是特定于语言的

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

  • 答案必须具体而完整
  • 我的意思是,它不仅仅是指向互联网上某些资源的指针。它必须至少总结资源对主题的描述
  • 它可能包含也可能不包含示例代码,但如果包含,请用C编写
  • 我不能接受一个2/3完整的答案,即使其中的2/3是完美的
此问题常见问题解答
  • 这是家庭作业吗?没有
  • 你为什么像问家庭作业一样问这个问题?如果你问一个特定的问题,你想得到一个特定的答案,你知道答案应该是什么样子,即使你不知道答案,这就是你得到的问题的风格
  • 如果你知道它应该是什么样子,为什么要问?1) 因为我不知道所有的答案,因为在互联网上,没有一个地方能把这个问题的所有细节都放在一个地方。请同时阅读stackoverflow常见问题解答
  • 为什么你的问题的主要部分是如何回答这个问题?因为没有人读FAQ

FreeBSD有特定的概念,Solaris有。取决于你在寻找什么,这些可能会有所帮助

chroot-jail有助于限制应用程序的功能(尽管任何具有root权限的应用程序都可以越狱),而且它们在大多数UNIXen上都可用,包括OSX


至于窗户,我不确定。如果有一种简单的方法来沙盒一个Windows应用程序,我敢肯定,现在大多数应用程序都会更加安全。

对于Windows,Google Chrome中有一个沙盒。你可能想调查一下。它使用类似BSD的许可证

对于Linux,将有好的旧chroot或更复杂的chroot

因为Leopard有一些类似SELinux的保护可用。

对于Linux,有。不幸的是,该项目有点停顿。

另一种沙箱替代方法是使用虚拟化。

在windows(2000及更高版本)上,您可以使用作业对象来限制进程。

Mac OS X有一个沙箱设施,代号为SEART BELT。它的公共API记录在sandbox(7)、sandbox_init(3)和相关手册页面中。公共API有些有限,但该功能本身非常强大。虽然公共API只允许您从一些预定义的沙盒中进行选择(例如“禁止所有基于套接字的网络”),但您也可以使用更强大的底层实现,它允许您通过类似Scheme的语言精确指定可用的操作系统资源。例如,下面是用于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中看到系统使用的许多沙盒。使用sandboxexec(1)命令可以很容易地试验沙盒

对于Windows,您可能需要查看。Windows本身没有内置的沙箱技术,因此所描述的技术利用了Windows 2000引入的一种称为SAFER的不完整机制。通过使用受限令牌,可以创建对操作系统资源访问受限的进程

对于Linux,您可以研究复杂的SELinux机制: , . 例如,Red Hat使用它来强化其某些产品中的某些系统服务。

该网站有一个很好的页面,介绍如何安全地允许执行任何代码片段

代码的执行由主管基于。策略是在ptrace下运行一切,许多系统调用被禁止或忽略。编译器和最终可执行文件都是在chroot监狱中执行的,具有严格的资源限制。主管是用哈斯凯尔语写的

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

  • 监控进程在虚拟机上运行,虚拟机通过防火墙连接,因此无法进行传出连接

  • 运行虚拟机的机器也会受到严格的防火墙保护,并定期从其源映像恢复


我不是这方面的专家,但我认为linux的标准答案是定义一个具有适当功能的SeLinux策略

如果你真的想要一种能在所有这些平台上工作的技术,而不是为每个平台提供单独的解决方案,那么我认为你唯一的答案就是为每个测试环境设置一个虚拟机。您可以随时恢复回快照


使用虚拟化的另一大优势是,您可以将所有测试环境及其来宾操作系统都放在同一个机箱中

通常,任何虚拟专用服务器都会执行以下操作:

Linux虚拟服务器

与Virtuozzo容器平行

正如前面提到的,FreeBSD和Solaris有自己的实现

哦。事实上,我注意到你要求它在任何操作系统上工作。好吧,这可能有点复杂,因为我认为较少的工作只是重用一些能够支持这样做的VM