Windows 将一个进程放在一个沙箱中,使其危害最小
我希望这个概念能产生一个过程,这样:Windows 将一个进程放在一个沙箱中,使其危害最小,windows,linux,security,language-agnostic,macos,Windows,Linux,Security,Language Agnostic,Macos,我希望这个概念能产生一个过程,这样: 它只能访问某些库/API 它无法访问文件系统或仅访问特定部分 如果在其中运行恶意代码,它的危害最小 这个概念被称为沙箱或监狱 对于每个主要的操作系统(Windows、MacOSX和Linux)都需要这样做,而问题是概念性的(比如做什么,使用哪些API以及观察什么),而不是特定于语言的 回答要求 我真的想接受一个答案,给你20分。我不能接受我自己的答案,反正我还没有答案。因此,如果你真的希望你的答案被接受,请注意: 答案必须具体而完整 我的意思是,它不仅
- 它只能访问某些库/API
- 它无法访问文件系统或仅访问特定部分
- 如果在其中运行恶意代码,它的危害最小
- 答案必须具体而完整
- 我的意思是,它不仅仅是指向互联网上某些资源的指针。它必须至少总结资源对主题的描述
- 它可能包含也可能不包含示例代码,但如果包含,请用C编写
- 我不能接受一个2/3完整的答案,即使其中的2/3是完美的
- 这是家庭作业吗?没有
- 你为什么像问家庭作业一样问这个问题?如果你问一个特定的问题,你想得到一个特定的答案,你知道答案应该是什么样子,即使你不知道答案,这就是你得到的问题的风格
- 如果你知道它应该是什么样子,为什么要问?1) 因为我不知道所有的答案,因为在互联网上,没有一个地方能把这个问题的所有细节都放在一个地方。请同时阅读stackoverflow常见问题解答
- 为什么你的问题的主要部分是如何回答这个问题?因为没有人读FAQ
至于窗户,我不确定。如果有一种简单的方法来沙盒一个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