Docker 容器真的安全么?

翻译 2015年07月07日 14:25:45

作者:Daniel Walsh

Daniel Walsh 在计算机安全领域有30年的工作敬仰。他 2001年8月加入红帽。 Dan 自从2013年开始 领导RHEL的Docker方面的工作,但是在这之前,他已经从事容器方面的工作很多年了。他曾经带领过Selinux项目,侧重于 应用程序空间及策略的开发。Dan 帮助过开发sVirt  ( Secure Vitrualization)。 也曾经创建过SELinux 沙箱, Xguest 用户和Secure Kiosk. 在这之情,Dan 为Netect 工作。

这篇文章基于 talk I gave at DockerCon this year.  主要讨论docker容器技术的安全问题。

Docker是真正的沙箱?

我曾经听到很多人认为docker容器是真正的沙箱,可以随意在其中使用root运行各种应用,认为docker容器可以保护他们的系统。

  • 我听很多人说,docker容器可以像VMs/KMV一样的安全运行应用。
  • 我听很多人说,可以网络上下载 docker镜像,在本地运行。
  • 我甚至看到PasS服务器允许用户上传并运行自己的镜像。
  • 我的一个伙伴说,Docker就是从网络上下载任意的代码并在容器内以root运行。

请不要有 Docker和Linux内核会保护你免受恶意软件攻击的想法。

你在乎么?

如果你的容器不是运行在一个多用户环境,或者你只是在做一些Docker容器的练习,你可能不需要担心。你只需要知道,有些进程在容器内外,具有相同特权。

有些人错误的认为容器时最好的最快的方式来运行虚拟机。其实,从安全角度来讲,容器不同于虚拟机,它的安全性很低。在下面我会详细说明。


请你相信我,Docker容器更应该被当作一种系统服务(docker 服务)。运行在docker中的apache服务跟运行在主机中的apache服务并没有什么区别。这意味这,在docker中运行服务,你需要做这些。

  • 在容器中,抛弃特权
  • 任何时候都不用使用root运行应用
  • 把container中的root当作本地root来对待
现在我们正在告诉人们一项基本原则: 同等对待运行在docker内和运行的docker之外的进程。

不要在系统上运行来源不可靠镜像。在很多方面,docker容器技术革命就像1999年的linux变革一样。在那时候,当linux管理员听到一个新的很酷的linux服务,他们会
  • 从网络搜索包, 如:rpmfind.net 或者其他的任意网站
  • 下载应用到自己系统
  • 安装RPM包或者make install应用
  • 然后使用root运行这个程序
两周之后,管理员听说下载的程序有安全隐患,当期望不会对系统产生影响的时候,他们的系统已经受到入侵


这就是为什么红帽和其它可信的伙伴建立分发领域的原因。 红帽公司给管理员提供:

  • 一个可信软件下载仓库
  • 对各种弱点的安全更新
  • 一个负责任的团队管理缺陷
  • 团队的工程师管理维护软件包和并工作的安全领域,提升系统安全
  • 遵循统一标准检查系统保证造作系统安全

仅仅相信来源可信的docker 镜像, 你可以继续从可信的老朋友那里获取代码和包。如果代码不是来自于内部或者守信的第三方,请不要相信容器技术会保护你的机器。

那么为什么呢?

最大的原因是:并不是所有的资源在linux中都已经被namespace化. 当前,docker使用五个namespaces来隔离系统,他们分别是:进程,网络,挂载,机器名,和共享内存。

这些提升了docker系统的安全性。但这并不是全部,不同于 KVM, 不允许直接和系统内核对话,kvm内进程不允许访问内核文件系统,像 /sys and /sys/fs, /proc/* 等。
KVM 的进程访问的是VMs Kernel而不是 host Kernel。进程如果想到达VM之外,权限提升并不容易. 进程首先需要突破VM的内核,还需要在host系统进程找到弱点,突破SELinux 控制,然后才能攻击host。

但是当你在容器中时,这样的攻击将变的很容易,因为你可以直接访问host内核

大部分的linux 内核子系统,并没有像下面资源一样已经被namespace化

  • SELinux
  • Cgroups
  • file systems under /sys
  • /proc/sys, /proc/sysrq-trigger, /proc/irq, /proc/bus

很多设备没有被namespace化,像:

  • /dev/mem
  • /dev/sd* file system devices
  • Kernel Modules

如果你以root身份攻击这些没有被namespace化的设备,你很容易获得host的root权限。

Docker安全性(一)——Docker容器真的安全吗?

Docker安全性(一)——Docker容器真的安全吗? 本文翻译自Daniel J Walsh的一篇开源文章:http://opensource.com/business/14/7/docker-s...

应用程序跑在Docker容器中会更安全

Docker对安全的支持是与生俱来的。作为一个平台,Docker为跑在其中的所有应用程序提供安全保障,不需要在Docker之外,单独部署一套安全解决方案。...

在Docker容器中实现安全与隔离

利用linux现有功能实现docker的安全与隔离,如namespaces, cgroups, capabilities”!

[读书笔记]Docker与容器安全

Docker能否大规模用于生产环境,尤其是公有云环境,就在于Docker是否能提供安全的环境。本文将总结《Docker容器与容器云》一书3.9节『Docker与容器安全』的主要内容,包括Docker现...
  • ThinkHY
  • ThinkHY
  • 2016年03月28日 10:07
  • 2022

在Docker容器中实现安全与隔离

随着容器技术的发展,它的安全、隔离和资源控制的功能也在不断进步。本文中,我们将回顾Docker容器如何仅仅使用linux的原始功能来实现安全与隔离,比如namespaces, cgroups, cap...

4个让Docker和Kubernetes更安全的容器安全工具

原文:4 extra-strength container security tools for Docker and Kubernetes 作者:Serdar Yegulalp 译...

Docker Security docker 容器安全

Docker Security Adapted from Containers & Docker: How Secure are They? There are three major are...

Docker进阶与实战--容器技术系列

  • 2017年12月05日 23:30
  • 6.79MB
  • 下载

每天5分钟玩转Docker容器技术

  • 2017年10月27日 20:52
  • 49B
  • 下载

Docker安全--将用户添加到Docker组中进行启动容器与未添加到Docker组中的sudo执行的研究

结论:对于将host下的普通用户添加到docker组中后不使用sudo即可执行docker程序,会给大 家造成一种启动docker是以非root权限进行启动的假象,其实这样只是减少了每次使用 sudo...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Docker 容器真的安全么?
举报原因:
原因补充:

(最多只允许输入30个字)