在计算机安全领域,沙箱(Sandbox)是一种程序的隔离运行机制,其目的是限制不可信进程或不可信代码运行时的访问权限。沙箱技术经常被用于执行未经测试的或不可信的客户程序。为了阻止不可信程序可能破坏系统程序或破坏其它用户程序的运行,沙箱技术通过为不可信客户程序提供虚拟化的内存、文件系统、网络等资源,而这种虚拟化手段对客户程序来说是透明的。由于沙箱里的资源被虚拟化(或被间接化),所以沙箱里的不可信程序的恶意行为可以被限制在沙箱中,或者在沙箱里只允许执行在白名单里规定的有限的API操作。
沙箱技术一直是系统安全领域的挑战,不存在说哪一种方案是足够安全的。沙箱技术方案通常是需要结合多种系统安全技术来实现,采用防御纵深(Defence in Depth)的设计原则,筑建多道防御屏障,尽可能地将安全风险将为最低。比如,Google App Engine系统就是一个较好的实现,用户编写的java code会在Java沙箱中运行。但除了Java Sandbox之外,底层还有Linux沙箱。也就是说,即使用户(也许是一个比较资深的黑客)已经掌握了Java沙箱的0-day漏洞,攻破了Java沙箱,但也不会给系统造成影响,因为底层还有Linux沙箱。除非该用户同时还掌握了Linux的0-day漏洞,能以很快的速度突破Linux沙箱,使自己从一个普通uid提权到root,否则我们不能说攻击成功。
Hypervisor技术天然地就可以用于构建虚拟机沙箱,比如基于Xen或KVM的虚拟机沙箱已经开始在某些云计算平台中使用起来。但考虑到虚拟机沙箱的性能开销,它并不能满足对性能敏感的应用场景。因此,这里我们主要讨论如何利用Linux kernel自身所提供的安全功能来构建有效的轻量级沙箱技术。(关于重量级的虚拟机沙箱,我以后再另作介绍&#
沙箱技术一直是系统安全领域的挑战,不存在说哪一种方案是足够安全的。沙箱技术方案通常是需要结合多种系统安全技术来实现,采用防御纵深(Defence in Depth)的设计原则,筑建多道防御屏障,尽可能地将安全风险将为最低。比如,Google App Engine系统就是一个较好的实现,用户编写的java code会在Java沙箱中运行。但除了Java Sandbox之外,底层还有Linux沙箱。也就是说,即使用户(也许是一个比较资深的黑客)已经掌握了Java沙箱的0-day漏洞,攻破了Java沙箱,但也不会给系统造成影响,因为底层还有Linux沙箱。除非该用户同时还掌握了Linux的0-day漏洞,能以很快的速度突破Linux沙箱,使自己从一个普通uid提权到root,否则我们不能说攻击成功。
Hypervisor技术天然地就可以用于构建虚拟机沙箱,比如基于Xen或KVM的虚拟机沙箱已经开始在某些云计算平台中使用起来。但考虑到虚拟机沙箱的性能开销,它并不能满足对性能敏感的应用场景。因此,这里我们主要讨论如何利用Linux kernel自身所提供的安全功能来构建有效的轻量级沙箱技术。(关于重量级的虚拟机沙箱,我以后再另作介绍&#