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