首页 > 新闻 > 专家观点 >

李雪峰:云计算安全体系中的沙箱机制和技术剖析

2014-10-30 13:04:10   作者:   来源:CTI论坛   评论:0  点击:


  接下来我们看一下,业内有一些做得比较好的安全产品,在安全方面沙箱方面如何解决的用户隔离问题。

  首先我们看一下Docker目前使用哪些机制,这张图主要是使用了三个纬度,有两个纬度产生了LXC,使用了Namespaces,Namespaces它可以在多个方面实现一定的隔离能力。这个能力需要在2.6.x以后才能部分开始使用。Cgroups机制保证操作系统资源的合理管理。另外,Docker启用了AUSF的分层文件系统。传统文件系统,我们可以认为是纵向的文件系统,你写哪个文件,这个文件一直到硬件,而AUSF是可以进行叠加的。一层层的文件夹叠加,会映射成一个相同的文件夹。Docker里面,最下面的image用来做系统环境,中间会做APP,最上面是用户运行期的东西,这些东西会被Docker封装成一层层,实现了类似于集装箱式的部署能力。

  对于Docker来说,对一个攻击者来说,眼中看到的Docker应用有哪些东西?从刚才的图上也是类似的,整个系统有一个Docker container,右边是DockerEngine。如果你在Docker上直接部署C进程,下面两层就是C的程序。对于恶意用户来说,如果想得到所在机器的root权限,要突破你在Iibc上做的措施,还需要突破kernel中seccomp-bpf,这是kernel提供的一个安全机制,允许你定义某一个进程所能进行的系统过滤。第二、第三层攻破,seccomp-bpf可以进行额外的安全判断。你如果把这个也突破了,其实这台机器也直接root掉了。

  接下来我们看google chrome的沙箱。Chrome使用过SUID/Namespaces sandbox,这也是对linx container机制的利用。使用过seccomp-legacy。在没有seccomp-bpf之前google使用seccomp-legacy。seccomp-legacy使用限制非常大。也同样使用过seccomp-bpf。

  我们刚才看了两个业内的安全产品,可以简单的总结一下,对于沙箱来说,我们有哪些安全机制可以使用?参考这张图,首先对于JVM来说,我们可以用Java security Manager 以及 Classloader机制。如果是Linux Kernel,那么我们还可以直接利用Kernel Namespaces,Cgroup ,Chroot、umount。这些东西在LXC已经封装好了可以用,而且通常它们在一起使用才可以产生比较好的效果。然后是aufs,2.6才开始支持。Seccomp-bpf是3.5,如果版本不够你就要使用其他方案来做内核层的一些过滤了。

  另外一个角度,对云计算上的安全沙箱来说有哪些层次可以做防御?JVM内的防御是否有必要?Java的安全沙箱攻破的难度不是很大,它是不是不要了?刚才我们说了,安全沙箱没有绝对安全的设计,如何在安全上做到尽可能可靠的防护?多层防御可以有效提高安全防护能力。

  第二是进层隔离,用于提供安全机制。

  第三层要在kernel space里面要有安全过虑。

  前面做完了,基于现有的安全机制来说,至少可以认为在目前,可以直接使用的防护措施就这些了。

  刚才我们看到了一些安全机制,接下来看看飞天安全在沙箱方面使用哪些机制?其实前面我们说的这些,该用的都用到了。

  飞天安全沙箱,是这样的一个系统。简单来看,这张图和我们之前的两张图有相似的地方。最终的方案,我们方案融合了前两个的优点。我们这一层的User code可以放到C语言下进行,Iibc可以有一些拦截。这个地方是基于IPC的,所以你在当前进程要做的破坏或者说做的事情,是无法影响到另一个进程的。最后是Linux container,我们有一层内核过滤机制来保证。

  我们今天的分享还是比较聚焦的,就是讲沙箱和安全机制。我们看了一些业内主要的安全产品实现,以及它使用的安全机制。最后针对一个具体的案例-飞天安全沙箱,我们了解了该如何实现融合多种安全机制来实现与着名安全产品相同等级防护能力的安全沙箱。

分享到: 收藏

专题