我正在考虑沙箱的设计,它能够执行任意的、未经修改的、不受信任的二进制文件。目标是实现一个应用程序。
不像Google的沙箱,它必须提供Windows所不能提供的安全机制所不能提供的额外隔离。但是,它也应该能够在一台物理机器上运行大量的沙箱,所以一个完整的VM是不可能的。
它应该是这样工作的:由不受信任的代码发出的任何系统调用都应该首先被沙箱代码拦截,以便在传递给系统之前阻止或修改它。如果方便的话,沙箱还应该能够挂起高级API。不受信任的代码不应该能够与沙箱代码(包括它的导入库)和数据(它是堆栈和堆)进行调整。但是,沙箱代码应该能够完全访问沙箱代码的地址空间。
考虑到这些约束,如果沙箱包含尽可能少的内核模式代码(因为安全性和可测试性方面的考虑),它将尽可能简单(因此不会像二进制翻译这样的特技),沙箱代码将运行得相当快。
沙箱将在我自己的服务器上运行,因此使用底层操作系统进行回火是可以接受的,不同版本的Windows之间的可移植性也不是很难。目标体系结构是x86 - 64位支持并不重要,因此允许使用分段。但是,它应该能够在VM中运行;因此,如果可能的话,不存在硬件虚拟化(VT或相当于AMD的硬件虚拟化)。
您将如何实现这样的沙箱?像这样的沙箱设计有记录吗?我是否忽略了一些重要的问题?鉴于这些要求,您可能已经有一个合理的想法,什么样的设计在我的想法,但我是开放的任何想法。
编辑:目标是提供一个应用程序虚拟化层(参见http://en.wikipedia.org/wiki/Application_虚拟化),虚拟化应用程序无法突破这一层。
发布于 2013-05-15 20:38:31
我刚刚找到了,它是一个用于windows的开源沙箱实现:
http://static.usenix.org/events/vee06/full_文件/p24-Yu.pdf
http://sourceforge.net/projects/fvm-rni/
同样有趣的是沙丘:
http://dune.scs.stanford.edu/
它实现了一个概念验证沙箱,就像我在linux下使用VT描述的那样(不幸的是,这意味着它不能在大多数虚拟机下工作)。
发布于 2013-05-15 16:56:16
您的计划基于错误的假设,即您可以通过对系统调用进行某种筛选来识别“不良”行为。Windows充满了bug、隐藏的特性和未公开的依赖项。一旦您将控制传递给其他您没有提供的代码,您就无法保证它只做您认可的事情。
https://security.stackexchange.com/questions/35964
复制相似问题