我正在寻找产生一个过程的概念:
它只能访问某些库/ API
它无法访问文件系统或仅访问特定部分
如果恶意代码在其中运行,它可以造成的伤害最小
这个概念被称为沙箱或监狱.
每个主要操作系统(Windows,MacOSX和Linux)都需要执行此操作,问题是概念性的(如何做,使用哪些API以及要观察的内容)而不是语言特定的.
我真的想接受一个答案并给你20分.我不能接受我自己的答案,反正我还没有.因此,如果您真的希望接受答案,请注意:
答案必须具体而完整
具体而言,我的意思是它更像是指向互联网上某些资源的指针.它必须至少总结资源对该主题的看法.
它可能包含也可能不包含示例代码,但如果确实如此,请用C语言编写
我不能接受2/3完成的答案,即使那里的2/3是完美的.
这是家庭作业吗?没有.
为什么这样问题就像家庭作业一样?如果你问一个具体问题,你希望得到一个明确的答案,你知道这个问题的答案应该怎么样子,即使你不知道的答案,这就是问题的你的风格.
如果你知道它应该是什么样的,你为什么这么问?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使用它来强化某些产品中的某些系统服务.
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使用它来强化某些产品中的某些系统服务.
对于Windows,Google Chrome中有一个沙盒.您可能想要调查它.它使用类似自由BSD的许可证.
对于Linux来说,有一个很好的老chroot或更复杂的http://plash.beasts.org/wiki/.
OS X,因为Leopard提供了类似SELinux的保护.
站点codepad.prg上有一个很好的“关于”页面,介绍了如何安全地执行任何代码段。
代码执行由基于geordi的主管处理。策略是在ptrace下运行所有内容,不允许或忽略许多系统调用。编译器和最终可执行文件都在具有严格资源限制的chroot监狱中执行。主管用Haskell编写。
当您的应用程序是远程代码执行时,您必须预期安全问题。我采取了一些额外的预防措施,而不仅仅是依靠chroot和ptrace主管:
主管进程在虚拟机上运行,这些虚拟机已进行防火墙保护,因此无法建立传出连接。
运行虚拟机的计算机也受到严格的防火墙保护,并定期从其源映像还原。