Open 1587 opened 7 years ago
三、 是什么导致了安全漏洞?NameSpace 那么究竟是什么地方导致了Docker容器机制的安全问题呢?简单一句话,Linux系统中不是所有东西都有命名空间(Namespace)。最新版本的Docker有五个命名空间:进程、网络、挂载、宿主和共享内存。如此简单的命名空间显然无法给开发者提供复杂的安全保护。比如在类似KVM的环境里,虚拟机根本无法直接和宿主的内核交互,它没有任何方式可以访问内核文件系统中如/sys和/sys/fs这样的地方。在这种情况下,想要脱离虚拟机来攻击宿主,比如要找到HyperVisor的弱点,攻克SELinux控制(这是个挺难的事情),然后才能够染指宿主的文件系统。而在Docker这样的容器里,原生就可以访问宿主的内核,安全性从何而来?
Dan在文章中列举了主流的没有命名空间的内核,有:
SELinux Cgroups file systems under /sys /proc/sys, /proc/sysrq-trigger, /proc/irq, /proc/bus 没有命名空间的设备有:
/dev/mem /dev/sd* file system devices Kernel Modules 如果开发者能访问或者攻击任何一个,就可以获得整个系统的控制权。
感谢郭蕾对本文的审校。
http://www.infoq.com/cn/news/2014/09/docker-safety/
三、 是什么导致了安全漏洞?NameSpace 那么究竟是什么地方导致了Docker容器机制的安全问题呢?简单一句话,Linux系统中不是所有东西都有命名空间(Namespace)。最新版本的Docker有五个命名空间:进程、网络、挂载、宿主和共享内存。如此简单的命名空间显然无法给开发者提供复杂的安全保护。比如在类似KVM的环境里,虚拟机根本无法直接和宿主的内核交互,它没有任何方式可以访问内核文件系统中如/sys和/sys/fs这样的地方。在这种情况下,想要脱离虚拟机来攻击宿主,比如要找到HyperVisor的弱点,攻克SELinux控制(这是个挺难的事情),然后才能够染指宿主的文件系统。而在Docker这样的容器里,原生就可以访问宿主的内核,安全性从何而来?
Dan在文章中列举了主流的没有命名空间的内核,有:
SELinux Cgroups file systems under /sys /proc/sys, /proc/sysrq-trigger, /proc/irq, /proc/bus 没有命名空间的设备有:
/dev/mem /dev/sd* file system devices Kernel Modules 如果开发者能访问或者攻击任何一个,就可以获得整个系统的控制权。
感谢郭蕾对本文的审校。